前回の記事に引き続いて、micro:witch で Tello を制御するまでの道のりを記す。
UART-UDP 部分
まずは、M5StickC で UART で受け取った文字列を UDP に流すプログラムを作成した。
https://github.com/EiichiroIto/m5stickcUartUdpBridge
プログラムの流れは以下の通りである。
- アクセスポイントをスキャンする
- Tello- で始まるアクセスポイントを見つけたらパスワードなしで接続する。
- (なければ終了)
- シリアル受信したらそのままUDPで送信する。
- 以降、繰り返す。
テストのため、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 を昇降できるようにした。後で気づいたのだが、メッセージを送った後で少し待たないと、メッセージを連結して受信してしまう。実際に使うときは、その注意が必要である。
ようやく、依頼いただいた先生に見てもらうことができる状態になった。