ESP8266でIoT その1 Blink

2015年に突然現れたWi-Fiモジュール

 インターネットと接続するにはTCP/IPというプロトコルを使いますが、8ビット・マイコンのスペックでは重くて動かすには無理がありました。電子工作で使われるArduinoはATMega328という8ビット・マイコンです。TCP/IPを利用するにはイーサネット・シールド(有線LANで接続)と呼ばれるボードが別途必要でした。

 その後DIGIから発売されたXBeeを利用すると無線LANでインターネットにつなげられるので、利用者が増えました。

 Wi-Fiは現在IEEE 802.11ac規格が最新です。スタートは2.4GHzを使うIEEE 802.11bでした。

 2015年夏、IEEE 802.11bとgが使えるESP8266をモジュールにし、日本でも使えるように技適マークの付いたESP-WROOM-02が約500円で発売されました。ESP8266はMIPSの32ビットCPUとIEEE 802.11bとg対応のRFコアを一つにしたデバイスです。

ESP8266はArduino対応

 インテルのArduino 101は同社のCurieという86系のCPUを搭載しています。このCPUに対応して、Arduinoは86系のCPUのコードをコンパイルできるような仕組みを導入しました。

 ESP8266はライセンス料金が割安だといわれているMIPSアーキテクチャのCPUを搭載しています。ArduinoはこのCPUのコンパイラにも対応しました。

   C:\Users\yoshidawin\AppData\Local\Arduino15\packages\

には、Arduino、esp8266、intelの三つのディレクトリができています。Arduinoの下には、

   C:\Users\yoshidawin\AppData\Local\Arduino15\packages\arduino\hardware

 avrとsamdの二つのディレクトリがあり、ARMのCortex-Mシリーズのヘッダ類が入っています。このように、Arduinoは様々なマイコンに対応しています。

ESP8266単独ではPCとつなげられない

 実行時はESP8266単体で動作しますが、Arduinoで開発するときは、シリアル-USB変換でPCとつなぎます。

 シリアル-USB変換が搭載されているモデルもあります。ここでは、ESP8266のモジュールESP-WROOM-02を搭載したスイッチサイエンスのESPr Oneを利用します(購入時の名称はSSCI-026208 ESP-WROOM-02 Arduino互換ボード)。Arduino のシールドが使えるI/Oが備わっていますが、コンパクトなモデルもあります。

ESP8266をArduinoとして利用する手順

 ArduinoIDEは1.8.0を使います。ESP8266は、ボードマネージャのところで追加ができません。メニューのファイルから環境設定を開きます。追加のボードマネージャのURLに下記のアドレスを入れます。

  http://arduino.esp8266.com/stable/package_esp8266com_index.json

 OKを押します。メニューのツールから、ボードを選び、ボードマネージャの画面を出します。検索欄にespと入れます。

 「esp8266 by ESP8266 Community」のMore InfoをクリックするとINSTALLボタンが出てくるので、インストールします。次の画面は、インストールが終了した状態です。特にArduino IDEの再起動は必要ありません。

開発手順は従来通り

 Arduinoでは、ボードとポートを適切に変更して、プログラムを作成し、書き込みます。ESP8266では、いくつかの変更点があります。

 ファイル->スケッチの例->0.Basics->Blinkを選びます。これは、ほかのボードと同じです。

 メニューのツールから、ボード->Generic ESP8266 Moduleを選びます。下記の部分だけを変更します。

  • Flash ModeをQIO
  • Reset Methodをnodemcu
  • シリアルポート 接続しているボードのCOM番号 

 「マイコンボードに書き込む」ボタンをクリックするとプログラムがコンパイルされ、実行プログラムはマイコン・ボードに転送、リセットされてLEDが点滅します。

コラム ESP8266でArduinoとして利用する条件

 Arduino IDEを利用するとき、シリアル・インターフェースからプログラムをマイコンに書き込みます。ESP8266は、このとき、端子は、「GPIO15=Low、GPIO0=Low、GPIO2=High」という条件で対応します。

 seeedのWio-NodeはUSBのコネクタを装備していますが、電源供給だけに使われています。同ボードUARTコネクタにUSB-シリアル変換インターフェースをつないでも利用できません。これは、「GPIO15=Low、GPIO0=High、GPIO2=High」という内部のプログラムを実行するフラッシュ・ブート・モードに固定されているからです。

バックグラウンド

シリアル-USB変換;マイコンには、UARTと呼ばれる非同期シリアル・インターフェースがほぼすべてに実装されています。10年ほど前まで、PCにはRS-232Cと呼ばれるUARTと通信するコネクタがありましたが、現在は省略されています。

 したがって、PCで一般的なUSBインターフェースをUARTと通信できるようにするのがFTDIを代表とする変換ICです。FTDI以外にCP2101、CH340、PC-PL2303などがあります。FTDIが一番ポピュラですが、Mac OS Xでは使えないことが多いです。

 ラズパイでは、マイコン・ボードとUSBケーブルをつなぎ、/dev/ttyACM0にアクセスすると、変換ICがなくてもシリアルで通信できます。