複数のHalocode同士 をWiFiで直接通信することが可能

 Makeblock社のSTEAM教育用シングルボードコンピューター「Halocode」のスペック上の大きな特徴は、WiFiでインターネットに接続して、PCや他のMakeblock社のWiFiデバイスと連携動作させることが出来る点です。
 ケーブルにつながずに、PCと連動させることが出来るので、よりスマートなフィジカルコンピューティングを体験することが可能になります。

例えば、こんな感じですね↓

WiFiデバイスというと、通常は、インターネットに接続する機能にフォーカスされがちですが、Halocodeは、インターネットに接続せずに、複数のデバイスで連携させる機能を標準で実装させています。↓の動画は、Makeblock社のHPより引用しています。

 

 この動画では、1個のHalocodeの動きに応じて、複数のHalocodeのLEDの光り方を変化させています。この接続には、インターネットやPCは介しておらず、Halocodeだけで形成されたローカルエリアネットワーク(LAN)内で接続を実現しています。

複数のHalocodeの接続を可能にするブロックパレット「LAN」

 Halocodeを複数接続させるのは、ビジュアルプログラミングソフト「mBlock5」で、簡単に実現できます。

Halocode_LANブロック画像

 mBlock5_v5.1_Web版のLANのブロックパレットには、6つのブロックがありますが、その中で4つは、LANで接続されたHalocode同士を制御するためのメッセージ送受信に関係するブロックです。

mBlock5_Halocode_LAN_メッセージブロック画像

 Scratch3.0ベースのmBlock5には、様々なメッセージ送受信方法がありますよね。通常のメッセージ・ユーザークラウドメッセージ・アップロードモードメッセージ、そして今回のLANでのメッセージ。これらは、他のデバイス(PCやスプライトも含む)とどう接続してどういうやり取りをするかによって使い分ける必要がありますので、しっかり把握しておきたいですね。

 HalocodeをLAN接続するためのブロックは、以下の2つのブロックです。

Halocode_LAN設定接続ブロック画像

 複数のHalocodeのLAN接続をする場合、接続方法の基本的な考え方を理解する必要があります。
 まず、Halocodeは複数接続が可能ですが、基本的には1:Nでの接続で親Halocode1個に対して子Halocode複数個の接続が可能というもので、子Halocodeは親Halocodeに処理を一任するという考え方になります。

 ちなみに、WiFiメッシュのように、親Halocode1個-子Halocode-孫Halocode、というような1:N:Nのような接続は出来るという情報はなく、筆者自身でも、その動作確認は出来ていません。
 ※2019年8月12日現在、mBlock5_V5.1を使って、上記の親ー子ー孫の接続が可能であるか検証中です。

 こちらのページでは、親Halocodeを「ルート」と表記し、子Halocodeを「ノード」と表記し、その接続方法から説明していきます。Halocode_ノードルート図表Halocode_ノードルート図表_親Halocode1に対して、子Halocodeが多数接続可能です。

大前提として、ルートとノードそれぞれ別のプログラムをアップロードする必要があります。

2個のHalocodeをLANで接続させる簡単プログラミング

 今回は、Makeblock Japan社さんから、2個Halocodeをお借りしましたので、その2個を使ってLAN接続を試してみたいと思います。

ルート側のHalocodeのプログラミング

 まずは、Halocodeをルート(親)にするためのプログラムです。
1、mBlock5を起動し、Halocodeと接続したら、アップロードモードをオンにする
2、LANの名前を任意に設定する。デフォルトで「mesh1」となっているので、ここでは、そのまま利用
3、2で設定したLANに接続する
4、LANに接続した状態であることが分かるように、任意のLED点灯をさせる。

Halocode_LAN接続設定スクリプト

ここまでが、LANへの接続の為のスクリプトです。

5、ルートのHalocodeの動作を既定するスクリプトを作ります。
例えば、↓のスクリプトは、ボタンが押された後、触ったタッチパッドの番号に応じて、それぞれ「値」を変えたメッセージを送る

Halocode_ルート側ブロックスクリプトサンプル

 ちなみに、更に多くのHalocodeにメッセージを送る場合は、その子Halocode(ノード)毎に、番号を決めておいて、ノードは割り当てられた「値」が来た時にだけ、動作させるようなことをすれば、冒頭のようなデモが出来ると思います。

ノード側のHalocodeのプログラミング

 次に子Halocodeをノード側デバイスとして設定して、メッセージに乗せられた値に応じてLEDの光り方を変えるプログラムを作成します。

1、ルート側で設定したLANの名前を書き込む
2、LANに接続された事を分かりやすくするため、LEDを任意で点灯させる
3、ルート側で設定したメッセージの値毎に、LEDの光り方が変わるというスクリプトを作成する

Halocode_ノード側サンプルプログラム画像

 

 それで、できた動作デモは↓のようなものになります。正直、見た目だと、LANで繋がっている感じは分かりませんが(笑)

 例えば、Halocodeを使ったクラスでは、ルートを先生がプログラムして、親Halocodeの挙動の応じてメッセージの値を複数作って送信、クラスにいる生徒さんに各メッセージの値を割り当てて、生徒さんたちは、ノードとして好きなプログラム(例えばLEDが虹色に光るとか)を作成して受信するなんてことをして、一体感を高めたクラスなんて言うのも考えられそうですね。

■このページの動作環境
※Makeblock社は随時ソフトウェアのアップデートが行われています。ご自身のPCと本ページのブロック表記が違う場合もあります。本ページは、以下の環境下で動作チェックをしました。
①ハードウェア:Halocode_ファームウェアバージョン_25.01.003
※Halocodeは、出荷時期によりファームウェアが最新のものではない(=mBlock5の最新バージョンに対応していない)場合があり、それによって意図した挙動が得られない可能性があります。まず最初に、お使いのHalocodeを最新のファームウェアに更新することをお勧めします。
②ソフトウェア:WEB版(ブラウザ版)mBlock5_v5.1 
③利用PCのOS:Windows10
④ソースコード確認日:2019年8月12日