2015年7月23日木曜日

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

 前回の格安無線LANモジュール ESP8266 (ESP-WROOM-02) のお試しの続きです。
 

 前回、こちらのESP8266-tranparent-bridgeを使って、ESP8266側UARTと無線LAN接続先の仮想COMポートをシリアルケーブル接続したような感覚で使おうとしたところ、すぐに接続が切れてしまう問題が発生してました。そちらの現象はまだ解決そていないのですが、tranparent-bridgeのファームに書き換えずに標準の機能(ファーム)でもこの「トランスペアレント(透過)モード」が使えることがわかりました。ただし、接続して使用開始するためには ATコマンドを発行して準備する必要があります。
 標準ファームウェアの透過モードを利用するには、UART側からATコマンドで以下の操作を行います。

① AT+CWMODE=3
 → AP+STAモードに設定。

② AT+CWJAP="ssid","password"
 → アクセスポイントに接続。

③ AT+CIFSR
 → デバイスのIPアドレスが応答されるので確認する。

④ 仮想COMポートサーバを立ち上げて Listen(待ち受け)状態にする。
 今回はPC側のソフトは USR-VCOM という仮想COMサーバソフトを使いました。
任意のポートでTCPサーバを起動して、Listen状態にしておきます。


⑤ AT+CIPSTART="TCP","xxx.xxx.xxx.xxx",9999
 → サーバに接続。

⑥ AT+CIPMODE=1
 → 透過モードに設定。

⑦ AT+CIPSEND
 → ">"のプロンプトが応答されて、以降、透過モードに。

⑧ "+++"
 → 透過モード終了。

 一度無線LANの接続が確立していれば、次からはPower Onで無線LAN接続は自動で行われるので、④~⑧のみで利用可能ですが、毎回コマンドを打つのは面倒です。ただし、前回のtranparent-bridgeのファームのように数分で接続が切れてしまう現象は発生しませんでした。
 そこで、UART側に接続したIchigoJamで以下のプログラムを実行してATコマンドを発行することで透過モード接続できることを確認しました。



 これで、PC側から仮想COMポートでネットワーク越しにIchigoJamを制御できる?かも。もともとのこどもパソコンの趣旨から外れるけど、BASICで使える1500円のマイコンが1000円追加で無線でネットワークに繋がるのは、すごいことではないかなと。

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のハード的な問題(例えば熱とか電源不足とか)なのかは今日のところは不明のまま。ただ、このまま数分で接続断ではとても使いものにならないので、今後要調査です。