HaloCodeのプログラミングでよくある「メッセージ」が送れない問題

HaloCodeは、PC(mBlock5 for PC)のスプライトと連動するフィジカルコンピューティングを手軽に楽しむことが出来る非常に優れたSTEAM教育用シングルボードコンピューターです。

 その際、HaloCodeとmBlock5のスプライト間のデータのやり取りは、「メッセージ機能」というものを使います。Scratch3.0のように、PC上のスプライト同士のメッセージのやり取りだけでなく、HaloCodeというデバイスとスプライトのメッセージのやり取りが発生します。

 HaloCodeでは、デバイス(HaloCode)とスプライト(mBlock5 for PC)間の接続方法によって利用できるメッセージ機能に違いが生じ、その部分を理解していない場合に、あれ?メッセージ送れない。。という壁が発生します。HaloCode最大のあるある問題じゃないかと思います。

このページでは、HaloCodeのメッセージ機能の使い方を徹底解説したいと思います。

前提としてアップロードモードのON-OFF状態を確認する

デバイス(HaloCode)とスプライト(mBlock5 for PC)の間で、「メッセージ」を送る際に、前提として理解しておかなければならない事として、mBlock5のアップロードモードのOn-Off機能があります。

mBlock5_アップロードモード画像

 アップロードモードとは、デバイス(HaloCodeやmBotなどのハードウェア)にスクリプトをアップロードするモードです。
 
 このアップロードモードのオン・オフの状態によって、利用できるブロック=利用できるメッセージ機能が変わりまので、mBlock5でプログラミングをする際アップロードモードの状態を常に確認しておく必要があります。

HaloCodeで利用できる2つのメッセージ機能

HaloCodeには、「メッセージ」と「ユーザークラウドメッセージ」の2つの機能があります。この2つの違いは、アップロードモードON-OFFの状態で理解する必要があります。

1:アップロードモードOFFの時は、「メッセージ機能」のみ使える

 アップロードモードがオフの場合は、プログラムの実行はmBlock5(PC)側で行われるため、HaloCodeは常に、mBlock5と接続されている状態でなければなりません。接続する方法については、USBケーブルでの有線接続と、Makeblock社のBluetooth送受信ドングルでの無線接続の2種類があります。

※Bluetooth接続する場合は、Makeblock専用のPC受信ドングルを別途購入する必要があります。
参考記事:Maleblock専用受信ドングルレビュー

 この状態で利用できるメッセージ機能は、イベントブロックパレットにある3つのメッセージブロックのみです。

イベントブロックパレット_メッセージブロック画像

このイベントブロックパレットのメッセージブロックを使ってメッセージ機能を使う際に、送受信できるデバイス・スプライトは、以下の3通りになります。

1)HaloCodeのスクリプト内で、HaloCode自身にのみメッセージを送信する。

2)HaloCodeとmBlock5のスプライト間でメッセージの送受信をする 

3)mBlock5のスプライトA・スプライトB・・・といったスプライト同士のメッセージ送受信

2:アップロードモードONの時は、一部のメッセージ機能とユーザークラウドメッセージが使える

 アップロードモードがONの場合は、mBlock5 for PC で作成したスクリプトをデバイス(HaloCode)にアップロードして、HaloCode内でプログラムを実行します。

その1:イベントブロックパレットのメッセージ機能を使う
アップロードモードON_イベント

アップロードモードONでイベントブロックパレット内のメッセージを使う際は、以下の2つの場合で有効になります。

1)HaloCode内だけのメッセージのやり取り
2)mBlock5のスプライト同士でのメッセージのやり取り

ここに、メッセージ送れない問題の最大の落とし穴があります。

アップロードモードをオンにした状態で、HaloCodeにスクリプトをアップロードして、実行した場合、例え、USBケーブルやBluetoothで、HaloCodeと、mBlock5が接続されている状態だったとしても、HaloCode-スプライト間でメッセージのやり取りが行われないのです。

これは、PC内のスプライトをプログラムするという事では起こりえない、HaloCodeならではの事象だと思います。

その2:WiFiブロックパレット内のユーザークラウドメッセージを送る

 アップロードモードをONにし、且つ、mBlock5のユーザー登録をしてログインした状態にすると、WiFiブロックパレット内のユーザークラウドメッセージ機能を使う事が出来ます。
 この機能を使うと、mBlock5(PC)とHaloCodeのUSB接続やBluetooth接続をしていなくても、HaloCodeースプライト間でメッセージのやり取りをすることが可能になります。※HaloCodeをWiFi接続することが前提の機能です。

Halocode_Sprites_コネクト図の画像

mBlock5_v5.0.1の場合です。今後のmBlock5のアップデートでこの接続図は変更になる可能性あります。

 WiFiブロックパレット内のユーザークラウドメッセージとイベントブロックパレット内のメッセージの機能的な違いは、

1)ユーザークラウドメッセージは、HaloCodeとPCを接続していなくても、デバイスースプライト間で、メッセージのやり取りが可能になる。
※スプライト側にユーザークラウドメッセージという拡張機能を追加する必要があります。

2)HaloCodeで取得したセンサーデータの値を送受信することが出来る

 HaloCodeを使ったプログラミングの際、WiFi機能が注目されがちなので、メッセージを送る際も、ユーザークラウドメッセージを使いたくなりがちです。
 しかし、このページで書いたような通常のメッセージ機能との違い・WiFi接続前提で、WiFi環境によっては繋がらない可能性も十分に考えられるという事を、しっかり理解しておかないと、ワークショップ現場での大きな混乱のもとになります。

 従って、ワークショップ、プログラミング教室で、ユーザークラウドメッセージを使う際、基本的には、センサーデータの値を送る必要があるプロジェクトに限定しておいた方が、メッセージ機能との違いも明確化できるので良いのではないかと思います。

 

■HaloCodeとmBlock5スプライトは、同一アカウントじゃないと、メッセージ送受信できない

今回のように、ユーザークラウドメッセージや、音声認識など、mBlock5サーバーを使う場合は、必ずログインをするという事と、スクリプトをHaloCodeにアップロードした時と同じアカウントでmBlock5にログインして、メッセ―ジ送受信をする必要があります

例えば、
①アカウントAで、ログインし、HaloCodeにユーザークラウドメッセージ機能があるスクリプトをアップロードした場合、
アカウントAで、ログインした状態のmBlock5であれば、スプライトからクラウドメッセージの送受信が可能。
一方、アカウントAをログアウトし、違うアカウントBでmBlock5にログインをして、クラウドメッセージを送ろうとしても、送受信できません。

つまり、HaloCodeにスクリプトをアップロードする際、アカウントAの情報も一緒にアップロードされていて、HaloCodeにアップロードしたアカウント情報と、mblock5のログインアカウント情報を照らし合わせ、整合しているときのみ、メッセージを送信(受信)しているものと思われます。