スクリーンショット_2019-06-02_21

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を光らせる

上の計画をプログラムすると下記のようになります。

お互いにほぼ同じプログラムですね。では、これを入れるとどうなるか、実行してみましょう。

無事上手く動きました!でもこれだとランダムにしか行かず、「意味」をつたえることができません。なので、お互いにチカチカを再現できるようにしてみました。つまり、モールス信号を覚えておけばお互いにやり取りできますよね。

プログラムは片方しか載せませんが、もう一台も色を変えて同じようにプログラムしておけば動きます。動画のとおりになりました!

うまくいった・・・かな?という感じで通信にやはりタイムラグが有るのが若干問題です。同時の通信は難しそうなので、伝えたいメッセージをつくってそれから送信する、という方法が良さそうです。

次回は、ボタンを押した数でうまく「意味」を伝えられるように工夫してみたいと思います!

この記事が参加している募集

やってみた

ただ続けることを目的に、毎日更新しております。日々の実践、研究をわかりやすくお伝えできるよう努力します。