ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Arduino】Seeed Studio XIAO ESP32C3でMQTTのPublishを行う

 過去の記事で色々とMQTTについての記事を書いてきました。

 今回は実際にありそうな組み合わせとして、Seeed Stuido XIAO ESP32C3から別端末のMQTTブローカーへPublishを行う記事になります。
 前提としてArduino IDEでXIAO ESP32C3を使えるようにしておく必要があるので注意してください。
 また、詳しい内容は参考資料に挙げているページ様を参照してください。


 では、始めます。


1:ArduinoMqttClientライブラリのインストール
 ESP32系でMQTTを扱うライブラリは色々と存在しますが、今回はArduino公式が出している「ArduinoMqttClient」を使っていきます。

 Arduino IDEを起動させて「ライブラリマネージャーのアイコン」をクリックし、出てきた検索欄に「ArduinoMqttClient」と入力し、出てきたライブラリの「インストール」ボタンをクリックしてインストールします。

 以下のように「installed」のマークになっていればインストールは完了しています。


2:ArduinoMqttClientを使ったサンプル
 サンプルスケッチは以下のようになります。
 前提として今回のサンプルは過去記事で説明したブローカーに対してPublishするものとなります。つまりポート番号は「1883」、トピック名は「test」という前提で記述しています。またブローカーのIPアドレスWiFiSSDとパスワードは適宜書き換えて動かしてください。

・XIAO_ESP32C3_mqtt_test.ino

#include <WiFi.h>
#include <ArduinoMqttClient.h>

char *ssid     = "******"; // 適宜書き換える
char *password = "******"; // 適宜書き換える

const char broker[]   = "192.168.xxx.xxx"; // 適宜書き換える
const int  brokerPort = 1883;              // 適宜書き換える
const char topic[]    = "test";            // 適宜書き換える

// WiFiクライアントとMQTTクライアントの準備
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println("--- setup start ---");

  // WiFi接続
  Serial.println("Connecting wifi");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("Connected!");

  // MQTTブローカー接続
  Serial.println("Connecting broker");
  while (!mqttClient.connect(broker, brokerPort)) {
    Serial.print(".");
    delay(500);
  };
  Serial.println("Connected!");

  Serial.println("--- setup end ---");
}

void loop() {
  // メッセージ送信(Publish)
  mqttClient.beginMessage(topic);
  mqttClient.print("Hello from ESP32C3.");
  mqttClient.endMessage();
  // 送信処理終了を表示
  Serial.println("send message!");

  delay(5000);
}

 上記のスケッチの必要な部分を適宜書き換えて実行しシリアルモニタを確認すると、以下のようにWiFiとBrokerに接続した後、5秒間隔でPublishしたことがわかるメッセージが表示されます。

13:54:42.045 -> --- setup start ---
13:54:42.045 -> Connecting wifi
13:54:42.086 -> .Connected!
13:54:42.586 -> Connecting broker
13:54:43.036 -> Connected!
13:54:43.036 -> --- setup end ---
13:54:43.081 -> send message!
13:54:48.091 -> send message!
13:54:53.055 -> send message!

 Subscribe側では以下のように5秒毎に「Hello from ESP32C3.」のメッセージを受信して表示されます。

$ mosquitto_sub -h "192.168.xxx.xxx" -t test
Hello from ESP32C3.
Hello from ESP32C3.
Hello from ESP32C3.


 以上がArduinoを使ってSeeed Studio XIAO ESP32C3でMQTTのPublishを行う方法になります。

 今回はやっていませんが、ライブラリのGithubを見るとSubscribeする関数も用意されているようなので、SubscribeもESP32側でできるみたいです。
 ライブラリがまだBeta版でバグがある可能性もありますが、割と簡単にPublishできることがわかったのでIoTなどで割と使えるのではないかと思います。


・参考資料