こんにちは、cloudpack の @dz_ こと大平かづみです。
Prologue - はじめに
IoT ができるようになるまで、一歩一歩勉強していきます。
今回は、ESP-WROOM-02
という WiFi モジュールに Arduino 互換のプログラムを書き込んで動作させます。
これにより、ESP-WROOM-02
を使って、WiFi経由でインターネットにアクセスするプログラムを書き込む環境が準備できることとなります。
それではさっそく!
ESP-WROOM-02 の設定値を確認しておく
まず、注意したいのは、ESP-WROOM-02 に一度プログラムを書き込むと、ATコマンドでの接続はできなくなるそうです。(「ESP-WROOM-02 を使った リモート温度・湿度・気圧計の製作」を拝見しました。)
ですので、念のため、AT コマンドで ESP-WROOM-02
の情報を確認しておきましょう。ATコマンドについては、こちら「ESP8266 (ESP-WROOM-02)を使う」を参考にさせていただきました。
AT+GMR
AT version:0.25.0.0(Jun 5 2015 16:27:16)
SDK version:1.1.1
compile time:Jun 5 2015 21:03:10
OK
AT+CIFSR
+CIFSR:STAIP,"192.168.0.1"
+CIFSR:STAMAC,"xx:xx:xx:xx:xx:xx"
OK
なお、戻したい場合は、「ESP-WROOM-02を使ってみる2 -外付けSPIフラッシュの書き換え-」を参考に、SDK を焼き直すやり方があるようです。私はまだこれは実施していないので、実施される方は自己責任でお願いいたします。
Arduino IDE に ESP8266 環境を準備する
さて、それでは、Arduino IDE で ESP8266 に書き込めるように準備します。
Arduino IDE は公式サイトから入手して、インストールしてください。
ボードマネージャーを設定する
Installing with Boards Manager | esp8266/Arduino の手順を参考に、ボードマネージャーを設定します。
「Adding Boards Manager URLs」に http://arduino.esp8266.com/stable/package_esp8266com_index.json
と入力して、「OK」でウィンドウを閉じます。(複数URLがある場合、コンマ区切りで追加できます。)
「ツール」>「マイコンボード」>「ボードマネージャー」を開きます。
esp8266 by ESP8266 Community
が追加されています。クリックすると「インストール」が表示されるので、バージョンを確認してインストールしてください。私は 2.0.0
をインストールしました。
「ツール」>「マイコンボード」>「ESP8266 Modules」に、ESP8266 系のボードが追加されました。 Generic EAP8266b Module
を選択します。
シリアルモニターを設定する
Arduino IDE のシリアルモニターの設定値を以下で設定しておきます。
- 速度:
115200 bps
- 改行:
CRおよびLF
ESP-WROOM-02 に書き込む
まずは(?)書き込めないことを実験
ESP-WROOM-02
は、そのままだとプログラムを焼けません。
本当か?ということで、やってみました。案の定、エラーで書き込めません。
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
warning: espcomm_sync failed
error: espcomm_open failed
UART ブートローダーモードに切り替える
では ESP-WROOM-02
にプログラムを書き込むにはどうしたらいいのかというと、「UART ブートローダーモード」に切り替える必要があります。
このドキュメント「Boot Messages and Modes | Supported Hardware · ESP8266 Arduino Core」を参考に、UART ブートローダーモードに切り替えてみましょう。
UART ブートローダーモードに切り替えるためには、ピンを以下の状態にしてリセットします。リセットするには、 RST
を1度 GND
に落とします。
モード | GPIO15 | GPIO0 | GPIO2 |
---|---|---|---|
通常 | 0V | 3.3V | 3.3V |
UART Bootloarder | 0V | 0V | 3.3V |
※ それぞれ、10kΩの抵抗経由の配線です。
実際に配線してみます。
リセット、UARTブートローダーモード切替用スイッチの配線
基本の配線に加え、モード切替用の構成を配線します。必要なときのみ切り替えられるように、スイッチを組み込みました。
スイッチの配線は、「ESP-WROOM-02 の Arduino 環境で I2C 制御」 を参考にさせていただきました!この記事に回路図があるので、それを見て配線したほうがわかりやすいです。
ピン | 説明 |
---|---|
IO0 | 分岐させ、スイッチを挟んで GND へ |
RST | 分岐させ、スイッチを挟んで GND へ |
私の配線は下図のようになりました。これは、スイッチサイエンスさんの ESP-WROOM-02ピッチ変換済みモジュール《フル版》 を使っています。(例によって素人の配線ですし、配線が基板の裏を通っていてわかりにくかったりしますので、ご参考までに。)
UART ブートローダーモードに切り替える
それでは、このスイッチを利用してモードを切り替えます。
-
IO0 スイッチ
を押しつづける(IO0 を GND につなぐ) -
RST スイッチ
を押して離す(リセット) -
IO0 スイッチ
を離す
これで、プログラムを書き込む準備ができました!
プログラムを書き込む
準備万端、改めてプログラムの書き込みを実行してみると…
最大434,160バイトのフラッシュメモリのうち、スケッチが203,948バイト(46%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が33,206バイト(40%)を使っていて、ローカル変数で48,714バイト使うことができます。
Uploading 208096 bytes from C:\Users\dz\AppData\Local\Temp\builda90113b6da60df6c8d58aadfa9e1c363.tmp/esp_arduino_test.ino.bin to flash at 0x00000000
............................................................................................................................................................................................................
書けましたーーーー!!!(*ノωノ)
以下は loop()
でシリアル出力に "OK..." を表示し続けるテストプログラムを書き込んだ直後です。
尚、書き込みが終わるとモードが元に戻るので、再度書き込む場合も UART ブートローダーモードに切り替えてから書き込んでください。
Epilogue - おわりに
さぁ、ここまでできたら、あとはプログラムを書くだけです!
これであれにつなげられるぞー!
がつがつ進みましょう!!(/・ω・)/