こんばんは、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 の手順を参考に、ボードマネージャーを設定します。

Arduino の「環境設定」を開きます。

c8022e36-f0cc-2da7-386d-20aa77476afa

「Adding Boards Manager URLs」に http://arduino.esp8266.com/stable/package_esp8266com_index.json と入力して、「OK」でウィンドウを閉じます。(複数URLがある場合、コンマ区切りで追加できます。)

16a6b0a9-9bf9-0752-12e6-fceae090e68a

「ツール」>「マイコンボード」>「ボードマネージャー」を開きます。

92d1bda6-3a96-fb74-595b-378f16e3306e

esp8266 by ESP8266 Community が追加されています。クリックすると「インストール」が表示されるので、バージョンを確認してインストールしてください。私は 2.0.0 をインストールしました。

9b93b1f7-6b52-4aec-a5c1-d7b67a7fa405

「ツール」>「マイコンボード」>「ESP8266 Modules」に、ESP8266 系のボードが追加されました。 Generic EAP8266b Module を選択します。

e5fd8a0f-7c50-2ed2-a264-787b77e5da72

シリアルモニターを設定する

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ピッチ変換済みモジュール《フル版》 を使っています。(例によって素人の配線ですし、配線が基板の裏を通っていてわかりにくかったりしますので、ご参考までに。)

f7ea9618-9eab-0b02-1f56-c09ab24ff816

UART ブートローダーモードに切り替える

それでは、このスイッチを利用してモードを切り替えます。

  1. IO0 スイッチ を押しつづける(IO0 を GND につなぐ)
  2. RST スイッチ を押して離す(リセット)
  3. IO0 スイッチ を離す

これで、プログラムを書き込む準備ができました!

プログラムを書き込む

準備万端、改めてプログラムの書き込みを実行してみると…

最大434,160バイトのフラッシュメモリのうち、スケッチが203,948バイト(46%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が33,206バイト(40%)を使っていて、ローカル変数で48,714バイト使うことができます。
Uploading 208096 bytes from C:UsersdzAppDataLocalTempbuilda90113b6da60df6c8d58aadfa9e1c363.tmp/esp_arduino_test.ino.bin to flash at 0x00000000
............................................................................................................................................................................................................

書けましたーーーー!!!(*ノωノ)

以下は loop() でシリアル出力に “OK…” を表示し続けるテストプログラムを書き込んだ直後です。

046ca0b6-ccac-a999-06db-834b9b732d3a

尚、書き込みが終わるとモードが元に戻るので、再度書き込む場合も UART ブートローダーモードに切り替えてから書き込んでください。

Epilogue – おわりに

さぁ、ここまでできたら、あとはプログラムを書くだけです!

これであれにつなげられるぞー!

がつがつ進みましょう!!(/・ω・)/

元記事はこちら

Check! IoT ができるようになるまで ~ ESP-WROOM-02 にプログラムを焼く