ESP-WROOM-02用の開発環境(ハードウェア)

WROOM-02単独で動かす

wifi雲台 基板

この写真の構成は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コネクタを備えていて都合がよいので採用した。

FT231X

基板にピンポストをハンダ付けして小型のブレッドボードに載せ、シリアル側から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のリセットスイッチ
  • ブートモード変更用のジャンパ(ケーブル手差しで代用)

WROOM-02 COMP2AE-WROOM-02 側から見たところ。
WROOM-02 COMP1DCジャック側から見たところ。
2枚とも、OM-Dのフォーカスブラケットを使って撮影し深度合成したもの。暗い室内では三脚は必要だが、こういうものを写すときには必須の機能だと思う。

ちょっと大きめのブレッドボードを選んだつもりだったのに、すぐに場所がなくなってしまった。一応、三端子レギュレータの隣には、3.3VレベルのGPIOの出力からサーボ用の5Vを得るための電圧変換デバイスを置く予定で空き地にしてある。

開発時の構成

2つのブレッドボード間の接続は、以下の3本のみになる。

  • FT231XのTXD —- WROOM-02のRXD
  • FT231XのRXD —- WROOM-02のTXD
  • FT231XのGND —- WROOM-02のGND

FT231XとWROOM-02手書きの結線図を以下に示す。

WROOM-02 結線図

  • 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.

ということです。