2015年8月24日月曜日

やっとESP8266(WROOM-02)入手


■追記9/16■

ファームウェアのダウンロード先が違っていました。またコマンドラインなどの表示が崩れていました。ご迷惑をおかけして申し訳ありませんでした。

なお、後日、もう一枚のESP-WROOM-02を組み立てたら、コマンドやArduino IDEファームウェアの書き込みはできるものの、起動してすぐにexceptionやコアダンプの山が出てくる状態になりました。

原因は電源でした(ESP-WROOM-02の電源はかなりシビア?)。某林さんを初め、この現象で悩んでいる方は少なくないようですので、ご参考になれば幸いです。

■お礼■

facebookで某林伸夫さんから教えてもらって、仕事帰りにaitendoに駆け込み入手しました。2個入りとボード2枚で1320円。情報ありがとうございました。

■準備■

さっそくハンダ付け。何も考えずにピンヘッダ付けちゃいましたけど、幅が広いのでブレッドボードで使うのが難しいです。横方向にジャンパ伸ばせばいいんだけど、壮大に間違える自信があるw なので、写真にあるように100円で買ってきたミニブレッドボードを2枚橋渡しして使っていますが(aitendoで1枚100円大安売りしてました。買っといてよかったw…と思ったけど、安いのには理由がある。クソ堅くてピン刺さらないいいいいいw)、ピンソケットを付けた方が試作には便利かも。あ、サンハヤトの新しいブレッドボードなら届きますね。


■さて■

何はともあれ環境整備、最近失敗が多いので、人様の成功例を真似しました。今回はこの記事(ESP-WROOM-02 の Arduino 環境で I2C 制御)を参考にさせていただきました。ありがとうございます。I2C用のプルアップ2本だけだと思っていたのですが、10kΩは5本必要。ずいぶん抵抗使うなぁと思ったんですが、おかげさまで一発で成功しました。

なおリセット/ISPについてはいつもの抵抗入りジャンパ線でGNDに落とすだけ、プルアップはしていません。

電源は最初余裕を見て秋月の超高効率三端子レギュレータを使いましたが、そのあと3.3v100mAの安い三端子レギュレータ(HT7533…秋月では販売終了)に交換しても問題なく動作しました。ESP-WROOM-02の平均消費電流は80mAとのことなので、ちょっとギリギリですが。

Arduino IDEは1.6.5を使います。まずArduino IDEを起動しPreference / 環境設定画面のAdditional Boards Manager URL'sに「http://arduino.esp8266.com/stable/package_esp8266com_index.json」をコピペしてOKをクリック、Toolsメニュー>Board>Board Manager>esp8266 platformを選ぶとインストールされます。

この後、ボードの種類を選びますが、aitendoなど素のespの場合にはGeneric ESP8266 Moduleです。

■ファームウェアアップデート■

この後、WiFiのサンプルを試したのですが、うまく動きませんでした。ので、ファームウェアをアップデートします。バージョンを確かめようとシリアルモニタからATコマンドを叩いてみたのですが、返ってきません。どうやら一度Arduinoとして動作させるとATコマンドインタフェースが消えてしまう模様。そのためだけにツールをアップロードするのも面倒なので、もうサクッとアップデートしてしまいます。Windowsはそのためのツールがあるようなので、そっちをどうぞ。Mac / Linuxではコマンドラインから操作します。

まずesptool.pyライブラリ(分かりにくいけどATTACHMENTSのところ)をダウンロードします。それぞれのzipを解凍したら、esptoolをインストールします。

$ cd <ダウンロードディレクトリ>
$ cd esptoos-master
$ sudo python setup.py install

次にライブラリをインストールしますが、そのためにはUSBで接続したデバイス名が必要です。Arduino IDEのツールメニュー>ポートを見れば /dev/tty.usbなんたら という名前が表示されているはずですので、それを控えておきます。私のところは /dev/tty.usbserial-AH016T8K です。

$ cd <ダウンロードディレクトリ>
$ cd esp_iot_sdk_v1.3.0_15_08_08 ←ダウンロードしたバージョン次第
$ cd esp_iot_sdk_v1.3.0/bin ←これも


以下は実際には1行です。また、上が1.3なのに下が1.2ですが…これは何故か1.3の中に入っているものが1.4と1.2で、1.4はβ版(b1)なのでこうなりました。ダウンロードしたものの中身に合わせてください(以下のコマンド、実際には1行です)。

$ esptool.py -p /dev/tty.usbserial-AH016T8K write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.1024.new.2.bin 0xfc000 esp_init_data_default.bin 0xfe000 blank.bin

すると以下の表示が出てきます。エラーなしにLeavingが出てくれればOKです(というかエラーになったことがないので不明…エラーとしてあり得るのは、usbシリアルの名前が違う、ファイル名が違う、ディレクトリが違う…などでしょうか)。

Connecting...
Erasing flash...
Writing at 0x00000400... (100 %)
Erasing flash...
Writing at 0x00041000... (100 %)
Erasing flash...
Writing at 0x000fc000... (100 %)
Erasing flash...
Writing at 0x000fec00... (100 %)
Leaving...$

これで書き込み終わりました。念のため、さっき動いたスケッチをもう一度書き込んでみて、同じように動作するか確認しておきましょう。

■さて。WiFi■

これもサンプルを試しました(ええそうよ失敗したくないのよ私は)。Arduino ideで ファイルメニュー>スケッチの例>ESP8266WebServer>AdvancedWebServer を開き、WifiルータにあわせてSSIDとパスワードを設定します。シリアルモニタを開くとIPアドレスなどの情報が表示されますので、そのURLをブラウザで叩くと表示されました。このグラフは単に乱数で生成されたものですが、SVGで非常に簡単にグラフができていますので、サーバ側単体でデータ表示する場合の参考になると思います。


…と書くと一発で動いたみたいですが、実際には上記ファームウェアアップデートの前に試してみたら、動きませんでした。v1.2のファームウェアを入れたところ、一発で起動してそのまま8時間安定して動きました。

でそのファームウェアやバージョンの差異ごとにパラメータが違ったりで、インストール後にまったく反応しなくなることもあり、結局最終的に上記パラメータにたどり着くまで2時間ほどかかりました。

■お約束のハマりどころ■

Arduinoとの互換性は高いのですが、微妙な違いもあります。私がハマったのは、もはや私の宿敵ともよぶべきI2C。最初に試した、超小型液晶AQM0802はそのままスケッチをコピペして動いたのですが、その後、手持ちのLCDライブラリやHDC1000用ライブラリは動いたり動かなかったり。

どうもI2CでendTransmissionした後、標準のArduinoでは送信を終了してから戻り、ESPでは終了を待たないで戻ってしまうのが原因ではないかと思い、調査中です。

0 件のコメント:

コメントを投稿