denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

ESP-WROOM-02のMQTT接続で嵌まった

Arduino IDEを使って行うESP-WROOM-02の開発は(小さな不具合を除けば)順調に進み、いよいよMQTTの接続を試すことにしました。

 

参考にしたのはこちら(↓)のサイトです。

電子工作界隈で話題のWi-Fiモジュール「ESP8266」でMQTTを使う方法 | 株式会社LIG


必要な作業がまとめて記されているので、初めての方でも取り組みやすいのではないか、と思います。(ただし、一点を除いて)

 

既にWindows環境にmosquittoブローカが立ち上がっていて、ESP8266の開発環境もArduino IDEに組み込み済みなので、これ(↓)をコピペして実行する所から始めたのですが・・・

esp8266-mqtt-quicktest/mqtt_esp8266_test.ino at master · kiyopikko/esp8266-mqtt-quicktest · GitHub

 

Exception (3)を起こし、リスタートを繰り返します。orz

”Exception Decorder”をインストールして解析すると・・・

---------------------
Exception 3: LoadStoreError: Processor internal physical address or data error during load or store

Decoding 9 results
0x402301e0: sleep_reset_analog_rtcreg_8266
0x40202f76: Adafruit_MQTT::connect()
0x40203408: Print::println()
0x40201e08: MQTT_connect()
0x40201e3a: loop
0x40203768: loop_wrapper
0x40100718: cont_norm

---------------------

どうやら、LoadStore命令で不正アクセスを起こしてたようです。

しかし、Arduino IDEでMQTT_connect()から先の処理を調べるには、どうしたら良いのでしょうか?いくら調べても、その方法が見つかりません。sleep_reset_analog_rtcreg_8266が何なのか?それも分かりません。orz


”MQTT Exception 3”で検索を掛けて、ようやくこれを見つけました。

mqtt.connect() throws Exception (3) rst cause:2, boot mode:(1,6) · Issue #68 · adafruit/Adafruit_MQTT_Library · GitHub

 

どうやら”PROGMEM”が悪さをしているようです。コピペしたサンプル・コードにもPROGMEMが使われています。

コピペしたコード(↓)

const char MQTT_SERVER PROGMEM = YOUR_SERVER;
const char MQTT_CLIENTID
PROGMEM = __TIME__ "_test_client_id";
const char MQTT_USERNAME PROGMEM = YOUR_USERNAME;
const char MQTT_PASSWORD
PROGMEM = YOUR_PASSWORD;

 

”最新のexampleを調べろ”ということなので、スケッチ例-->Adafruit MQTT Library-->mqtt_esp8266を実行すると・・・

 

WiFi connected
IP address:
192.168.2.108
Connecting to MQTT... MQTT Connected!

Sending photocell val 0...OK!

Sending photocell val 1...OK!

 

動きました!

勿論、こちらのコードにはPROGMEMは使われていません。¥(^_^)

一時はどうなることかと思い(ESP-WROOM-02の利用を諦めかけ)ました。

 

Arduino IDEを使っていると、ライブラリが頻繁にアップデートされます。ネット上のサンプル・コードではなく、ライブラリと一緒に提供される『スケッチ例』を最初に試すべきなのだと気づきました。

 

また、経験値が一つ上がった!

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

今回のように、インストールしたライブラリの不具合を、皆はどうやって追いかけるんだろう?

謎だ!