2017年07月20日 | 公開。 |
2017年08月01日 | 図13の回路図にLEDが抜けていたのを訂正。 |
ESP-WROOM-02は、写真1に示すように18ピンのモジュールです。各ピンの名称や働きについて、表2にまとめました。
番号 | 名称 | 働き |
---|---|---|
1 | 3V3 | 3.3V電源(VDD)。 |
2 | EN | チップイネーブルピン。アクティブ・ハイ。 |
3 | IO14 | GPIO14/HSPI_CLK |
4 | IO12 | GPIO12/HSPI_MISO |
5 | IO13 | GPIO13/HSPI_MOSI/UART0_DCTS |
6 | IO15 | GPIO15/MTD0/HSPICS/UART0_RTS |
7 | IO2 | GPIO2/UART1_TXD |
8 | IO0 | GPIO0 |
9 | GND | GND |
10 | IO4 | GPIO4 |
11 | RXD | UART0_RXD/GPIO3 UARTダウンロードの際の受信ピン。 |
12 | TXD | UART0_TXD/GPIO1 UARTダウンロードの際の送信ピン。 |
13 | GND | GND |
14 | IO5 | GPIO5 |
15 | RST | リセットピン。 |
16 | TOUT | A/D変換器の入力ピン。電源電圧をA/D変換する場合は、このピンをフローティングにする。 |
17 | IO16 | GPIO16 RSTピンと接続し、ディープ・スリープモードからウェイク・アップするのにも使われる。 |
18 | GND | GND |
ここで、ESP-WROOM-02のピン配置の特徴について考えてみます。
Arduinoなどのマイコンボードと比較する場合、I/Oピン(入出力ピン)が少ないのが特徴のひとつです。ESP-WROOM-02のデジタルI/Oピンは11ピンで、アナログ入力ピンは1本です。それに対し、Arduino Unoの場合は、デジタルI/Oピンが20ピンあり、うち6ピンはアナログ入力ピンとしても使えます。
表2の働きの欄に"GPIO"に続いて数字が載っている(GPIO2、GPIO14など)のが汎用のI/Oピン(GPIO)として使えるピンです。これらのピンにおいては、pinMode関数、digitalWrite関数、digitalRead関数が使えます。例えば
pinMode(2,OUTPUT);
とすればGPIO2(つまり、IO2ピン)が出力モードになりますし、続いて
digitalRead(2,HIGH);
とすれば、GPIO2の出力がHになります。
ただし、ESP-WROOM-02のデジタルI/Oピンの中には、他の機能と兼用になっており、GPIOとして使うには、注意が必要なものがあります。
例えば、IO15、IO2、IO0の各ピンの入力電圧は、リセット時に読み取られ、それらの状態によって、表3の様にブートモード(起動モード)が決まります。
ブートモード | IO15 | IO2 | IO0 |
---|---|---|---|
UART Download Mode |
L |
H |
L |
Flash Boot Mode |
L |
H |
H |
SD-Card Boot Mode |
H |
L |
L |
UART Download Modeは、UART経由でプログラム(スケッチ)を読み込み、読み込んだ内容をフラッシュメモリに書き込むモードです。
Flash Boot Modeは、フラッシュメモリに書き込まれたプログラム(スケッチ)を実行するモードです。
SD-Card Boot Modeは、SDカードに書き込んだプログラムを実行するモードらしいですが、使用頻度が低く、ネット上にもほとんど情報がありません。私もよく理解していません。
通常はIO15をプルダウン、そしてIO2とIO0をプルアップして、デフォルトでFlash Boot Modeにします。そして、プログラム(スケッチ)を書き込む時だけ、IO0をタクトスイッチなどでGNDにショートして、UART Download Modeにします。(図12参照)
Flash Boot Modeでリセットを掛けた場合、CPUが動作を始めたらIO15、IO2、IO0をGPIOとして使ってもいいのですが、リセットを掛けた場合に、確実にプルアップ抵抗やプルダウン抵抗で決められる論理状態でリセットがかかる様に回路構成を工夫する必要があります。特に、これらのピンを入力ピンとして使う場合は、リセット時に信号源をバススイッチなどで切り離す様な回路構成にする必要があり、回路が複雑になります。そのため、IO15、IO2、IO0の各ピンは、ブートモードの決定のみに使い、GPIOとしては使わない事が多いのです。
GPIOと別の機能を兼ねているために注意が必要なピンの別の例としては、RXDとTXDの2つのピンが挙げられます。RXDとTXDはそれぞれGPIO3とGPIO1としても使用されますが、UART Download Modeでプログラム(スケッチ)をフラッシュメモリに書き込む際には、UART0のRXD(受信)とTXD(送信)として働き、(USBシリアル変換器経由で)パソコンと通信するのに使われます。そのため、RXDとTXDのピンには、通常はUSBシリアル変換器のTXDとRXDのピンが、それぞれ接続されます。
Flash Boot Modeで起動してプログラム(スケッチ)を実行する際には、RXDとTXDのピンはそれぞれGPIO3とGPIO1としては使えるものの、回路構成を工夫しないと、元々つながっているUSBシリアル変換器と、制御対象のデバイスの信号が干渉する可能性があります。
以上の様に、使用上の注意が必要な5つのGPIOピン(IO15、IO2、IO0、RXDおよびTXD)を使わないとすると、GPIOピンは11ピンから6ピンに減ってしまいます。この様に、使えるI/Oピンが少ない事を考慮して回路設計する事が、ESP-WROOM-02を使いこなす上で、ポイントとなります。
さらに、アナログ入力ピン(A/D変換入力ピン)がTOUTの1ピンしかなく、入力電圧の範囲も0~1Vの範囲に固定されている点も、設計の制約を大きくしています。
2チャンネル以上のアナログ信号を計測する場合は、I2C接続やSPI接続のA/D変換器を増設する必要があるでしょう。また、1チャンネルでいい場合でも、入力電圧のレベルを0~1Vの範囲に収めるために、分圧回路が必要になる場合があります。
ENピンは、チップイネーブルピンです。このピンをLにすると、ESP-WROOM-02が停止します。このピンは、他にマイコンがある場合に、そのマイコンからESP-WROOM-02の停止をENピンで指示し、通信機能を使わない時に電力消費を抑える目的で使われます。ESP-WROOM-02を単独で使用する場合は、プルアップ抵抗でENピンをHに固定します。
それでは、ESP-WROOM-02でLチカの試験をするための回路を紹介します。回路図を図13、回路の写真を写真3に示します。
スケッチを書き込むために使うUSBシリアル変換器として、秋月電子で売っているFT232RL USBシリアル変換モジュールを使いました。
FT232RL USBシリアル変換モジュールにはモード設定のためのジャンパピンが2つ(J1とJ2)がありますが、写真4の様に設定してください。これで、I/O電圧が3.3Vになり、USBシリアル変換用IC(FT232RL)がUSBバスパワーで動作する様になります。
ESP-WROOM-02は3.3Vの電源電圧で動作しますが、USBからは5Vしか供給されません。3.3Vに電圧を降下させる電源回路(LDO)が必要になります。FT232RLにも3.3V出力のLDOが内蔵されているのですが、FT232RL内蔵のLDOは、出力電流が最大50mAしかありません。
一方で、ESP-WROOM-02の平均消費電流は80mAもあり、さらに、下記参考リンクのサイトによると、電源投入時には、300mA以上の突入電流が流れるそうです。また、ESP-WROOM-02のデータシートにも、500mA以上供給できる電源が望ましいと書いてあります。
FT232RLの内蔵LDOではESP-WROOM-02に十分な電流を供給できないので、秋月電子で売っているTA48M033FというLDOを使う事にしました。
電源回路は大電流を扱うため、ブレッドボードのピンの接触抵抗が問題になる可能性があります。そのため、電源回路だけはブレッドボードで組まず、ユニバーサル基板を使って組みました。(写真3の左上の茶色い基板)
なお、今回は、USBシリアル変換器に秋月電子のFT232RL USBシリアル変換モジュールを使いましたが、使っている信号線はTXDとRXDだけですので、例えばスイッチサイエンスのFTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)(写真5参照)などを使う事もできます。
ただし、スイッチサイエンスのUSBシリアル変換器は、I/O電圧を3.3Vに切り替えると、VCC出力が3.3Vになり、5Vの電源が取れなくなるため、今回は使用しませんでした。JP1の5V側の端子から電源を取るなどの工夫をすれば、スイッチサイエンスのシリアル変換器でもUSBの5V電源を引き出せると思います。
次のページでは、このページで紹介した回路のLEDを点滅させる試験をします。