ESP8266をWifiモデムとして使う

ATコマンドによるMQTT通信


ESP8266をWifiモデムとして使って、UNOやNANOなどEthernetを持たないボードでMQTT通信をしたいと考えていました。
以下に詳しい解説が公開されています。

MQTT で始めるIoTデバイスの作り方 第1回

MQTT で始めるIoTデバイスの作り方 第2回

MQTT で始めるIoTデバイスの作り方 第3回

MQTT で始めるIoTデバイスの作り方 第4回

MQTT で始めるIoTデバイスの作り方 第5回

MQTT で始めるIoTデバイスの作り方 第6回

なかなか読みごたえがある連載です。
ATコマンドだけでMQTTを実現している点が画期的です。
この通りにやれば簡単な動作確認はできますが、連載の中で紹介されているスケッチには以下の機能が実装されていません。
Publisher
KeepAliveの機能が無いので、90秒以上PublishをしないとBrokerから切断されます。
Will-Topicの機能が有りません。

Subscriber
KeepAliveの機能が無いので、90秒以上動くとBrokerから切断されます。
受信したメッセージの解析と、SUBACKを応答する機能が有りません。

そこで、これらの機能を加えたスケッチをこ ちらで公開してま す。
以下はUNOのPublisherからのメッセージを、UNOのSubscriberで受信していますが、
公開しているスケッチはarduino/stm32f103のどちらでも動きます。

Publish側の表示


Subscribe側の表示




こ ちらでW5100/ENC28J60のEthernetモジュールとMQTTクライアントライブラリを使ったMQTT通信を紹介して いますが、
これらのライブ ラリはメモリを大幅に消費します。
ESP-01をWifiモデムとして使うとメモリは半分ぐらいしか使いません。

UNO+ENC28J60+UIPEthernetライブラリ+MQTTクライアントライブラリ
最大32256バイトのフラッシュメモリのうち、スケッチが24796バイト(76%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1736バイト(84%)を使っていて、ローカル変数で312バイト使うことができます。
スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。

UNO+W5100+Ethernetライブラリ+MQTTクライアントライブラリ
最大32256バイトのフラッシュメモリのうち、スケッチが16554バイト(51%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1061バイト(51%)を使っていて、ローカル変数で987バイト使うことができます。

UNO+Software Serial+ESP-01+AT Firmware
最大32256バイトのフラッシュメモリのうち、スケッチが6778バイト(21%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が737バイト(35%)を使っていて、ローカル変数で1311バイト使うことができます。



メモリ消費が小さいのでSubscriberとTFTシールドを組み合わせてみました。
TFTシールドも専用のライブラリを使いますが、UNOの32Kで動きます。

UNO+Software Serial+TFT ライブラリ+ESP-01+AT Firmware
最大32256バイトのフラッシュメモリのうち、スケッチが21124バイト(65%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1088バイト(53%)を使っていて、ローカル変数で960バイト使うことができます。

UNOやNANOの32Kメモリでは、Ethernetライブラリ + TFTライブラリは間違いなく動きません。

SD-CARDを使わなければ、TFTシールドのディジタルピン#10〜#13は自由に使えます。
UNO互換機はピンソケットの内側にピンヘッダーを立てられますので、電源関係とディジタルピン#10〜#13を外に出しました。
ESP-01とのUART通信はピン#10と#11を使いました。




これでUNO、NANO、ProMiniなど、イーサネットを持たないボードでも、ESP-01をモデムとして使うことでMQTTができるように なります。

次回
はATコマンドによるメール送信を紹介します。