MAixPyからのネットワーク接続


私の購入したMAix DockボードはM1Wモジュールを使っているのでWiFi接続機能があります。
モジュール内にESP8285が搭載されています。これはESP8266の内蔵フラッシュを1MBにして外付けフラッシュなしに通信処理を行えるようにしたもののようです。

技適は通ってないっぽいですが、動かし方を調べてみました。

以下にあるサンプルのスクリプトは、現状では画像オブジェクトのインスタンスを作っているところでクラッシュしたりして、そのままではうまく動きませんでした。

MaixPy_scripts/network at master · sipeed/MaixPy_scripts

ですが、ソケットで接続するところまでは動作しているようですので、これを元にいつも例題で使っているASCII ART版STAR WARSへの接続スクリプトを書いてみました。
スクリプトは以下です。ssidとpasswordはWiFi環境に合わせて書き換えてください。

以下、スクリプトの中身に関するメモです。

MAixにおけるESP8285の使い方はWiFiモデムチップとしてのESP8266と同じで、CPUとはUARTで接続し、ATコマンドで制御します。

CPUとの接続は、UARTのTXとRX、それにENABLE信号の3本です。
ドキュメントから抜粋したESP8285周辺の回路です。

以下の図はCPU側のESP8285との接続部分です。
IO6, IO7, IO8がTX、RX、ENとなっています。

まず11~14行目あたりでIO6~IO8にUART2のTX, RXとGPIOを1本割り当てます。GPIOはOUTPUTモードにします。
board_info.WIFI_RXboard_info.WIFI_TXは定数で、それぞれ7と6です。
fm.fpioa.GPIOHS0は24、fm.fpioa.UART2_TXは67、fm.fpioa.UART2_RXは66です。
このあたりの処理は上記のサンプルスクリプトからの引き写しですが、大元はKendryteのサイトにあるプログラミングガイドで定義されています。

16行目からの関数wifi_reset()は、WiFiをenableにしてATコマンドで設定を行っています。
ここで、元のスクリプトに注意書きがあったのですが、29行目でUARTのバッファを10Kbに指定しています。通信速度見合いで、921.6Kbpsのときはこれくらいバッファが無いと取りこぼしが起こるそうです。

ESP8285が初期化できたら、43行目からの関数do_connect(nic)でWiFi APへ接続します。成功すればIPアドレスの割り当てまでが済んでいるはずです。

ここまででNICとしての初期化は完了で、以降はsocketのレイヤでの処理ですので、基本的に他のプラットフォームのMicroPythonと同様です。

ただし、73行目でrecvのバッファを、29行目と同じく10Kbに指定しています。ここが小さすぎるとデータを取りこぼしてしまいます。

コメント