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

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

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

トンペイーノは PC から USB 経由でプログラミング可能な ESP-WROOM-02 ボードコンピュータです.旧バージョンでは横30穴のブレッドボードに構成していましたが,ここでは version 2 として,より応用のしやすい横63穴のブレッドボード上に製作することを想定しています.

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

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

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

ブレッドボード上の配線例をつぎにあげます.PC から USB 経由でプログラムを書き込むには,prog スイッチ(下側=LED側のスイッチ)を押した状態で reset スイッチ(上側のスイッチ)をクリックします(その後 prog スイッチから手を離します).これでトンペイーノは書込み待機の状態になりますので,PC からアップロードを開始してください.一方,reset スイッチのみを押せば,既に書き込まれているプログラムが再起動します.

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

注意事項: reset スイッチの左上側の足は切り取ってください.押下したときに RST 端子が GND に接続されるようにするためです.また,prog スイッチの右上の足を切り取ってください.押下したときに IO0 が GND に接続されるようにします.横方向に1単位分の短い配線が,この切り取った足の部分に入ります.加えて,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 スイッチをクリックして,prog から手を離します.その後,IDE の "Upload" ボタン(矢印ボタン)を押してください.

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

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

プログラムを一度書き込んだら,その後は reset スイッチをクリックすれば,すでに書き込んだプログラムが再起動します.(逆に,prog スイッチを押しながら reset スイッチをクリックした場合は,プログラム書込み待機の状態になります.)

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

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

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

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

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

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

アナログ入力端子: TOUT がアナログ入力端子で,1チャネルのみになります.analogRead(0) または analogRead(A0) で,10bit の非負整数として電圧を取得できます.測定範囲は 0〜1V です.入力電圧が飽和(1V 以上)の場合は 1024 が返されるようです.(多チャンネルのアナログ入力を行う場合は,ADC を外付けする必要があります.詳しくは「ESP 端子数を増やす編」をご覧ください.)

ウォッチドッグタイマ(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() を呼び出すようにしてください.

整数データのビット長: PC 上での C++ プログラミングと同様に,int は 32bit,long int も 32bit で,short int は 16bit,long long int は 64 bit となります。(ATmega328 などの AVR マイコンでは,int は 16bit でした。short int も 16bit で,long int とすると 32bit に,long long int とすると 64bit となります)

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