ESP-WROOM-02

ESP-WROOM-02 に関する記事です。



ESP-WROOM-02

Espressif Systems 社の ESP-WROOM-02 は Arduino ではないのですが、Arduino IDE で Arduino ライクな使い方ができます。

ESP-WROOM-02 の SoC が ESP8266EX で、ESP8266EX の MCU (CPU) が "32bit で 80MHz" の Tensilica Xtensa L106 です。80KB の SRAM と 4MB または 2MB のSPI フラッシュメモリを持っています。実際に書き込めるスケッチの最大サイズはファームウェアに依存しますが、最低でも Arduino UNO (ATmega328P) の 10 倍以上のメモリが使えます。ちなみに速度も Arduino UNO (ATmega328P) の 10 倍くらい速いです。

ESP8266 搭載製品で技適を通っているのは Espressif 社の ESP-WROOM-02、ESP-WROOM-02D 及び ESP-WROOM-02U だけであり、AI-THINKER (安信可科技) 社の ESP シリーズは技適を通っていません。

See Also:



購入

ESP-WROOM-02 単体

どこでも購入できますが、フラッシュメモリの容量違いの 32M bit (4MB) / 16M bit (2MB) が混在して販売されているのでご注意下さい。

...が、ESP-WROOM-02 だけでは何もできません。最低でも 3.3V 電源USB<->シリアル変換モジュールが別途必要となります。

ESP-WROOM-02 ブレークアウトボード

ESP-WROOM-02 はそのままでは使いにくい (ピン間隔 1.5mm) ので、ブレッドボードに挿せるようなブレークアウトボードも各社から出ています。

ESP-WROOM-02 開発ボード

USB シリアル変換等が含まれる開発ボードです。買ったその日から ESP-WROOM-02 を試すことができます。特にこだわりがないのでしたら、スイッチサイエンスの ESPr Developer (ESP-WROOM-02 開発ボード) をオススメします。

本当に Arduino ライクに使いたいのなら、Arduino 用シールドも差せる ESPr One(Arduino Uno同一形状 ESP-WROOM-02開発ボード)もあります。

逆に Arduino のシールドとして使いたいのなら、ESP-WROOM-02 Wi-Fi シールドがあります (ピンヘッダは付属しません)。

他にもイロイロあります。Espressif 公式の ESP8266-DevKitC も使いやすくていいと思います。当初は ESP-WROOM02 ではなく、技適を通っていない ESP12E を採用した製品 (NodeMCU 等) も多かったのですが、最近は技適を通っている ESP-12F を採用した製品もあります。



ESP-WROOM-02 の概要

ピンアウト

ピンアウトは以下のようになっています。

GPIO6 ~ GPIO11 は内部のフラッシュメモリに接続されています。ピンは外部に出ていないので物理的に接続する事はできませんが、例えば以下のコードは wdt reset を引き起こします。

void setup() {
  Serial.begin(115200);
  while (!Serial) 
    delay(10);

  Serial.print("Hello,");
  pinMode(10, OUTPUT); // GPIO 10 を操作
  Serial.println("world.");
}

void loop() {
}

Arduino のスケッチを流用する際には注意が必要です。

See Also:

起動モード

起動モードを決定するピンは 3 つあります。

UART ダウンロードモードがプログラム書き込み時で、Flash ブートモードがプログラム実行時のモードです。



マイクロテクニカ ESP-WROOM-02 ブレークアウトボード ver.1 (BB-ESP-WROOM02) 各部詳細

※画像は Ver.1 のものです。

こちらはブレークアウトボードなので、別途以下のようなものが必要となります。

また、このブレークアウトボードは mikroBUS 対応のため TOUT がピンに出ていません。右側に未接続のピン (NC) があるので、ESP-WROOM-02 からジャンパを飛ばして TOUT を引き出しておくといいでしょう。但し、本来の mikroBUS では +5V のピンなので注意が必要です。

表面

裏面

参考にしたサイトは以下の通りです。

これが正解という訳ではありませんが、私はこのようにして使っています。

See Also:



マイクロテクニカ ESP-WROOM-02 ブレークアウトボード ver.2 (BB-ESP-WROOM02) 各部詳細

※画像は Ver.2 のものです。

こちらはブレークアウトボードなので、別途以下のようなものが必要となります。

Ver.2 のブレークアウトボードは JPTO をクローズすると、TOUT が TO ピンに出ます。但し、本来の mikroBUS では +5V のピンなので注意が必要ですが、Arduino としてしか使わないのなら、JPTO はハンダブリッジでもいいと思います。

表面

なお、チップ抵抗 (10kΩ) は左から IO0、IO2、IO15、EN です。

裏面

本当は EN<->GND 間に 0.1μF コンデンサを取り付けて、EN 用 10kΩ抵抗も 1kΩに交換したかったのですが、EN ピンが出てない (外部から EN を操作する事がない) のでこのままでもいいかと。

Ver.1 も Ver.2 もちょっとした改造で使い勝手がよくなります。ブレッドボードにコンデンサや抵抗を挿さないとスッキリします。

See Also:



スイッチサイエンス ESPr Developer (ESP-WROOM-02 開発ボード) 各部詳細

Micro USB で PC と繋ぐだけなので楽ちんポンです。しかも四本足の Micro USB コネクタなので強度面でも安心です。

開発ボードにはピンヘッダが付属していないので、ブレッドボードで使うためには秋月の細ピンヘッダを購入する必要があります (普通のピンヘッダだとブレッドボードに挿せなくて困ります)。

See Also:

ピンアウト

ピンアウトは以下のようになっています。



NodeMCU 各部詳細

NodeMCU が何なのかというのはとりあえず置いといて、ハード的には ESPr Developer みたいなものです。しかも安い。

USB<->シリアル変換部ですが、ver 0.9 には CH340G が、ver 1.0 には CP2102 が採用されているようです。

Arduino IDE で使えれば Micro USB で PC と繋ぐだけなので楽ちんポンなのですが、ESP8266MOD (ESP-12E) は技適を通っていません (後継の ESP-12F は技適を通っています)。逆に ESPr Developer を NodeMCU として使う事は可能です。

ESP8266MOD (ESP-12E) を ESP-WROOM-02 に貼り替えてみようかとも思ったのですが、回路図を読んでみると、プルアップ抵抗や ADC 用の分圧回路が宙ぶらりんになるので、パッドをはがさないように ESP8266MOD (ESP-12-E) を外さないとダメですね、多分。

See Also:



セットアップ

スケッチを書き込むための準備です。

ハードウェア (開発ボードの場合には読み飛ばしてください)

ESP-WROOM-02 にスケッチを書き込むには電源と何らかの USB<->シリアル変換モジュールが必要です。配線例は以下の通りです。

ボードの幅が広いので、配線はボードの下から引き出します。

配線例では USB<->シリアル変換モジュール秋月電子の AE-UM232R を使っていますが、TX / RX / GND だけしか結線しないので、任意の USB<->シリアル変換モジュールで構いません。

USB<->シリアル変換モジュールを一つも持っていないのであれば、まずは秋月の FTDI USB<-> シリアル変換モジュールを買う事をオススメします。

ソフトウェア

ESP-WROOM-02 を Arduino IDE で使うには別途ライブラリのインストールが必要です。

  1. [ファイル | 環境設定] で [環境設定] を開く。
  2. "Additional Boards Manager URLs:" に http://arduino.esp8266.com/stable/package_esp8266com_index.json を追加
  3. [ツール | マイコンボード: | ボードマネージャ] を開く
  4. リストから esp8266 を探しインストールする
  5. [ツール | マイコンボード: ] で Generic ESP8266 Module を選択する
  6. ESP-WROOM-02 は 4MB または 2MB のフラッシュメモリを内蔵しているので、[ツール | Flash Size] で 2M または 4M を選ぶ。どちらかハッキリしない場合には 2MB (1M SPIFFS) を選ぶ。
  7. [ツール | シリアルポート] でポートを選択
  8. ESPr Developer (ESP-WROOM-02 開発ボード) の場合、[ツール | Reset Method: ] で nodemcu を選択する。自動プログラム (後述) が有効でない場合には ck を選択する。

スケッチを書き込む時の注意点ですが、ESP-WROOM-02 は起動時に IO15 / IO2 / IO0 の状態を見て動作モードを決定しています

IO15 IO2 IO0
プログラム実行 LOW HIGH HIGH
プログラム書込 LOW HIGH LOW

動作モードを適切に設定しないと、スケッチを実行できなかったり、スケッチを書き込めなかったりします。ポケコンの PRO モードと RUN モードみたいですね (w

See Also:



自動プログラム (Auto Program)

BB-ESP-WROOM02 や、その他のブレークアウトボードを使っていても、ジャンパ切り替えやリセットボタン押下なしの自動プログラム (Auto Program) が可能です。

生の ESP-WROOM-02 をブレッドボードに配置した例だと配線が複雑になってしまうため BB-ESP-WROOM02 での例を示します。ブレークアウトボードにはあらかじめ以下の抵抗やコンデンサが取り付けられているものとして話を進めます。

取り付けられていない場合にはブレッドボード上で適宜配線してください。

トランジスタと抵抗を使った回路 (NodeMCU / ESPr Developer 同様の回路)

NodeMCU / ESPr Developer の回路を使うには、USB<->シリアル変換モジュールから DTR と RTS が取り出せる必要があります。以下は NodeMCU の自動プログラム用の回路です。

ブレッドボード上に構築するとこうなります。私はトランジスタに手持ちの 2SC1815 (ECB) を使いました。

図面通りに S8050 (EBC) を使うとこうなります。

実物はこちら。左上に確認用の L チカ配線が追加されています。

部品表です。

名称 数量 備考 入手先
トランジスタ 2SC1815 2 S8050 の代わり 秋月電子
10kΩ抵抗 2 NodeMCU では 12kΩ、ESPr Developer では 10kΩになっています 秋月電子

IO0 のジャンパは外しておきます。正しく配線できていれば Arduino IDE で [ツール | Reset Method: ] で nodemcu を選択してコンパイルするだけでスケッチ書き込み&リセットが自動で行えます。

自動プログラムができたら、シリアルモニタを開いた状態でも試してみましょう。シリアルモニタを開くと動作が停止するようなら配線が間違っています。

See Also:

N-ch MOSFET を使った回路 (ESP-WROOM-32-Breakout 同様の回路)

上記回路の中央のゴチャゴチャした部分は N-ch MOSFET で置き換えられます。

名称 数量 備考 入手先
NDS9936 (30V 5A) 1 SOP8, 5 個入り 秋月電子
SOP 8 ピン SIP 化変換基板 金フラッシュ (AE-SOP8SIP8) 1 1 枚入り 秋月電子
細ピンヘッダ 1 秋月電子

SOP8 な NDS9936 はブレッドボードでは扱いにくいので変換基板を使います。NDS9936 が 5 個入りなので変換基板も 5 枚買っておくといいかもです。細ピンヘッダは付属しないので別途用意してください。

そして、1番と4番、2番と3番ピンをそれぞれ結線しておきます。

ESP-WROOM-02 変換モジュール USB シリアル
TXD RXD
RXD TXD
IO0 6 D2
RST 8 D1
2 G1 DTR
4 G2 RTS

この変換モジュールで使用するのは偶数ピンだけです。

自動プログラムができたら、シリアルモニタを開いた状態でも試してみましょう。シリアルモニタを開くと動作が停止するようなら配線が間違っています。

ちょっとすっきりしましたね。

このやり方の元ネタが何だったのかわからなくなっていた (検索しても出てこない) のですが、ESP-WROOM-32-Breakout (Watterott Electronic) ですね。こちらでは MOSFET に NXP BSS138PS が使われています。ESP32 用ボードの回路なのですが、NodeMCU の自動プログラムと同等の回路なので 「ESP-WROOM-02 でも動くだろ」 と踏んでやってみたのでした。BSS138PS は表面実装用でチップ抵抗程の大きさしかないので、NDS9936 を使う事にしました。

See Also:

整流用ダイオードを使った回路 (SparkFun ESP8266 Thing 同様の回路)

上記二つの回路の配線を間違うと、意図せず ESP8266 Thing (ESP8266) の自動プログラム回路になってしまう事があります。

名称 数量 備考 入手先
整流用ダイオード 1 なくても動作しましたがあった方がいいでしょう

簡単に言えば、(プルアップされた IO0 を) 整流用ダイオードを挟んで IO0 と DTR を結線するだけです。Reset Method は ck / nodemcu いずれでも動作します。

但し、この結線のままだとシリアルモニタを開くと動作停止してしまうので、SparkFun の回路にはジャンパーコネクタが用意されています。

SJ3 and SJ1 allow auto-control of GPIO0 for programming.
Disconnecting may required to use serial terminal debugging.

書き込む前に自動プログラムのジャンパー (SJ3) をクローズにして、書き込んだらに自動プログラムのジャンパーをオープンにするんですね...アレ?これって自動プログラムの意味あるの?

なお、ESP-WROOM-02 や ESP-WROOM-32 の場合、

を結線すれば同等の機能が実現できます...しないけど。

See Also:

ショットキーダイオードとコンデンサを使った回路 (WifInfo 同様の回路)

RTS を使わず、DTR のみで自動プログラミングしようというものです。

以下、部品表です。

名称 数量 備考 入手先
ショットキーダイオード 1N5819 2 整流用ダイオード (1N4148 とか) でもいいような事を書いてありますが...? Amazon
コンデンサ 1 0.22μF~1μFの積層セラミックコンデンサ 秋月電子

この回路で自動プログラミングを行うには Reset Method に "ck" を指定します。"nodemcu" を指定すると自動プログラミングできませんので注意してください。

ダイオードは整流用でもいいような事を書いてありましたが、回路図にあった B5819W がショットキーだったのでショットキーダイオードを購入しました。

最初に 4.7μF の電解コンデンサ (RESET 側がプラス) で試して動作したので、回路図通りに 0.1μF (100nF) の (積層セラミック) コンデンサに差し替えてみたのですが動作しませんでした。手持ちの積層セラミックコンデンサは最大容量のものが 0.1μF だったので、並列にもう一つ入れて 0.2μF にしてみたら動作しました。恐らく 0.22μF~1μF あたりの積層セラミックコンデンサでいいのではないかと思われます。画像では RTS の位置に配線 (オレンジの線) がありますが、両端が GND に落ちている無駄な配線です。

なお、ESP-WROOM-32 では RST (RESET) ではなく EN に繋ぐと同等の事ができます...が。

この回路の欠点は 整流用ダイオードを使った回路と同じでシリアルモニタを開くと動作が停止する事です。

See Also:

まとめ

簡単にまとめてみました。

名称 使用する信号 Reset Method シリアルモニタ ESP-WROOM-32 での動作
トランジスタと抵抗を使った回路 DTR / RTS nodemcu
N-ch MOSFET を使った回路 DTR / RTS nodemcu
整流用ダイオードを使った回路 DTR / RTS ck / nodemcu 不可 × 常に書き込みモードになるためスケッチを実行できない
ショットキーダイオードとコンデンサを使った回路 DTR ck 不可 △ 書き込み後に自動でリセットされない

コストについては手持ちの部品次第ですが、MOSFET を常備している人はまずいないと思うので、ワーストは間違いなく MOSFET だと思います...ただ、見ての通り非常にスッキリはします。

ESP-WROOM-32 の場合は Reset Method が指定できない (=NodeMCU 同等の自動プログラム回路を要求される) のがミソですね。

See Also:



Blink

ESP-WROOM-02 でLチカをやってみます。

  1. [ファイル | スケッチブックの例 | ESP8266 | Blink] を開く
  2. 書き込む

これだけの事なのですが、注意点があります。



analogRead()

ESP-WROOM-02 で analogRead() を行うには TOUT (A0) を使います。

但し、この TOUT がクセ者で、ESP-WROOM-02 は 3.3V 駆動なのに、TOUT の入力電圧は 0~1.0V なのです。つまり、3.3V から 1V を作ってやらなくてはなりません。

簡易的には分圧回路を用いて 3.3V から 1V を作ってやります。画像の抵抗は 220Ω (左) と 100Ω (右)ですが、220kΩと100kΩを使う事をオススメします。抵抗の下にあるオレンジ色の線の電圧は 1V 付近になります (実測値で 1.006~1.007V でした)。つまり、その下にある半固定抵抗を回して得られる電圧は 0~1V となります。これを TOUT に接続し、以下のようなスケッチを書き込みます。

void setup() {
  Serial.begin(9600);
}

void loop() {
  int adc_key_in = analogRead(A0);
  Serial.println(adc_key_in);  
}

シリアルモニタを開いて半固定抵抗を回すと、値が 0~1023 の範囲で増減します (10bit)。

上記例では 3.3V から分圧している訳ですが、例えば単三乾電池2本による直接駆動の場合には得られる電圧が 3V なので、220kΩ/100kΩ抵抗を使って分圧しても、そこから 1.0V を得る事はできません (電池の電圧低下もありますし)。

NodeMCU での分圧回路はこうなっています。誤差 1% を指定してありますので、ブレッドボードで組む場合には金属皮膜抵抗を使うのがいいと思います。

ADC が ESP8266 側で ADC_EX がピン側です。ESPr One(Arduino Uno同一形状 ESP-WROOM-02開発ボード)にも同様の分圧回路が組み込まれています。

See Also:



SPI

SPI に使えるピンはデフォルトで以下の通りです。これは HSPI と呼ばれます。

SPI ピン HSPI
SCK IO14 HSPI_CLK
MISOIO12 HSP_MISO
MOSIIO13 HSP_MOSI
SS IO15 HSPI_CS


I2C

I2C に使えるピンはデフォルトで以下の通りです。

定数 ピン
SDAIO4
SCLIO5

See Also:



Serial (UART)

Serial

Serial (UART) に使えるピンはデフォルトで以下の通りです。

定数 ピン
TXDIO1 (TXD)
RXDIO3 (RXD)

Serial オブジェクトは宣言なしに利用可能です。

See Also:

SoftwareSerial

SoftwareSerial も一応利用可能です。

See Also:

HardwareSerial

2系統のハードウエアシリアルを利用可能です。よく使う Serial オブジェクトはハードウェアシリアルです (UART0)。

UART0 UART1
TXDIO1 (TXD0)IO2
RXDIO3 (RXD0)
RTSIO15
CTSIO13

UART1 は Serial1 として定義されており、宣言なしに利用可能です。但し送信専用ですので、デバッグ出力用途だと思った方がいいでしょう。



SPIFFS (SPI Flash File System)

ESP-WROOM-02 には 2MB または 4MB のフラッシュメモリが内蔵されており、これは SPI で接続されています。スケッチをコンパイルしたバイナリ...いわゆるファームウェアはこのフラッシュメモリに格納されるのですが、余剰分のフラッシュメモリをストレージのように使う事ができます。この機能は SPIFFS と呼ばれています。

アップローダのインストール

SPIFFS にファイルを格納する方法はいくつかあります。

最も簡単な方法はアップローダを使う方法です。以下、アップローダのインストール方法です。

  1. アップローダの最新版を DL する。
  2. アーカイブを解凍する。
  3. <Arduino のインストールフォルダ>\tools\ESP8266FS\tool に esp8266fs.jar をコピーする (存在しないフォルダは作成)
  4. Arduino IDE を再起動する。
  5. [ツール] に ESP8266 Sketch Data Upload が追加される。

See Also:

ファイルのアップロード方法

ファイルをアップロードするのは簡単です。

  1. スケッチ (*.ino) のあるフォルダに data というサブフォルダを作成する
  2. data フォルダにアップロードしたいファイルをコピーする
  3. [ツール | ESP8266 Sketch Data Upload] でファイルをアップロードする

※アップロードの前にシリアルモニタやシリアルプロッタは閉じておきましょう。

ファイルアップロードの注意点

See Also:

スケッチでのファイル操作

ほぼ C 言語のファイル操作関数と同じなので難しくはないと思います。

#include <FS.h>

const uint32_t BUF_SIZE = 255;

void setup() {
  Serial.begin(115200);
  while(!Serial);
  Serial.println("");

  SPIFFS.begin();

  /* CREATE FILE */
  File fp = SPIFFS.open("/TEST.TXT""w"); // 書き込み、存在すれば上書き
  char buf[BUF_SIZE + 1];
  String s = "The quick brown fox jumps over the lazy dog.\r\n";
  s.toCharArray(buf, BUF_SIZE);
  for (int i=0; i<20; i++)
    fp.write((uint8_t *)buf, BUF_SIZE);
  fp.close();

  /* READ FILE */
  fp = SPIFFS.open("/TEST.TXT""r"); // 読み取り
  while (fp.read((uint8_t *)buf, BUF_SIZE) == BUF_SIZE)
    Serial.print(buf);
  fp.close();

  /* DELETE FILE */
  SPIFFS.remove("/TEST.TXT");

  SPIFFS.end();  
}

void loop() {

}

SPIFFS は便利ですが、秒単位でログを取るような用途には向いていません (フラッシュメモリなので書き換え回数に上限があります)。

See Also:



ESP Car

ESP-WROOM-02 はメモリの大きい Arduino として使えるから重宝されているのではありません。何のために技適マークが付いているのでしょう?ESP-WROOM-02 は Wi-Fi が使えるのです。

ESP Car は名前の通り ESP-WROOM-02 を搭載しており、 Wi-Fi 機能を利用して Android / iOS からコントロールできます。

スケッチの書き込み

ESP Car 側のスケッチは GitHub で公開されています。

スケッチを書き込む具体的な手順は以下の通りです。

  1. 基板左上のジャンパを下側にセットする
  2. 基板に電池ボックスを接続する
  3. USB<->シリアル変換モジュールを右側の端子に接続する (TXD と RXD をクロス接続)。
  4. USB<->シリアル変換モジュールを PC に接続
  5. スケッチを書き込む
  6. 書き込みが正常に完了すると R/G/B の LED が 5 回点滅する
  7. USB<->シリアル変換モジュールを外し、電池ボックスも一旦外す
  8. 基板左上のジャンパを上側にセットする
  9. 電池ボックスやモーター等を配線する
  10. 電池ボックスを接続した際に R/G/B の LED が 5 回点滅すれば OK

ESP Car Controller

Android / iOS 用のコントローラーは各ストアで公開されています。

接続方法と設定は特に難しくありません。

  1. スマホの Wi-Fi 設定から ESP Car のアクセスポイントを探す (ecar8266~というのがあるはずです)
  2. 接続し、パスワードを入力する (初期パスワードはソースコードに書いてあります)。
  3. ESP Car Controller を起動
  4. 特にソースコードをいじっていないのであれば [Control] タブに移動。
  5. イロイロと触ってみる

詳しくは以下の記事をご覧ください。

なお、この ESP Car Controller は Delphi で書かれています。

ESP Car の入手方法

各イベントにて頒布中で、一般販売も検討中との事です。ESP Car が欲しい方は qa65000.com まで連絡してみてください。

画像の ESP Car は私が組み立てたもので、シャーシは電池ボックス / フリスクケース (の上蓋) / プラダンを使って作られています。



Over The Air (OTA)

Delphi 使いに 「OTA って何?」と尋ねると全く違う事を言い出すので注意が必要です。Arduino / ESP8266 の OTA は、簡単に言えば無線 LAN 経由でスケッチを書き込む機能です。

環境構築

OTA をやるのに必要なのは

この2つです。Python はインストール時のオプションで環境変数 PATH にパスを追加するように設定しておく必要があります。

パスを追加するように指定するのを忘れたのなら、手動で Python のインストールフォルダを環境変数 PATH に追加しなくてはなりません。自動であれ手動であれ、環境変数 PATH に何かを追加した場合には Windows を再起動してください。

概要

最近の ESP8266 ライブラリには OTA ライブラリが含まれています。

  1. OTA 用スケルトンスケッチに無線 LAN アクセスポイントの SSID / Password を記述
  2. OTA 用スケルトンスケッチを USB<->シリアル変換モジュール経由で転送
  3. OTA 用スケルトンスケッチをベースにしたスケッチを無線 LAN 経由で転送

このような理屈なので、同じ機能のスケッチを書いたとしても OTA 経由で転送したものの方がサイズが大きくなります。

セットアップ

まずは OTA 用スケルトンスケッチを転送します。

  1. [ファイル | スケッチの例 | Arduino OTA | Basic OTA]
  2. スケッチの一部を書き換える
    #include <ESP8266WiFi.h>
    #include <ESP8266mDNS.h>
    #include <WiFiUdp.h>
    #include <ArduinoOTA.h>
    
    const char* ssid = "あなたの AP の SSID";
    const char* password = "SSID に対するパスワード";
    
    void setup() {
      ...
      (中略)
      ...
      Serial.println(WiFi.localIP());
    }
    
    void loop() {
      ArduinoOTA.handle();
    }
  3. 自動プログラムが有効でない場合には IO0 を LOW 側にする。
  4. スケッチを USB<->シリアル変換モジュール経由で転送
  5. 自動プログラムが有効でない場合には IO0 を HIGH 側にする。
  6. リセットボタンを押す
  7. シリアルコンソールを開き 115200 で繋ぐと ESP-WROOM-02 が取得した IP アドレスが見れる
  8. Arduino IDE を再起動

次に任意のスケッチを転送します。OTA 用スケルトンスケッチをベースにする必要があります。

  1. 自動プログラムが有効でない場合には IO0 を HIGH 側にしておく。OTA 経由の場合には IO0 が HIGH でもスケッチを書き込める。
  2. [ファイル | スケッチの例 | Arduino OTA | Basic OTA]
  3. [ファイル | 名前を付けて保存] で一旦保存
  4. 例は IO5 で L チカするスケッチ。
    #include <ESP8266WiFi.h>
    #include <ESP8266mDNS.h>
    #include <WiFiUdp.h>
    #include <ArduinoOTA.h>
    
    const char* ssid = "あなたの AP の SSID";
    const char* password = "SSID に対するパスワード";
    
    void setup() {
      ...
      (中略)
      ...
      Serial.println(WiFi.localIP());
    
      // 以降に初期化コード
    
      pinMode(5, OUTPUT);  
    }
    
    void loop() {
      ArduinoOTA.handle();
    
      // 以降に実装コード
    
      digitalWrite(5, HIGH);    
      delay(1000);              
      digitalWrite(5, LOW);    
      delay(1000);             
    }
  5. [ツール | シリアルポート] の下部に OTA スケッチを書き込んだ ESP-WROOM-02 が見えるのでそれを選択する。
  6. スケッチを転送

OTA で書き込めない場合にはウィルス対策ソフトやファイアーウォールを疑ってみてください。OTA はデフォルトで 8266 番ポートを使用します。また、前回の OTA スケッチを変な設定で書き込んでしまったのかもしれません。設定をよく確認してから、スケルトンスケッチをUSB<->シリアル変換モジュール経由で書き込んでみてください。

See Also:



AT コマンド

ESP-WROOM-02 にプログラムを書き込んで使うのではなく、AT コマンドを使ってシリアル通信による外部制御を行う事もできます。ESP-WROOM-02 の工場出荷時のファームとして採用されていますので、購入直後であれば以下の手順は必要ありません (ファームウェアを更新するという目的以外では)。

ファームウェア書き込みに必要なもの

AT コマンドファームを書き込むのに必要なものは以下の二つです。

事前に ESP-WROOM-02 のフラッシュメモリのサイズを調べておきましょう。

ファームウェア書き込み

Arduino IDE のシリアルモニタ等を開いていないか確認してください。ESP-WROOM-02 のシリアルポートを開いているとファームウェア書き込みに失敗します。

  1. Flash Download Tools を起動します。実行ファイルは Flash Download Tools のフォルダの中にある ESPFlashDownloadTool_xxxxxx.exe です (xxxxx はバージョン番号)。
  2. [ESP8266 DownloadTool] を選択します。
  3. ESP8266 DownloadTool が起動します。
  4. [Download Path Config] でファームウェアとアドレスを指定します。左側にあるチェックボックスにはチェックを入れてください。ファームウェアは SDK の bin フォルダの中にあります。

    4MB Flash の場合:
    ファームウェアファイル アドレス 説明
    boot_xxxxx.bin0x00000bin フォルダの中。xxxx はバージョン。
    user1.2048.new.5.bin0x01000bin\at\1024+1024 フォルダの中
    blank.bin0xFE000bin フォルダの中
    blank.bin0x3FB000bin フォルダの中
    esp_init_data_default.bin0x3FC000bin フォルダの中
    blank.bin0x3FE000bin フォルダの中
    2MB Flash の場合:
    ファームウェアファイル アドレス 説明
    boot_xxxxx.bin0x00000bin フォルダの中。xxxx はバージョン。
    user1.2048.new.5.bin0x01000bin\at\1024+1024 フォルダの中
    blank.bin0xFE000bin フォルダの中
    blank.bin0x1FB000bin フォルダの中
    esp_init_data_default.bin0x1FC000bin フォルダの中
    blank.bin0x1FE000bin フォルダの中
    どちらも指定するファイルは同じですが、格納するアドレスが違います。
  5. [FLASH SIZE] を指定します。
    4MB Flash の場合: 32Mbit-C1

    2MB Flash の場合: 16Mbit-C1

  6. COM ポートとデータ転送レートを指定したら [START] ボタンを押してファームウェアを書き込みます。
  7. 書き込みが正常に終了すると、ステータスアイコンが FINISH になります。
  8. ESP-WROOM-02 をリセットまたは電源を切って再投入します。

AT コマンドの使い方

シリアルモニタやターミナルソフトで ESP-WROOM-02 に接続して AT[ENTER] と入力してみましょう。データ転送レートは 115200 で改行コードは CR+LF です。OK が返ってくれば正常動作しています。

AT+GMR[ENTER] でバージョン情報を表示できます。AT コマンドの詳細については以下の資料を参考にしてください。



Tips

フラッシュメモリのサイズを知るには?

ESP-WROOM-02 のフラッシュメモリサイズは 2MB または 4MB なのですが、外見から判断する方法はありません (白いマーキングがあれば 4MB という話もありますが、ピンクや緑でマーキングされているものを持っているんですよねぇ)...なので、まずは [スケッチ例 | ESP8266] にある CheckFlashConfig を実行して実際のフラッシュメモリサイズを確認しましょう。シリアルモニタを開くと様々な情報が表示されますが Flash real size が実フラッシュサイズとなります。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: