micro:witch で Tello を制御する(その2)

前回の記事に引き続いて、micro:witch で Tello を制御するまでの道のりを記す。

UART-UDP 部分

まずは、M5StickC で UART で受け取った文字列を UDP に流すプログラムを作成した。

https://github.com/EiichiroIto/m5stickcUartUdpBridge

プログラムの流れは以下の通りである。

  1. アクセスポイントをスキャンする
  2. Tello- で始まるアクセスポイントを見つけたらパスワードなしで接続する。
  3. (なければ終了)
  4. シリアル受信したらそのままUDPで送信する。
  5. 以降、繰り返す。

テストのため、Aボタンが押されたら “takeoff” を、Bボタンが押されたら “land” をUDP送信するようにした。(この辺りのインターフェイスは大幅に見直す予定)

Tello の電源をオンにした状態で、M5StickC の電源を入れると、無事 Tello のAPに接続した。ボタンAとボタンBで昇降することも確認できた。ついでに、USB-UART アダプタを使い、arduino のシリアルモニタからのテキスト入力による昇降も確認した。

radio-UART 部分

次に、radio-UART 部分に着手。micro:witch には UART のブロックがなかったので、通信カテゴリに追加した。

そのブロックを使って作成した、micro:bit (B) の radio-UART ブリッジのスクリプトがこちら。

無線をオンにして、少し待ってからUART の設定を行い、受け取った無線メッセージをUARTに書き込むだけの簡単なもの。

なぜUARTまで3秒待っているかというと、UART の出力先のピンを変更すると、USB経由でのUARTが使えなくなって、それ以降 micro:witch からコントロールできなくなってしまうため。最悪ファームウェアの転送からやり直さないといけない。多少のウェイトがあることで、micro:witch でstopかけて止めることができる。

わざわざ micro:bit を2台使わずに UART だけで Tello を制御することもできるのだが、 micro:bit の UART 使用には上のような注意点があるのと、radio で受信するようにしておけば、教室にある複数の micro:bit から1台の Tello を使うこともできるので、このような構成にしている。

micro:bit (B) と M5StickC の接続

先ほどの radio-UART のスクリプトでは、UART の TX を Pin0 に設定してある。また、UART-UDP のプログラムでは、RX を GPIO36 にしたので、これらのピンを互いに接続した。

加えて、M5StickC の GND と 3V3 を、micro:bit の GND と 3V にそれぞれつなげば、2つのデバイスを一体的に運用できるし、ある程度なら M5StickC のバッテリーだけで動かすことができる。

これで全てのお膳立てが整った。

micro:bit (A) から radio 経由で昇降させる。

最後に micro:witch で、radio 経由で文字列を送るプログラムを作って Tello を昇降できるようにした。後で気づいたのだが、メッセージを送った後で少し待たないと、メッセージを連結して受信してしまう。実際に使うときは、その注意が必要である。

ようやく、依頼いただいた先生に見てもらうことができる状態になった。