WROOM-02単独で動かす
この写真の構成はArduino ADKにESP-WROOM-02を接続し、wifiを介してhttpリクエストで雲台のサーボを駆動するためにこしらえたもので、Arduino ADK上のプログラムからWROOM-02にATコマンドを与えることでhttpd他の機能を実現している。ここからArduino ADKを取り除き、WROOM-02単独で雲台を動かすことが現在の目標。
今回は、WROOM-02でサーボを駆動する前段階として、前回用意したESP-WROOM-02用に拡張したArduino IDEからのプログラム転送やシリアルモニタの利用ができるようなハードウェアを用意することである。
WROOM-02単独で動かす際の要件は以下のようになる。
- 開発時にはUSBでPCと接続できて、
- wifiのアクセスポイントとして構成できて、
- 簡易的なhttpdが動作して、
- httpリクエストに応じてサーボが駆動できて、
- プログラムをWROOM-02内のフラッシュメモリに書き込めて、
- そのプログラムがブートと同時に起動すること。
当初ハードウェアの構成を考えているときには、ESP8266用の開発ボードがいろいろいと発売されているので、そのうちのどれかを取り寄せることも考えたのだけど、プログラムができて動かす段になれば、ほとんどの開発ボードに載っているUSB-シリアル変換機能は不要となってもったいない。そのため、秋月電子のAE-WROOM-02 DIP化キットと、AE-FT231X USBシリアル変換モジュール を組み合わせ、必要な周辺回路は自前で用意することにした。
WROOM-02とUSBシリアル変換モジュールを別々に作ってケーブルで接続できるようにしておけば、USBシリアルの方は別の何かを作るときに役に立つだろうし。
もっとも、USB I/Fを単たる+5Vの供給源と見なせば、それは大いに意味がある。ただ、今回はWROOM-02と2つのサーボを動かすアプリケーションだからUSBでは不安なので、専用の電源をちゃんと用意することにした。
AE-FT231X USBシリアル変換モジュール
この製品は、FTDI社のUSB-シリアル変換デバイスであるFT231Xを2.54mmピッチのボード上に載せたもので、抵抗やコンデンサ、USB Micro Bコネクタなど必要な部品も実装されている(詳細は秋月の製品ページを参照)。
USB-シリアル変換用のモジュールは他にもあるが、このデバイスはシリアル側の入出力レベルが3.3VなのでWROOM-02と直結するのにちょうどいいことと、AndroidのスマホについているUSB端子と同様のUSB Micro Bコネクタを備えていて都合がよいので採用した。
基板にピンポストをハンダ付けして小型のブレッドボードに載せ、シリアル側からUSBへの送信の様子が分かるように、CBUS2(TXLED#)がアクティブのとき赤いLEDが光るようにした。TXLED#は、シリアルデバイス側への送信時ではなくUSB側への送信時にアクティブLとなるので、FT231Xの5V OUTを10KΩの抵抗を介して赤いLEDのアノード側と接続し、カソード側をCBUS2(TXLED#)に接続している。
その他では、RESET# ピンを10KΩ抵抗を介して3.3Vにプルアップし、CTS,RTS,DSR,DTRといったモデムっぽい制御線はすべてオープンのままとした。
このモジュール自体の電源は、USBケーブルを介して供給されるので特に意識する必要はなく、3.3V電源もモジュール内で生成される。ただ、3.3V電源の総許容容量はこのモジュールのI/Oピンもあわせて50mAなので、WROOM-02を駆動するのは無理だろう。
そういえば、USBケーブルでもってWindows 7 のPCに接続したところ、しばらくネット上のデバイスドライバを検索していたが、USB Serial ConverterとUSB Serial Port (COM4)が導入された。いずれのデバイスドライバも、 2016年1月にリリースされたFTDI社製の最新版のようである。
AE-WROOM-02側
ESP8266用プログラムの開発と、プログラム完成後には雲台を制御するために用いるブレッドボード上には、以下のようなものを載せた。
- AE-WROOM-02 DIP化キット
- +5V電源用のDCジャック(秋月のDCジャックDIP化基板を使用)
- 3.3Vを生成する三端子レギュレータTA48033S
- 動作確認用のLEDを2つ(赤と緑)
- WROOM-02のリセットスイッチ
- ブートモード変更用のジャンパ(ケーブル手差しで代用)
AE-WROOM-02 側から見たところ。
DCジャック側から見たところ。
2枚とも、OM-Dのフォーカスブラケットを使って撮影し深度合成したもの。暗い室内では三脚は必要だが、こういうものを写すときには必須の機能だと思う。
ちょっと大きめのブレッドボードを選んだつもりだったのに、すぐに場所がなくなってしまった。一応、三端子レギュレータの隣には、3.3VレベルのGPIOの出力からサーボ用の5Vを得るための電圧変換デバイスを置く予定で空き地にしてある。
開発時の構成
2つのブレッドボード間の接続は、以下の3本のみになる。
- FT231XのTXD —- WROOM-02のRXD
- FT231XのRXD —- WROOM-02のTXD
- FT231XのGND —- WROOM-02のGND
- IO14とIO12(それぞれ3番、4番ピン)は、動作確認用のLEDに接続している。IO14が緑、IO12が赤色。
- Arduino IDEからスケッチをフラッシュメモリに書き込む際には、IO0(8番ピン)からのケーブル(図ではMODEと表記)をGND側(PROGRAMと表記した側)に接続した状態でRSTに接続されたスイッチを押して起動しUART経由でのフラッシュ書込みを許可しておく。
- 通常のブート時(フラッシュメモリからブートさせるとき)は、MODEケーブルを3.3V側(NORMALと表記した側)に接続しておく。
- DCジャックには+5Vを接続する。開発時には、WROOM-02の3.3Vさえ作れればいいので、4.5~12V程度を接続しても問題ない。ただ、この先ラジコンサーボの電源にもするので、5V決め打ちとしておく。
- FT231Xとの接続は、図に示したTXD,RXDの他に、GNDも接続すること。
※ フラッシュメモリへの書き込み時には、リセットからその直後のタイミングでIO0がロジックLレベルになっていればよいので、わざわざ結線を変えるのではなく、もうちょっと工夫したいところ。
次のステップ
Arduino IDEでスケッチを書いて、それをこのボードに転送して動かすこと。特に、前にやったようなATコマンドではなく、ライブラリの呼出しによるwifi関係の設定、httpクライアント、httpdの実現を行ってみることにする。
参考文献
ESP-WROOM-02 WiFi Module Version 0.4
WROOM-02全般や起動時のモードのことなどを参考にした。メーカーのホームページでは何処にあるか分からなかったので、秋月の製品ページにリンクされているデータシート(pdf)を参考にした。
このドキュメントをよく読んでみると、4.2項にフラッシュメモリの容量についての記述があった。
2. External SPI Flash
This module is mounted with an 4 MB external SPI flash to store user programs.
ということです。