Halocode同士で交信するには?
Wifi搭載のマイコンボード、Makeblock Halocode。一方通行にデータを送受信することはできたものの、相互に交信できると簡単な通信機として使える!ということで、二台のHalocodeを活用して試してみます。
まず、アプローチを2つ考えました。
アプローチ1:LAN機能を活用する。
アプローチ2:Wifi機能を活用する。
それぞれ試してみましょう。
アプローチ1:LAN機能を活用する
一方通行型の通信、LAN機能を活用して、双方向の通信をできるようになんとかならないものか、ということで思案しました。そこでひらめいたのは「モードの切替」を行うということです。送信するたびにルート(送信者)のモードに切り替えて、送信が終わったらノード(受診者)のモードに戻すようにします。
考えついたやり方をことばにしてみると下記のとおりです。
ボタンを押したとき
> モードを「ルート」モードに変える // 送信できるようにする
> 1〜12の乱数を変数「position」に入れる。 // 光るLEDを決める
> 「position」のデータを送信する // データを送る
> 「position」番目のLEDを光らせる // どのLEDにしたか確認する
> モードを「ノード」モードに変える // 送信されるものを待つ
受信したとき
> 「受信した値」番目のLEDを光らせる // 受け取った番号のLEDを光らせる
では、それぞれのHalocodeに上の順番でプログラムをしてみます。
どちらも「ノード」状態にして待つようにしていますが、送信するために「ボタン」を押した時、だけ「ルート」モードに変えるようにしました。
実際に作動させてみると下記の動画のようになりました。
残念、うまくいきませんでした。原因としては「モードのチェンジ」がスムーズに行っていない可能性や、送信が完了する前にかってにモードが切り替わってしまう可能性もあります。
アプローチ1がだめだったので別の方法を考えアプローチ2を取ります。
アプローチ2:Wifi機能を活用する
次に、サーバーを介した通信「Wifi機能」を活用します。プログラムは、送信するものと、受信したときのもので2つに分けますが、こちらは「モードの変更」は必要ありません。
ボタンを押したとき
> 1〜12の乱数を変数「position」に入れる。 // 光るLEDを決める
> 「position」のデータを送信する // データを送る
> 「position」番目のLEDを光らせる // どのLEDにしたか確認する
受信したとき
> 「受信した値」番目のLEDを光らせる // 受け取った番号のLEDを光らせる
上の計画をプログラムすると下記のようになります。
お互いにほぼ同じプログラムですね。では、これを入れるとどうなるか、実行してみましょう。
無事上手く動きました!でもこれだとランダムにしか行かず、「意味」をつたえることができません。なので、お互いにチカチカを再現できるようにしてみました。つまり、モールス信号を覚えておけばお互いにやり取りできますよね。
プログラムは片方しか載せませんが、もう一台も色を変えて同じようにプログラムしておけば動きます。動画のとおりになりました!
うまくいった・・・かな?という感じで通信にやはりタイムラグが有るのが若干問題です。同時の通信は難しそうなので、伝えたいメッセージをつくってそれから送信する、という方法が良さそうです。
次回は、ボタンを押した数でうまく「意味」を伝えられるように工夫してみたいと思います!