ESP32をMQTTのブローカーにしてみた


はじめに

Mongooseというweb server用のライブラリを使ってESP32をブローカーにしてみましたので、その情報共有です。※ESP-IDFで開発しています

これから記載する手順では、最終的に以下の図のように動作確認を行います。

ESP32(ESPr® Developer 32を使用)をブローカーとして動作させて、MQTT Box(PCのアプリケーション)から送信した{'hello':'world'}という文字列をESP32を介して再びMQTT Boxで受け取るという、シンプルな構成と内容です。

※ESP32はSTAモードで動作させています
 
 
この動作確認ではMQTT BoxをPublisher(データ送信する人)とSubscriber(データを受信する人)として使っていますが、実際はESP32をPublisherやSubscriberにすることができます。

つまり、ESP32だけでMQTTの通信ができるということになります。おお、なんということでしょう。

使用したもの

  • ESPr® Developer 32
  • ESP32のソフト開発に使用したOS:Ubuntu18.04 ( Windows7 Pro 64bit をホストOSとするVirtualBoxにインストール )
  • PC(MQTTBoxをインストールした)のOS:Windows7 Pro 64bit

手順

前提

以前作成したmongooseのサンプルプロジェクトの環境をそのまま使うものとします
今回はそのプロジェクトの以下の2ファイル(★)を変更するだけで実現できます。

mongoose_example
┣ main
┃ ┗ main.c ★
┃ 
┣ components
┃ ┗ mongoose
┃   ┗ mongoose.h ★
:

1. main.cをMQTTのブローカー用コードに変更する

main.cをこのコード(github)の内容に全て置き換えます。

※ただし、コード中の以下の①と②は自分の環境に合わせて変更する必要があります。

①使用環境のWiFi情報

#define WIFI_SSID "xxxxx"
#define WIFI_PASS "xxxxx"

②アクセス先(ESP32)のIPアドレス

IP4_ADDR(&ipInfo.ip, 192,168,99,3);
IP4_ADDR(&ipInfo.gw, 192,168,99,1);

2. mongooseライブラリでMQTTのブローカーを有効にする(mongoose.h)

mongoose.hにて以下のようにMG_ENABLE_MQTT_BROKERを有効(1)にします。

#ifndef MG_ENABLE_MQTT_BROKER
#define MG_ENABLE_MQTT_BROKER 1
#endif

3. 動作を確認する

プログラムをビルドしてESP32に書き込み&モニター開始します

$ make
$ make flash
$ make monitor

次にMQTT Boxを立ち上げてESP32と接続した後、Publishするとデータを受け取ることができます。

MQTT Boxの具体的な操作:
①MQTTの設定※を行った後に「Connect」する
②Subscribeする
③TopicとPayloadを入力する
④Publishする
⑤送ったデータと受け取ったデータが表示される

※MQTT Boxの設定内容:

一方、ESP32のモニター上では以下のような表示が出ます。
MQTT Boxの操作に合わせて「MG_EV_MQTT_XXX」と表示されます。

終わりに

ESP32をブローカーにするのは大変そうだなーと思っていたら、Mongooseというライブラリのおかげで意外と簡単に実現することができました。

そして、この手順でブローカーとして動作させているESP32はSTAモードで動作しているので、今のままでは無線ルーターが必要なので、もうちょい頑張ってAPモードにしたいところです。(必要に迫られないとたぶんやらない気がするなぁ)

見ていただいてありがとうございました。
тнайк чoμ_〆(・ω・。)

更新履歴

  • 2019-05-29:新規作成