IoT何をいまさら(108) Xiao ESP32C3からNodeREDへMQTT

Joseph Halfmoon

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]とな。ちと不安。

MQTTarduino

上記のライブラリの詳細情報ページは以下であります。

ArduinoMqttClient Library for Arduino

なお、他の候補としては、以下もいいんじゃないかいと思ったのですが(もろESP32_C3もサポートに入っているし。。。)、今回はパス。by Arduinoの文字につられました。pubsubGen

今回実験してみたソースコード

以下のソースは、第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%ばかり。こちらは余裕だね。

buildResults

Node-RED側の設定

Node-REDの方は、別シリーズ「ブロックを積みながら」で使っているラズパイ3上のサーバです。同じラズパイ3上でMQTTブローカ(Mosquitte)も走っています。

Node-REDのフローが以下に、MQTT-INノードでTopicをサブスクライブして、何か到来したら、Dashboard上のTextノードに出力するだけのもの。NodeRedFlowESP32C3Status

mqtt in ノードの設定が以下に。トピック XiaoESP32C3/Statusをサブスクライブしとります。MQTT_ESP32C3_NodeSetting

実行結果

Xiao ESP32C3機に、ArduinoIDE2.0でビルドしたオブジェクトを書き込んで走らせたところ、ラズパイ3機のNode-REDのDashboardに接続したパソコンのブラウザに以下のようなStatusが表示されましたぞ。

MQTT_ESP32C3_Status

ESP32C3からラズパイ3のMQTTブローカ、そしてラズパイ3上のNode-RED、最後にパソコン上のブラウザと、ちゃんとメッセージが伝わったと。当たり前か。

IoT何をいまさら(107) SPI接続のADC、AD7920をArduinoで制御してみる へ戻る

IoT何をいまさら(109) Xiao ESP32C3をNodeREDからMQTTでLチカ へ進む