2015年7月20日月曜日

格安無線LANモジュール ESP8266 (ESP-WROOM-02) お試し。

 今回のガラクタは、巷(ただし、自分界隈に限る)で話題沸騰中?の格安無線LANモジュール ESP8266 (ESP-WROOM-02)です。このモジュール自体は今年のはじめ(だったかな?)くらいから存在は知っていましたが、ここ数ヶ月(だと思う)、あの恐怖の日本の「技適」をクリアして、各所から販売が開始され、Amazonなんかにも出ていたんですが、如何せん、ピッチが2.54じゃないんで、近頃、微妙に小さいものが見えにくくなり、はんだごてを持つ手も震えだしたお年頃の自分には手が出しづらい感じでした。そこにきて、スイッチサイエンスさんが変換基板付きのモジュールを出してくれたので、速攻でポチって入手しました。(2015年07月18日現在は、残念ながら在庫切れとなっているようですが、しばらくすれば補充されるんじゃないでしょうか。)


 スイッチサイエンスさんの変換基板は幅が広く、ちょうどブレッドボードの幅をすべて使ってしまいます。そこで、ブレッドボードを横に2つ並べて、ESP-WROOM-02モジュールで橋を渡すように連結して使い、配線を行いました。



 配線は、ここのGituHubの情報を元に行いました。このGituHubの情報を見るとわかりますが、実は、この ESP8266 はただの格安無線LANモジュールじゃありません。内蔵のCPUとFlashメモリを利用して、IOピンこそ少ないですが、なんとArduino IDEでの開発ができちゃいます。すげぇ~。

 ESP8266用のArduino IDEの開発環境の準備は先のGitHubのReadmeに記述がありますが、こちら等に日本語&画面キャプチャ付きでわかりやすい説明があります。こちらのサイトの説明の写しになりますが、Arduino IDE の 1.6.4 ~1.6.5 (2015年07月18日現在)でメニューの「ファイル」→「環境設定」を選択します。


 「環境設定」ダイアログの「Additional Boards Manager URLs:」に以下のURLを入力します。
   http://arduino.esp8266.com/package_esp8266com_index.json 
      ↓ 2015/8/17 現在下記に変更されていました。
   http://arduino.esp8266.com/stable/package_esp8266com_index.json


 「ツール」→「ボード」→「Boards Manager」を選択します。


 ESP8266 を選択して、「Install」ボタンをクリックします。インストールが終わると「Installed」表示になります。


 「ボード」の選択肢にESP8266が追加されます。


 「ボード」でESP8266を選択すると、「ツール」の設定項目や、


 「スケッチの例」にESP8266用のサンプルが追加されます。


 まずは、いくつかのサンプルを書き込んで、無線LANに接続できることを確認したり、簡単なWebサーバのサンプルを動かして動作を確認しました。今回は暫定的に普段の家庭用無線LANルータとは別に出張先ホテルで使う様な小型の無線LANルータ(コンバータ)を別途用意して、わかりやすいようにパスワードだけで接続できる環境を準備して接続を確認しました。
 なお、書き込みを行う場合は、~RESET=LOW(またはPOWER OFF) → IO0=LOW → ~RESET=HIGH(またはPOWER ON) → IO0=HIGH でUARTブートモードで起動して、Arduino IDEの書き込みボタンを押します。書き込みが終わってリセットされる様子がない場合は手動でリセットすればプログラムが開始されます。



 いや、これが1000円前後で買えるとか、IoTはそこまで来てる?って感じ。

 さて、Arduino機能で先に遊んでしまいましたが、本来?の無線LANをUART接続で使える機能はというと、こちらはATコマンドで先に送受信するバイト数を指定して・・・と今ひとつ使い勝手がよくありません。もっと、UARTとWLAN側UDTとかSocket、願わくば仮想COMポートとして右から左に使えるようじゃないと不便だな・・・と探したところ、すでに先人が実現してくれていました。こちらのESP8266-transparent-bridgeというものです。プロジェクトをダウンロードしてきて、その中のfirmwareフォルダ内にある2つのファイルでESP8266のファームウェアを書き換えます。ファームの書き換えに関しては、こちらの「ねむいさんのぶろぐ」サイトを参考にさせていただきました。書き換えに失敗した場合や、もとの機能に戻すためにこちらのBBSから最新のSDKをダウンロードしておきます。また、同BBSからファーム書き換えツール(自分がダウンロードした時は、FLASH_DOWNLOAD_TOOLS_v1.2_150512というバージョンでした)をダウンロードしておきます。先のTransparent-Bridgeのfirmwareフォルダに解凍された 0x00000.bin と 0x40000.bin をファーム書き換えツールで解凍された flash_download_tool_v1.2_150512.exe のような名前のツールを使ってアップロード(ダウンロード?)します。 flash_download・・.exe を起動して、


 このflash_download・・.exe の使い方の丁寧な説明が、前述の「ねむいさんのぶろぐ」にあります。この「ねむいさんのぶろぐ」には今回のESP8266以外にも有用な情報がたくさんあります。色々勉強させてもらいたいと思います。
 ESP8266での使い方は、書き込むファームのファイルを選択(メモリ領域別に複数選択して書き込める)して、書き込むエリアにはチェックボックスをチェックして、CryatarFreq=26M , SPI SPEED=40MHz , SPI MODE=QIO , FLASH SIZE=32Mbit , BAUDRATE=115200 を選択し、COMポートを選択して、「START」ボタンで書き込みです。あっ、そうそう、書き込みにはESP8266側はUARTブートモードで起動しておく必要があります。書き込みが終わってリセットし、書き込みが上手く行っていれば、ESP_xxxxのような無線LANアクセスポイントとして稼働し始めます。このESP_xxxxというアクセスポイントにPCで一旦接続します。パスワード等が一切かかっていないアクセスポイントなので接続先無線LANを選ぶ機能でESP_xxxxを選ぶだけで接続できるはずです。この無線LANに接続できたら、Tera TearmなどのTelnetの使えるターミナルソフトで「192.168.4.1」にTelnet接続します。こちらも特にパスワード等なしで接続できるはずです。ここで、「+++AT」と入力してEnterでOKが返ることを確認します。
 アクセスポイントに接続させるには、ここのコマンドリファレンスにしたがって、
   +++AT MODE 3
   +++AT STA ssid password
のように設定します。これで、自分の環境では前述のモバイル無線LANルータに接続出来ました。DHCPで配られたIPアドレスはDHCPサーバ(ルータ)側のログを見るとかして調べて、ping を打って応答を確認しました。
 次に、こちらを参考にこの辺から仮想COMポートのソフトを拝借。


 作成したいCOMポート番号を選択して、ESP8266のIPアドレスを入力、Portは23として、「Create COM」ボタンで仮想COMポートが作成され、115200bps でシリアル通信が出来る状態になります。


 ESP8266のUART側をUSB-UART変換で接続しているのがCOM4で前述のネットワーク仮想COMポートとして作成したのが、COM5で、片方で"abc"、もう片方で"123"と入力して相互に通信していることを確認しました。が、・・・ですね、数分するとこの仮想COMポートでの通信ができなくなります。はじめは、仮想COMポートソフトを疑ったんですが、よくよく調べてみると、ESP8266をリセットした直後はpingが返るのに数分するとpingが帰らなくなっている、つまり、ESP8266側に問題があるようです。これが、Transparent-Bridgeのファームの問題なのか、ESP8266のハード的な問題(例えば熱とか電源不足とか)なのかは今日のところは不明のまま。ただ、このまま数分で接続断ではとても使いものにならないので、今後要調査です。