2015年1月30日金曜日

ESP8266で透過モードを使ってみた。

ESP8266でTDPやUDP通信をするためにはATコマンドで送信する文字長さを最初に指定してから送信が必要だったりするので、既存のシリアルデバイスにそのままESP8266を直結しても通信できない。

Arduinoを間に挟んで実装できないかと思っていたらESP8266モジュールのファームウェアを書き換えて透過モードを実装するファームウェアを発見!

ESP8266はデフォルトでATコマンドのファームウェアが入ってるけどWeb鯖になったり、Luaを使えるようになったり、NTPから時間を取得するATコマンドが追加されてたり、有志によってさまざまなファームウェアが作られているようで、透過モードのファームウェアも有志によって作られた模様。

ESP8266-transparent-bridge
こちらにソースコードとバイナリがおいてあるので今回はバイナリを頂戴してきた。

しかしなぜかファイルが2つ有る…
どうやら書き込む領域が異なる模様。
書き込む領域を見するとヤバイらしい(MACアドレス消えたり)のでくれぐれも注意すること。
領域さえミスらなければ書き込み中に電源が切れたりしてもまたGPIO 0をGNDに落として起動することにより再書き込みできたw

とりあえず前回同様のツールでやってみた。
ESP8266モジュールのGPIO 0をGNDに落としながら電源を入れる。
電源入れたらGPIO 0はGNDに落ちてなくても大丈夫。起動する瞬間だけ必要な模様。
eagle.app.v6.flash.binを0x00000から書込み
eagle.app.v6.irom0text.binを0x40000から書き込む。
このとき書込みモードが外れてしまうようで、GPIO 0をGNDに落として再起動が必要だった。

2つ目も書き終わったら再起動でOKなはずだが…
ESP8266のSSIDが出ない…

とりあえず元のATコマンド用のファームウェアを0x00000から書き戻してみた。
ちゃんとSSIDが検出される。つまりモジュールは壊れてないので書込みツールが悪い?

esptoolを使用してみることに。
esptoolはPythonでできてる書込みツール。PySerialが必要なのでインストールしておく。

今回はOSXを使用した。esptoolのフォルダのなかに先ほどのファームウェアのbinファイルを入れておく。

ESP8266のGPIO 0をGNDにいれて起動

sudo ./esptool.py --port /dev/tty.使用するCOMポート write_flash 0x00000 eagle.app.v6.flash.bin 0x40000 eagle.app.v6.irom0text.bin

ってな具合で書き込むことができた。
書き込み後はESPから始まるSSIDが検出されたので接続してみる。
このファームウェアだとTelnetから設定変更できるみたいなのでIPが取得できたらTelnetで192.168.4.1に接続。

+++AT

これでOKって帰ってくるはず。かえってこなかったらなにかおかしい…

自分の場合、アクセスポイントに接続したかったので下のように設定変更した
+++AT MODE 3
でAP+STAモードに変更し
+++AT STA ssid password
でアクセスポイントに接続。ATコマンドの時と違って""で囲む必要なし。
+++AT BAUD
でボーレートを確認したら115200だったので変更なし。
+++AT PORT
でポート確認したら23だった。とりあえずそのまま。


FLASHに設定を記録させるにはPORTかBAUDコマンドが必要らしい?
FLASHに書き込まない設定もできる模様。

とりあえずこれで設定が保存されたようなのでnetcatとかから接続してみた。
netcatで打った文字がそのままESP8266のシリアルポートから出力されて、ESP8266のシリアルポートに送信した文字列がnetcat上にそのまま表示される。

これでどんなシリアルデバイスもWiFi化できそう?

とりあえずMultiWiiとESP8266を接続してWiFiテレメトリとかできそうだなー




0 件のコメント:

コメントを投稿