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”で検索を掛けて、ようやくこれを見つけました。
どうやら”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を使っていると、ライブラリが頻繁にアップデートされます。ネット上のサンプル・コードではなく、ライブラリと一緒に提供される『スケッチ例』を最初に試すべきなのだと気づきました。
また、経験値が一つ上がった!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
今回のように、インストールしたライブラリの不具合を、皆はどうやって追いかけるんだろう?
謎だ!
ESP-WROOM-02を動かして見た
先ずはESP-WROOM-02の動作確認です。
これ(↓)にESP-WROOM-02を半田付けした (2年くらい放置していた)ものを
ESP-WROOM-02ピッチ変換用基板《シンプル版》 (基板のみ) - スイッチサイエンス
ブレッドボードに取り付けました。IO0,IO2,EN,RSTを10kΩでプルアップして、電源(3.3vとGND)を接続して、USBシリアルのTX,RX,GNDを接続して配線完了です。
こちら(↓)に記されていた回路接続を参考にしました。
ESP-WROOM-02動作確認 - <<梅>>備忘録 ~Random Walk~
プルアップされたENをジャンパー線で一瞬GNDに落とすと文字化けした文字列が表示されました。(起動直後は通信速度が115200と異なるらしい)
その後『AT』と入力すると『OK』が帰ってきました。
パチパチパチ~
その後はこちら(↓)を参考にして、Wifiでアクセスポイントに接続出来ることまで確認出来ました。パチパチパチ~
ESP-WROOM-02: ATコマンドによるWifi動作確認 - Qiita
いよいよATコマンドとお別れして、Arduino IDEを使ったプログラムに移ります。
先ずはこちら(↓)を参考に開発環境を整え、””Hello World"を動かしてみました。
順調な滑り出しだったのですが、ちょっとプログラムを書き換えてみようとしたら・・・書き込みでエラーを起こしました。orz
プログラムを書き換えるときは、毎回IO0をLOWレベルにして再起動しなければならないようです。(開発ボードを使い、Reset Methodをnodemcuに設定すると楽になるらしい)
最後にスケッチ例の中からESP8266Wifi-->WifiWebServerを動かしました。
ここまで至って順調です。
この後、MQTTの接続で嵌まることになるとは・・・orz
基板と部品が同時に届いた
Elecrowに基板を発注したのは10/13です。その基板が今日、手元に届きました。
パチパチパチ~
<配送状況はこんな感じ>
基板の到着に合わせて、10/22に発注した部品が同じく、今日届きました。
ベスト・タイミングです。
パチパチパチ~
『早速組み立て』と行きたい所ですが・・・
先ずは、今回入手した3.3V 2AのACアダプタを使って、ESP-WROOM-02の動作確認から始めます。
MQTT経由でESP-WROOM-02とPic-coloコンソールの通信を確認します。
その次は、FT231XSをSSOP変換基板に半田付けして(前回失敗した)動作確認、基板組み立てはその後です。
さて、どうなるか・・・楽しみです。
Elecrowに頼んだ基板がもうすぐ届く?
in 7-25 work days.Please go to http://en.4px.com or http://www.17track.net/en to track your order.
三年前からPIC32を搭載したArduinoが発売されていたことを知った
少し前に、秋月電子からPIC32MZを使ったオシロスコープが売り出されました。ソースコードを公開しているのですが、Arduino IDEでビルドすると知ってびっくりしました。PIC最強のプレイヤーであるPIC32MZがArduinoの軍門に降っていたなんて・・・orz
さらに調べてみると、これ(↓)が2014/05/09に発売されていました。
まさか三年も前にArduino MEGA互換のPIC32MXが有ったなんて・・・orz
全く知りませんでした。
実は『Arduino』という文字から目を背けていたんです。トレンドに背を向ける偏屈な姿勢を反省しました。やっぱり、Arduinoって凄い!
そして、こんな物(↓)まで見つけてしまいました。
Debug chipKIT Sketches in MPLAB X IDE – chipKIT® Development Platform
ArduinoのスケッチをchipKIT-core(Ver1.4.0以降)を使ってMPLAB-XのProjectに落とし込んで、MPLAB-Xでデバッグ出来るようにするプラグインなんだそうです。
う~ん、ここまでPICの世界にArduinoが入り込んでいたとは・・・
chipKIT恐るべし!
ちょっと補足します
入手したArduino (互換機)ですが「EasyWorldMall UNO R3開発ボード」で検索するとヒットします。単価¥458 関東への送料無料というフレンドリー価格です。注文から10日程で届きました。添付されているUSBケーブルはかなり短く、手持ちの別ケーブルを使いました。
いよいよ始まるArduinoライフに心躍らせてUSBケーブルを接続したのですが・・・
適切なUSBドライバーがPCにインストールされていないため、正しく認識されませんでした。orz
しかし、WIndws10のデバイス・マネージャーで『最新のドライバーを自動検索』するとCH340用のUSBドライバが自動的にインストールされ、COM6ポートが開設されました。(パチパチパチ~)
後はArduino IDEでCOM6に接続して、楽しい(悪戦苦闘の)Arduinoライフが始まりましたとさ。
目出度し、目出度し。
ーーーーーーーーーーーーーーーーーーーーーーーー
近くに経験者が居らず、人柱になる覚悟も無い場合は、Arduino (互換機)に手を出してはいけません。
ーーーーーーーーーーーーーーーーーーーーーーーー
動き出した互換機を眺めながら、Arduinoの世界が¥458で手に入ることの意味を考えています。
Arduino(互換機)を動かしてみた
10月始めに注文したArduino互換機が届いたので、早速動かしてみました。
全くの初心者なので、『Arduinoの始め方』などのサイトを参考に先ずはHello World!から。続いてLチカ・・・えっ、ポートとGND間に直接LEDを接続するって?
言い訳めいた説明が後に続いていますが、いくら何でもやり過ぎです。せめて、こういう(↓)部品の使用を勧めて欲しいものです。
akizukidenshi.comーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
と言うか・・・
後で気づいたんだけど、オン・ボードのLEDがDIGITAL13の出力で点滅する。
つまりUNO Rev.3(互換機)は、お試しのLチカに外付けのLEDは必要無い。
たから、折角手に入れたArduinoを大事にしたいなら、間違ってもLEDをコネクタに直に指してはいけません。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ぶつくさ文句を垂れながら、抵抗とLEDの直列回路を組んでLチカを確認しました。次にLCD-Keypadシールドを動かすことにしたのですが、ダウン・ロードしたサンプル・スケッチがビルド・エラーで動きません。orz
”ヘッダ・ファイルが見つからない”というのですが、はて?
includeディレクトリってどうやって指定すれば良いんだ?
(これ↑は誤り。ライブラリ登録という方法をまだ知らなかった)
LCDKeypadのサンプルは諦めて、標準で入っていたLiquidCrystalライブラリで動かすことにしました。こちらのサンプル・スケッチは問題なくビルドできました。しかし、マイコンに書き込んでもLCDは何も表示しません。
ArduinoとLCDKeypadシールド両方併せても1200円しない格安互換機を買ったのがいけなかったのか?(<==少し後悔している)
気を取り直してLチカ・プログラムでデジタル出力機能を1pinずつ確かめました。Arduinoの出力は良さそうです。ところがLCDKeypadのpinで確認すると、何か接続が変です。
Liquidcrystalのサンプル・スケッチ
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
LCDKeypad(正規品)のWeb情報
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
ん、pin配置が違う!
Liquidcrystalのサンプル・スケッチを次のように修正して
//const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
書き込んでみると・・・
ビンゴ~
ようやくLCDにHello World!が表示されました。
やれやれ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ライブラリ登録の方法を調べて、LCDkeypadライブラリのzipファイルをインストール
したところ、LCDKeypadのdemo-sampleも動きました。
ただし、KeypadのUPとDOWNを認識しません(LEFT、RIGHT、SELECTは認識した)。LCDにADC変換結果を表示してみたのですが、UPとDOWNを押しても1023のまま変化しません。回路不良が疑われまが、この件は当面ペンディングにします。
結論として、安い互換機でもちゃんと動きました。