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

 

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

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

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

謎だ!

 

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"を動かしてみました。

keijirotanabe.github.io

順調な滑り出しだったのですが、ちょっとプログラムを書き換えてみようとしたら・・・書き込みでエラーを起こしました。orz

プログラムを書き換えるときは、毎回IO0をLOWレベルにして再起動しなければならないようです。(開発ボードを使い、Reset  Methodをnodemcuに設定すると楽になるらしい) 

f:id:denshikobo:20171025123229j:plain

 

最後にスケッチ例の中からESP8266Wifi-->WifiWebServerを動かしました。

f:id:denshikobo:20171025132548j:plain

ここまで至って順調です。

 

この後、MQTTの接続で嵌まることになるとは・・・orz

 

 

基板と部品が同時に届いた

Elecrowに基板を発注したのは10/13です。その基板が今日、手元に届きました。

パチパチパチ~

<配送状況はこんな感じ>

 

日本川崎, 到达互换局
广州航空邮件分局, 离开交航
广州航空邮件分局, 到达

 

基板の到着に合わせて、10/22に発注した部品が同じく、今日届きました。

ベスト・タイミングです。

パチパチパチ~

 

f:id:denshikobo:20171024115837j:plain

 

『早速組み立て』と行きたい所ですが・・・

 

先ずは、今回入手した3.3V 2AのACアダプタを使って、ESP-WROOM-02の動作確認から始めます。

 

 

f:id:denshikobo:20171024120507j:plain

MQTT経由でESP-WROOM-02とPic-coloコンソールの通信を確認します。

その次は、FT231XSをSSOP変換基板に半田付けして(前回失敗した)動作確認、基板組み立てはその後です。

 

さて、どうなるか・・・楽しみです。

 

 

 

 

Elecrowに頼んだ基板がもうすぐ届く?

 

Pic-coloの試作基板をElecrowに発注したのは10/13です。
 
ElecrowのMy Accountを覗いても”In production”のまま変化無かったのですが・・・
突然、”配送済み”に変わりました。
 
『えっ、届いて無いけど』
 
同時に送られてきたメールには
We had shipped your order via Registered Airmail, and you should receive it
in 7-25 work days.Please go to http://en.4px.com or http://www.17track.net/en to track your order.
と記されていました。”配送済み”というのは日本語表示の誤りだったようです。
 
で、早速調べてみると・・・
广州航空邮件分局, 离开(出発?)
广州航空邮件分局, 离开交航(航空会社を出発?)
广州航空邮件分局, 到达(到着)
 
安いAir Mail便でもトラッキング・サービスが利用できるのは有り難いです。
ただ今、『輸送中』だそうです。

無事羽田に到着すれば、2、3日で届くと思うのですが・・・

プログラムをデバッグしながら、基板の到着を楽しみに待ちます。

 

 

三年前からPIC32を搭載したArduinoが発売されていたことを知った

少し前に、秋月電子からPIC32MZを使ったオシロスコープが売り出されました。ソースコードを公開しているのですが、Arduino IDEでビルドすると知ってびっくりしました。PIC最強のプレイヤーであるPIC32MZがArduinoの軍門に降っていたなんて・・・orz

akizukidenshi.com

さらに調べてみると、これ(↓)が2014/05/09に発売されていました。

akizukidenshi.com

まさか三年も前に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);

書き込んでみると・・・

 

ビンゴ~

ようやくLCDHello World!が表示されました。

やれやれ

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

ライブラリ登録の方法を調べて、LCDkeypadライブラリのzipファイルをインストール

したところ、LCDKeypadのdemo-sampleも動きました。

ただし、KeypadのUPとDOWNを認識しません(LEFT、RIGHT、SELECTは認識した)。LCDにADC変換結果を表示してみたのですが、UPとDOWNを押しても1023のまま変化しません。回路不良が疑われまが、この件は当面ペンディングにします。

 

結論として、安い互換機でもちゃんと動きました。