小嶋秀樹 | 研究室
日本語 | English
ESP-WROOM-02 を使った「トンペイーノ」の製作

ESP-WROOM-02 は ESP8266 をコアとした切手サイズのコンピュータです.単体で WiFi が使え,Arduino 開発環境でプログラミングできます.とても応用範囲の広い IoT デバイスです.ここでは,ブレッドボード上に最小構成の ESP-WROOM-02 システム「トンペイーノ-02」の組み立て,Arduino 開発環境の構築,動作確認までを解説します.

【トンペイーノ-02 (Dongbeino-02)】

トンペイーノは PC から USB 経由でプログラミング可能な ESP-WROOM-02 ボードコンピュータです.横30穴のブレッドボード上に製作することを想定しています.

トンペイーノの回路図はつぎのとおりです.青で描いた部分は PC(USB 経由)からのプログラム書込みと電源供給に必要な部分です.一度プログラムを書き込んでから電池や AC アダプタで動作させるのであれば,この部分は不要になります.

【トンペイーノをつくる】

トンペイーノに使用する部品はつぎのとおりです.予算は 2000円程度です.USB シリアル変換器は Miyagino のものと共通です.部品を使い回せば 1000円程度で製作できます.

ブレッドボード上の配線例をつぎにあげます.曲線を描いた黄色いジャンパ線は,回路図にある切替スイッチ(赤点線枠)です.このジャンパ線で「書込みモード」と「実行モード」を切り替えます.PC から USB 経由でプログラムを書き込むときは "prog" 側(つまり "−" 側)に接続してリセット("reset" を押下)してください.書込みが終わったら "run" 側に戻します."run" 側に接続した状態でリセットすれば,すでに書き込まれていたプログラムが実行されます.

3端子レギュレータ付近(ブレッドボードの右上)や LED 付近(ブレッドボードの左下)は,やや複雑な配線になっています.つぎの写真を参考に,うまく配線してください.

注意事項: リセットスイッチの左上側の足は切り取ってください.押下したときに RST 端子が GND に接続されるようにするためです.穴の位置に若干ずれがありますが,うまく取り付けてください.また,USB シリアル変換器の左側のジャンパピン(白)を上側(3.3V 動作)に設定してください.

【Arduino IDE の設定】

Arduino IDE でトンペイーノのプログラムを開発するには,つぎにあげる初期設定が必要となります.

  1. Arduino IDE のインストール(既に最新版をインストール済であれば新たなインストールは不要です)
  2. Arduino IDE を起動し,Arduino > Preferences を開きます."Settings" のタブ上にある "Additional Boards Manager URLs:" の入力欄に
    http://arduino.esp8266.com/stable/package_esp8266com_index.json
    を入力て "OK" を押します.そのままコピペしてください.
  3. つぎに,Tools > Board:... > Boards Manager を開き,検索欄に "esp8266" と入力します."esp8266 by ESP8266 Community" が現れるので,最新版を "Install" してください.
  4. インストールが終了したら,いちど Arduino IDE を終了・再起動し,Tools > Board:... 以下の部分につぎの設定を与えます.
    Port は Mac ならば "/dev/cu-usebserial-ABCD1234" のようなデバイスファイル名となり,Windows ならば "COM3" のようなポート名となります.
【トンペイーノの動作確認】

これですべての準備ができたので,簡単なプログラム(LED 点滅プログラム)をトンペイーノで動かしてみましょう.つぎにあげるプログラムを Arduino IDE で打ち込み,トンペイーノの黄色いジャンパ線を "−" 側("prog")に接続してから,リセットボタン "reset" を押し,IDE の "Upload" ボタン(矢印ボタン)を押してください.

void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);
  delay(250);
  digitalWrite(13, LOW);
  delay(250);
}

プログラムの書込みには数十秒かかると思います.書込みが終了すれば,トンペイーノの IO13 に繋がれた LED が 0.5s 周期で点滅するはずです.プログラムの書込みに失敗する場合は,配線や IDE 設定をよく確かめてから,再チャレンジしてください.

黄色いジャンパ線を "+" 側("run")に接続してからリセットすれば,すでに書き込んだプログラムが再起動します.(逆に,"−" 側("prog")に接続したままリセットした場合は,プログラム書込み待機の状態になります.)

【プログラミング上の注意点】

標準的な Arduino(Miyagino など)と比べて,トンペイーノ(ESP-WROOM-02)にはプログラミング上の注意点があります.

ディジタル出力端子: 使える端子は,IO2, IO4, IO5, IO12, IO13, IO14, IO15, IO16 の8本です.IO13 には LED が接続されています.HIGH で 3.3V 出力,LOW で 0V 出力です.ドライブ可能な電流(流出・流入)は1端子あたり 12mA です.

ディジタル入力端子: ディジタル出力と同様に,IO2, IO4, IO5, IO12, IO13, IO14, IO15, IO16 の8本が使えます.IO13 には LED が接続され,IO2 は 10kΩ でプルアップ,IO15 は 10kΩ でプルダウンされているため注意が必要です.INPUT, INPUT_PULLUP が使えますが,IO16 のみ INPUT, INPUT_PULLDOWN_16 のみが使えます.入力電圧が約 2.5V 以上(3.3V 以下)で HIGH となり,約 0.8V 以下で LOW となります.

アナログ出力端子: いわゆる PWM 出力です.上述のディジタル入出力端子(8本)のいずれも使用(同時使用)できます.digitalWrite() に与えるデューティー比は,0〜1023 の整数で与えます.PWM 周波数は約 1kHz(996.8Hz 前後)です.デューティー比 0 を指定すると PWM モードが解除されます. (analogWriteFreq(4000) とすれば 4kHz になりますが,周波数を高くしすぎると,デューティー比の 0 近くと 1023 近くで挙動がおかしくなるようです.)

サーボ制御信号の出力端子: 50Hz の PWM 信号です.上述のディジタル入出力端子(8本)のいずれも使用(同時使用)できます.パルス幅は 1500µs が中点で,544〜2400µs が可変範囲となっています.

アナログ入力端子: TOUT がアナログ入力端子で,1チャネルのみになります.analogRead(0) または analogRead(A0) で,10bit の非負整数として電圧を取得できます.測定範囲は 0〜1V です.入力電圧が飽和(1V 以上)の場合は 1024 が返されるようです.

ウォッチドッグタイマ(WDT): プログラムが暴走するなどした場合に,自動的にリセットがかかる安全装置で,標準的な Arduino にはない機能です.プロセッサ内部にタイマーがあり,(1) loop() の終了・再呼出時,(2) delay() の実行時,(3) yield() の実行時にタイマが 0 に戻されますが,タイマが 3s を超えてしまうと,ESP-WROOM-02 が強制的にリセットされます.したがって,loop() の内部に while や for などで長時間実行される部分や入力待ちがある場合は注意が必要です.適宜,delay()yield() を入れてください.delay(0) でもオーケーです.一方,delayMicroseconds() ではリセットされません.

WiFi 関連の機能: 後述する WiFi や TCP/IP 関連の機能(HTTP リクエストの処理など)は,上述の WDT リセットと同様に,(1) loop() の終了・再呼出時,(2) delay() の実行時,(3) yield() の実行時に,併せて実行されます.したがって,WiFi や TCP/IP の応答性を確保するには,プログラム構造を工夫したり,適宜 delay() や yield() を呼び出すようにしてください.

電源電圧 3.3V: プログラミングではなくハードウェア的な注意点ですが,ESP-WROOM-02 の電源電圧および IO の入出力電圧は 3.3V です.5V 系のデバイスと接続する場合は注意が必要です.降圧させるなら抵抗器2本による分圧回路,昇圧させるならトランジスタスイッチまたはレベル変換 IC を使うとよいでしょう.ディジタル出力端子あたり最大 12mA までドライブ(流出・流入)できます.LED を接続するなら順方向電圧の低いもの(2V 程度のもの)を選び,数百 Ω(1kΩ でもよい)の抵抗器を直列に入れるとよいでしょう.スイッチ入力等に使うプルアップ抵抗,プルダウン抵抗は 10kΩ でよいでしょう.