LuckFox Pico ProでUbuntuを使ってみる

Network機能

使用しているDistributionがUbuntuなので、Network機能については問題なく使えます。
こちらがluckfoxのUbuntuリポジトリでインストールできるパッケージの数です。


こちらがraspbian(RaspberryPi)のリポジトリでサポートしているパッケージの数です。


こちらがarmbian(orangepi)のリポジトリでサポートしているパッケージの数です。


こちらがIA64のUbuntuのリポジトリでサポートしているパッケージの数です。
さすがに多いです。


試しにmosquittoで始まるパッケージを検索してみましたが、IA64サーバのUbuntuと結果は同じです。
$ sudo apt search '^mosquitto'
Sorting... Done
Full Text Search... Done
mosquitto/jammy-updates,jammy-security 2.0.11-1ubuntu1.1 armhf
  MQTT version 5.0/3.1.1/3.1 compatible message broker

mosquitto-clients/jammy-updates,jammy-security 2.0.11-1ubuntu1.1 armhf
  Mosquitto command line MQTT clients

mosquitto-dev/jammy-updates,jammy-security 2.0.11-1ubuntu1.1 all
  Development files for Mosquitto

aptでmosquitto-clientsをインストールして、以下のスクリプトを動かしてみました。
問題なくPublishすることができます。
#!/bin/bash
#set -x
count=1
while :
do
        payload=`date "+%Y/%m/%d %H:%M:%S"`
        #payload="text${count}"
        echo ${payload}
        mosquitto_pub -h broker.emqx.io -p 1883 -t "/topic/luckfox/test" -m "$payload"
        count=$((++count))
        sleep 1
done

pythonのPahoライブラリ(V2.x)をインストールしてみました。
$ python3 -m pip install -U paho-mqtt

PahoライブラリのV2は2024年2月にリリースされたばかりで、不具合が多いと聞いていたのですが、
2024年5月にV2.1がリリースされ不具合はかなり改善されたようです。
PahoライブラリはV1.xとV2.xでは、APIが大きく変わっています。
こちらにV1.xからV2.xへのmigrationガイドが公開されています。
以下のスクリプトで問題なくSubscriveすることができます。
起動時の引数でSubscriveするTopicを指定します。
# -*- coding:utf-8 -*-
import paho.mqtt
import paho.mqtt.client as mqtt
import random
import argparse

def on_connect(client, userdata, flags, respons_code):
    print('connect status:{}'.format(respons_code))
    client.subscribe(args.topic)

def on_message(client, userdata, msg):
    #print("{}:{}".format(msg.topic, msg.payload))
    print("{}:{}".format(msg.topic, msg.payload.decode('utf-8')))

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--host', help="mqtt host to connect to", default="broker.emqx.io")
    parser.add_argument('--port', type=int, help="mqtt port to connect to", default=1883)
    parser.add_argument('--topic', required=True, help="mqtt subscrive topic")
    args = parser.parse_args()
    print("host={}".format(args.host))
    print("port={}".format(args.port))
    print("topic={}".format(args.topic))

    print("paho.mqtt.__version__={}".format(paho.mqtt.__version__))
    client_id = f'subscribe-{random.randint(0, 100)}'
    #client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)
    client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, client_id)
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect(args.host, port=args.port, keepalive=60)
    client.loop_forever()

githubのリポジトリをクローンしてみました。
問題なくクローンすることができます。
$ git clone https://github.com/nopnop2002/python-periphery-example
Cloning into 'python-periphery-example'...
remote: Enumerating objects: 206, done.
remote: Counting objects: 100% (206/206), done.
remote: Compressing objects: 100% (151/151), done.
remote: Total 206 (delta 106), reused 152 (delta 55), pack-reused 0
Receiving objects: 100% (206/206), 42.02 KiB | 462.00 KiB/s, done.
Resolving deltas: 100% (106/106), done.



luckfoxのMACアドレスは毎回動的に変わります。
以下のコマンドでMACアドレスを調べることができますが、起度するたびに変わります。




MACアドレスの最初の3オクテットはベンダー情報を示していて、こちらの ページなどでMACアドレスからベンダー情報を検索することができますが、
明らかにMACアドレスが埋め込まれていない(ベンダーコードの無い)Ethernetモジュール(いわゆる海賊モジュール)が使われています。
MACアドレスは完全ユニークなアドレスであることが定められていますが、天文学的に低い確率で、
ネットワーク内の他のマシンと海賊モジュールのMACアドレスが重複すると、ルーターが正しくパケットを転送できなくなるので、
ネットワーク内の通信がメチャクチャになるはずです。

MACアドレスが同じ相手には、DHCPはなるべく同じIPを払い出しますが、MACアドレスが違う相手には新しいIPを払い出します。
DHCPから払い出されるIPアドレスが起動するごとに変わるので、IPアドレスを調べるためにデバッグポートを使ったログインが必要になりま す。
avahi-daemonをインストールして、sshのサービスを登録すれば、mDNSホスト名で接続することができます。
インストールとサービスの起動は以下の手順です。
$ sudo apt install avahi-daemon

$ sudo vi /etc/avahi/services/ssh.service
以下の内容でssh.serviceを作成
----------------------------------------------------
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
  <name replace-wildcards="yes">%h</name>

  <service>
    <type>_ssh._tcp</type>
    <port>22</port>
  </service>
</service-group>
----------------------------------------------------

$ sudo systemctl enable avahi-daemon.service
$ sudo systemctl start avahi-daemon.service
$ systemctl status avahi-daemon.service
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
     Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-10-21 08:21:28 JST; 3 weeks 5 days ago
TriggeredBy: ● avahi-daemon.socket
   Main PID: 631 (avahi-daemon)
     Status: "avahi-daemon 0.8 starting up."
      Tasks: 2 (limit: 1005)
     Memory: 1.4M
        CPU: 28.042s
     CGroup: /system.slice/avahi-daemon.service
             tq631 avahi-daemon: running [mqtt-server.local]
             mq686 avahi-daemon: chroot helper

これで、別のマシンからはluckfox.localで名前を解決することができます。
$ ping luckfox.local
PING luckfox.local (192.168.10.125) 56(84) bytes of data.
64 bytes from 192.168.10.125 (192.168.10.125): icmp_seq=1 ttl=64 time=0.457 ms
64 bytes from 192.168.10.125 (192.168.10.125): icmp_seq=2 ttl=64 time=0.515 ms
64 bytes from 192.168.10.125 (192.168.10.125): icmp_seq=3 ttl=64 time=0.624 ms

以下のコマンドでローカル ネットワーク上の mDNS/DNS-SD 公開サービスをスキャンすることができます。
$ sudo apt install mdns-scan
$ mdns-scan
+ luckfox._ssh._tcp.local
+ landisk-HDL-AA1 [34:76:c5:71:e0:6d]._workstation._tcp.local
+ landisk-HDL-AA1._http._tcp.local

TeraTermを使ったリモートログインでも、luckfox.localでログインすることが出来るようになります。
これでデバッグポートを使ったログインともさよならできます。




MACアドレスを固定にする方法がこちらに 有りました。
/etc/network/interfacesに以下を追加することで、MACアドレスを固定することができます。
$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
auto eth0
iface eth0 inet manual
  pre-up ifconfig eth0 hw ether 78:01:B3:FC:E8:55

source /etc/network/interfaces.d/*

これでDHCPから払い出されるIPアドレスも(基本的に)毎回同じになります。


続く...