はじめに
STM32F4DiscoveryでEthernetが使えるようになったのでMQTTを動かしてみる。
既にNuttXでMQTTを動作させた例がないかWebで調べたところ、こんなものを見つけた。
リンク先では、MQTT-Cを動かそうとしていて問題が発生したというissueで、最終的には動作したということだった。
その時にdarcygさんが作成したパッチが参照できるので、これを参考に作業することにした。
パッチの修正
MQTT-Cはアプリケーションになるため、appsのリポジトリに対しての修正となる。
このパッチはそのままではうまく当たってくれないので、修正する必要がある。
パッチをそのまま載せると長いので、Gistに貼る。
コンフィグレーション
MQTT-Cを組み込むために、次のコンフィグレーションを有効化する.
CONFIG_NETUTILS_MQTTC
Application Configuration -> Network Utilities -> MQTTC client library
CONFIG_SYSTEM_MQTTC
Application Configuration -> System Libraries and NSH Add-Ons -> 'mqttc' command
動作確認
UbuntuにMosquittoをインストールしSubscriberを実行し、NuttX側でPublishする。
IPアドレス | |
---|---|
PC | 192.168.10.1 |
NuttX | 192.168.10.100 |
Mosquittoのインストール
次のコマンドでインストールする。
$ sudo apt install mosquitto mosquitto-clients
Subscriberの実行
MQTT-CのPublisherのサンプルがdatetime
というトピックをPublishするので、それをSubscribeする。
$ mosquitto_sub -t datetime
Publisherの実行
NuttX側で次のコマンドを実行する。パラメータにPC側のIPアドレスを指定する。
$ mqttc 192.168.10.1
実行して少しすると次のように表示される。
mqttc is ready to begin publishing the time. Press ENTER to publish the current time. Press CTRL-D (or any other key) to exit.
これ以降、Enterキーを押すごとにデータがPublishされる。
mqttc published : "The time is 1970-01-01 00:00:34" packet_id = 0x0000B405,268456040 mqttc published : "The time is 1970-01-01 00:00:35" packet_id = 0x0000EE02,268456020 mqttc published : "The time is 1970-01-01 00:00:36" packet_id = 0x00007701,268456000 mqttc published : "The time is 1970-01-01 00:00:37" packet_id = 0x00008F80,268455980 mqttc published : "The time is 1970-01-01 00:00:38" packet_id = 0x000047C0,268455960 mqttc published : "The time is 1970-01-01 00:00:39" packet_id = 0x000023E0,268455940 mqttc published : "The time is 1970-01-01 00:00:39" packet_id = 0x000011F0,268455920 mqttc published : "The time is 1970-01-01 00:00:40" packet_id = 0x000008F8,268455900
現在時刻をPublishしているが、RTCなどがないためでたらめな時刻となっている。
PC側でNuttXからのデータがきちんとSubscribeできていればOK。
$ mosquitto_sub -t datetime The time is 1970-01-01 00:00:34 The time is 1970-01-01 00:00:35 The time is 1970-01-01 00:00:36 The time is 1970-01-01 00:00:37 The time is 1970-01-01 00:00:38 The time is 1970-01-01 00:00:39 The time is 1970-01-01 00:00:39 The time is 1970-01-01 00:00:40
リポジトリのクローン
この環境を組み込んだリポジトリのクローンをGithub
に作成した。
使用する場合はnuttxのリポジトリとして次のものを使用する。
$ git clone https://github.com/mickey-happygolucky/nuttx.git -b mqtt $ git clone https://github.com/mickey-happygolucky/apps.git -b mqtt $ cd nuttx $ tools/configure.sh -l configs/stm32f4discovery/nsh_enc28j60_mqtt $ make -j4 $ st-flash write nuttx.bin 0x8000000