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:
どこでも購入できますが、フラッシュメモリの容量違いの 32M bit (4MB) / 16M bit (2MB) が混在して販売されているのでご注意下さい。
...が、ESP-WROOM-02 だけでは何もできません。最低でも 3.3V 電源と USB<->シリアル変換モジュールが別途必要となります。
ESP-WROOM-02 はそのままでは使いにくい (ピン間隔 1.5mm) ので、ブレッドボードに挿せるようなブレークアウトボードも各社から出ています。
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 を採用した製品もあります。
ピンアウトは以下のようになっています。
GPIO6 ~ GPIO11 は内部のフラッシュメモリに接続されています。ピンは外部に出ていないので物理的に接続する事はできませんが、例えば以下のコードは wdt reset を引き起こします。
|
Arduino のスケッチを流用する際には注意が必要です。
See Also:
起動モードを決定するピンは 3 つあります。
IO15 | IO2 | IO0 |
LOW | HIGH | LOW |
IO15 | IO2 | IO0 |
LOW | HIGH | HIGH |
UART ダウンロードモードがプログラム書き込み時で、Flash ブートモードがプログラム実行時のモードです。
※画像は Ver.1 のものです。
こちらはブレークアウトボードなので、別途以下のようなものが必要となります。
また、このブレークアウトボードは mikroBUS 対応のため TOUT がピンに出ていません。右側に未接続のピン (NC) があるので、ESP-WROOM-02 からジャンパを飛ばして TOUT を引き出しておくといいでしょう。但し、本来の mikroBUS では +5V のピンなので注意が必要です。
参考にしたサイトは以下の通りです。
これが正解という訳ではありませんが、私はこのようにして使っています。
See Also:
※画像は 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:
Micro USB で PC と繋ぐだけなので楽ちんポンです。しかも四本足の Micro USB コネクタなので強度面でも安心です。
開発ボードにはピンヘッダが付属していないので、ブレッドボードで使うためには秋月の細ピンヘッダを購入する必要があります (普通のピンヘッダだとブレッドボードに挿せなくて困ります)。
See Also:
ピンアウトは以下のようになっています。
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 で使うには別途ライブラリのインストールが必要です。
スケッチを書き込む時の注意点ですが、ESP-WROOM-02 は起動時に IO15 / IO2 / IO0 の状態を見て動作モードを決定しています。
IO15 | IO2 | IO0 | |
プログラム実行 | LOW | HIGH | HIGH |
プログラム書込 | LOW | HIGH | LOW |
動作モードを適切に設定しないと、スケッチを実行できなかったり、スケッチを書き込めなかったりします。ポケコンの PRO モードと RUN モードみたいですね (w
See Also:
BB-ESP-WROOM02 や、その他のブレークアウトボードを使っていても、ジャンパ切り替えやリセットボタン押下なしの自動プログラム (Auto Program) が可能です。
生の ESP-WROOM-02 をブレッドボードに配置した例だと配線が複雑になってしまうため BB-ESP-WROOM02 での例を示します。ブレークアウトボードにはあらかじめ以下の抵抗やコンデンサが取り付けられているものとして話を進めます。
取り付けられていない場合にはブレッドボード上で適宜配線してください。
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 で置き換えられます。
名称 | 数量 | 備考 | 入手先 |
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:
上記二つの回路の配線を間違うと、意図せず ESP8266 Thing (ESP8266) の自動プログラム回路になってしまう事があります。
名称 | 数量 | 備考 | 入手先 |
整流用ダイオード | 1 | なくても動作しましたがあった方がいいでしょう |
簡単に言えば、(プルアップされた IO0 を) 整流用ダイオードを挟んで IO0 と DTR を結線するだけです。Reset Method は ck / nodemcu いずれでも動作します。
但し、この結線のままだとシリアルモニタを開くと動作停止してしまうので、SparkFun の回路にはジャンパーコネクタが用意されています。
|
書き込む前に自動プログラムのジャンパー (SJ3) をクローズにして、書き込んだらに自動プログラムのジャンパーをオープンにするんですね...アレ?これって自動プログラムの意味あるの?
なお、ESP-WROOM-02 や ESP-WROOM-32 の場合、
を結線すれば同等の機能が実現できます...しないけど。
See Also:
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:
ESP-WROOM-02 でLチカをやってみます。
これだけの事なのですが、注意点があります。
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 に接続し、以下のようなスケッチを書き込みます。
|
シリアルモニタを開いて半固定抵抗を回すと、値が 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 に使えるピンはデフォルトで以下の通りです。これは HSPI と呼ばれます。
SPI | ピン | HSPI |
SCK | IO14 | HSPI_CLK |
MISO | IO12 | HSP_MISO |
MOSI | IO13 | HSP_MOSI |
SS | IO15 | HSPI_CS |
I2C に使えるピンはデフォルトで以下の通りです。
定数 | ピン |
SDA | IO4 |
SCL | IO5 |
See Also:
Serial (UART) に使えるピンはデフォルトで以下の通りです。
定数 | ピン |
TXD | IO1 (TXD) |
RXD | IO3 (RXD) |
Serial オブジェクトは宣言なしに利用可能です。
See Also:
SoftwareSerial も一応利用可能です。
See Also:
2系統のハードウエアシリアルを利用可能です。よく使う Serial オブジェクトはハードウェアシリアルです (UART0)。
UART0 | UART1 | |
TXD | IO1 (TXD0) | IO2 |
RXD | IO3 (RXD0) | |
RTS | IO15 | |
CTS | IO13 |
UART1 は Serial1 として定義されており、宣言なしに利用可能です。但し送信専用ですので、デバッグ出力用途だと思った方がいいでしょう。
ESP-WROOM-02 には 2MB または 4MB のフラッシュメモリが内蔵されており、これは SPI で接続されています。スケッチをコンパイルしたバイナリ...いわゆるファームウェアはこのフラッシュメモリに格納されるのですが、余剰分のフラッシュメモリをストレージのように使う事ができます。この機能は SPIFFS と呼ばれています。
SPIFFS にファイルを格納する方法はいくつかあります。
最も簡単な方法はアップローダを使う方法です。以下、アップローダのインストール方法です。
See Also:
ファイルをアップロードするのは簡単です。
※アップロードの前にシリアルモニタやシリアルプロッタは閉じておきましょう。
See Also:
ほぼ C 言語のファイル操作関数と同じなので難しくはないと思います。
|
SPIFFS は便利ですが、秒単位でログを取るような用途には向いていません (フラッシュメモリなので書き換え回数に上限があります)。
See Also:
ESP-WROOM-02 はメモリの大きい Arduino として使えるから重宝されているのではありません。何のために技適マークが付いているのでしょう?ESP-WROOM-02 は Wi-Fi が使えるのです。
ESP Car は名前の通り ESP-WROOM-02 を搭載しており、 Wi-Fi 機能を利用して Android / iOS からコントロールできます。
ESP Car 側のスケッチは GitHub で公開されています。
スケッチを書き込む具体的な手順は以下の通りです。
Android / iOS 用のコントローラーは各ストアで公開されています。
接続方法と設定は特に難しくありません。
詳しくは以下の記事をご覧ください。
なお、この ESP Car Controller は Delphi で書かれています。
各イベントにて頒布中で、一般販売も検討中との事です。ESP Car が欲しい方は qa65000.com まで連絡してみてください。
画像の ESP Car は私が組み立てたもので、シャーシは電池ボックス / フリスクケース (の上蓋) / プラダンを使って作られています。
Delphi 使いに 「OTA って何?」と尋ねると全く違う事を言い出すので注意が必要です。Arduino / ESP8266 の OTA は、簡単に言えば無線 LAN 経由でスケッチを書き込む機能です。
OTA をやるのに必要なのは
この2つです。Python はインストール時のオプションで環境変数 PATH にパスを追加するように設定しておく必要があります。
パスを追加するように指定するのを忘れたのなら、手動で Python のインストールフォルダを環境変数 PATH に追加しなくてはなりません。自動であれ手動であれ、環境変数 PATH に何かを追加した場合には Windows を再起動してください。
最近の ESP8266 ライブラリには OTA ライブラリが含まれています。
このような理屈なので、同じ機能のスケッチを書いたとしても OTA 経由で転送したものの方がサイズが大きくなります。
まずは OTA 用スケルトンスケッチを転送します。
|
次に任意のスケッチを転送します。OTA 用スケルトンスケッチをベースにする必要があります。
|
OTA で書き込めない場合にはウィルス対策ソフトやファイアーウォールを疑ってみてください。OTA はデフォルトで 8266 番ポートを使用します。また、前回の OTA スケッチを変な設定で書き込んでしまったのかもしれません。設定をよく確認してから、スケルトンスケッチをUSB<->シリアル変換モジュール経由で書き込んでみてください。
See Also:
ESP-WROOM-02 にプログラムを書き込んで使うのではなく、AT コマンドを使ってシリアル通信による外部制御を行う事もできます。ESP-WROOM-02 の工場出荷時のファームとして採用されていますので、購入直後であれば以下の手順は必要ありません (ファームウェアを更新するという目的以外では)。
AT コマンドファームを書き込むのに必要なものは以下の二つです。
事前に ESP-WROOM-02 のフラッシュメモリのサイズを調べておきましょう。
Arduino IDE のシリアルモニタ等を開いていないか確認してください。ESP-WROOM-02 のシリアルポートを開いているとファームウェア書き込みに失敗します。
ファームウェアファイル | アドレス | 説明 |
boot_xxxxx.bin | 0x00000 | bin フォルダの中。xxxx はバージョン。 |
user1.2048.new.5.bin | 0x01000 | bin\at\1024+1024 フォルダの中 |
blank.bin | 0xFE000 | bin フォルダの中 |
blank.bin | 0x3FB000 | bin フォルダの中 |
esp_init_data_default.bin | 0x3FC000 | bin フォルダの中 |
blank.bin | 0x3FE000 | bin フォルダの中 |
ファームウェアファイル | アドレス | 説明 |
boot_xxxxx.bin | 0x00000 | bin フォルダの中。xxxx はバージョン。 |
user1.2048.new.5.bin | 0x01000 | bin\at\1024+1024 フォルダの中 |
blank.bin | 0xFE000 | bin フォルダの中 |
blank.bin | 0x1FB000 | bin フォルダの中 |
esp_init_data_default.bin | 0x1FC000 | bin フォルダの中 |
blank.bin | 0x1FE000 | bin フォルダの中 |
シリアルモニタやターミナルソフトで ESP-WROOM-02 に接続して AT[ENTER] と入力してみましょう。データ転送レートは 115200 で改行コードは CR+LF です。OK が返ってくれば正常動作しています。
AT+GMR[ENTER] でバージョン情報を表示できます。AT コマンドの詳細については以下の資料を参考にしてください。
ESP-WROOM-02 のフラッシュメモリサイズは 2MB または 4MB なのですが、外見から判断する方法はありません (白いマーキングがあれば 4MB という話もありますが、ピンクや緑でマーキングされているものを持っているんですよねぇ)...なので、まずは [スケッチ例 | ESP8266] にある CheckFlashConfig を実行して実際のフラッシュメモリサイズを確認しましょう。シリアルモニタを開くと様々な情報が表示されますが Flash real size が実フラッシュサイズとなります。
See Also:
ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。