Seeed社のXiaoシリーズは切手サイズの開発ボードです。その中のESP32-C3搭載機種は、ESP32だけあってWiFi、BLEにも対応。サイズが小さい割には高機能です。そしてCPUコアは流行りのRISC-V。お手軽価格なので試さずにはいられない。ホントか?今回はMQTTでNode-REDへHelloしてみました。
※「IoT何をいまさら」投稿順Indexはこちら
※ 今回は開発環境に Arduino 使わせていただいております。使用IDEは、見た目は1.0と似ているけれども中身は「相当進化している」2.0です。
※以下の過去記事でやってみていることを ESP32C3 Xiaoで「やりなおして」みたのが今回記事です。
IoT何をいまさら(74) M5StickC/M5StackからNode-REDにHello
MQTTライブラリ
Arduino環境の場合、MQTTライブラリも多数あって、どれを使ってよいやら選択に困ります。上記の第74回の過去記事で使ったものは ArduinoIDE2.0にはインストールしていないので、新たなものを選択することにいたしました。
最初に試すのは「公式」的なもの
というコンサバな選択で、インストールして使ってみたのは以下のライブラリであります。まだ[BETA]とな。ちと不安。
上記のライブラリの詳細情報ページは以下であります。
ArduinoMqttClient Library for Arduino
なお、他の候補としては、以下もいいんじゃないかいと思ったのですが(もろESP32_C3もサポートに入っているし。。。)、今回はパス。by Arduinoの文字につられました。
今回実験してみたソースコード
以下のソースは、第74回でM5StickC上で実験したコードの「チョイ変」です。MQTT用のライブラリを変更したので、その影響はでてますが、ベースの部分はほとんど同じ(って言って短いコードだから当たり前か。)
ネット接続したら、1発 Hello メッセージをMQTTブローカにパブリッシュするだけのもの。ともかくミニマムなコード。
「こんなもの」でもMQTTブローカからNode-REDにメッセージが伝わることは確かめられます。
#include <WiFi.h> #include <ArduinoMqttClient.h> char *ssid = "Your SSID"; char *password = "Your password"; const char broker[] = "Your IP address"; const int brokerPort = 1883; const char topic[] = "XiaoESP32C3/Status"; WiFiClient wifiClient; MqttClient mqttClient(wifiClient); void setup() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } if (!mqttClient.connect(broker, brokerPort)) { while (1); }; mqttClient.beginMessage(topic); mqttClient.print("Hello from ESP32C3."); mqttClient.endMessage(); } void loop() { }
ビルド結果が以下に、短いコードだけれどもネットワーク使うのでフラッシュは49%も使ってます。まあ搭載量多いから残り50%もあれば相当なことができそうですが。RAMの使用量は10%ばかり。こちらは余裕だね。
Node-RED側の設定
Node-REDの方は、別シリーズ「ブロックを積みながら」で使っているラズパイ3上のサーバです。同じラズパイ3上でMQTTブローカ(Mosquitte)も走っています。
Node-REDのフローが以下に、MQTT-INノードでTopicをサブスクライブして、何か到来したら、Dashboard上のTextノードに出力するだけのもの。
mqtt in ノードの設定が以下に。トピック XiaoESP32C3/Statusをサブスクライブしとります。
実行結果
Xiao ESP32C3機に、ArduinoIDE2.0でビルドしたオブジェクトを書き込んで走らせたところ、ラズパイ3機のNode-REDのDashboardに接続したパソコンのブラウザに以下のようなStatusが表示されましたぞ。
ESP32C3からラズパイ3のMQTTブローカ、そしてラズパイ3上のNode-RED、最後にパソコン上のブラウザと、ちゃんとメッセージが伝わったと。当たり前か。