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テレメトリとかできそうだなー
このとき書込みモードが外れてしまうようで、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テレメトリとかできそうだなー