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機能があります。

アップロードモードとは、デバイス(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でイベントブロックパレット内のメッセージを使う際は、以下の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接続することが前提の機能です。
WiFiブロックパレット内のユーザークラウドメッセージとイベントブロックパレット内のメッセージの機能的な違いは、
1)ユーザークラウドメッセージは、HaloCodeとPCを接続していなくても、デバイスースプライト間で、メッセージのやり取りが可能になる。
※スプライト側にユーザークラウドメッセージという拡張機能を追加する必要があります。
2)HaloCodeで取得したセンサーデータの値を送受信することが出来る
HaloCodeを使ったプログラミングの際、WiFi機能が注目されがちなので、メッセージを送る際も、ユーザークラウドメッセージを使いたくなりがちです。
しかし、このページで書いたような通常のメッセージ機能との違い・WiFi接続前提で、WiFi環境によっては繋がらない可能性も十分に考えられるという事を、しっかり理解しておかないと、ワークショップ現場での大きな混乱のもとになります。
従って、ワークショップ、プログラミング教室で、ユーザークラウドメッセージを使う際、基本的には、センサーデータの値を送る必要があるプロジェクトに限定しておいた方が、メッセージ機能との違いも明確化できるので良いのではないかと思います。
今回のように、ユーザークラウドメッセージや、音声認識など、mBlock5サーバーを使う場合は、必ずログインをするという事と、スクリプトをHaloCodeにアップロードした時と同じアカウントでmBlock5にログインして、メッセ―ジ送受信をする必要があります。
例えば、
①アカウントAで、ログインし、HaloCodeにユーザークラウドメッセージ機能があるスクリプトをアップロードした場合、
アカウントAで、ログインした状態のmBlock5であれば、スプライトからクラウドメッセージの送受信が可能。
一方、アカウントAをログアウトし、違うアカウントBでmBlock5にログインをして、クラウドメッセージを送ろうとしても、送受信できません。
つまり、HaloCodeにスクリプトをアップロードする際、アカウントAの情報も一緒にアップロードされていて、HaloCodeにアップロードしたアカウント情報と、mblock5のログインアカウント情報を照らし合わせ、整合しているときのみ、メッセージを送信(受信)しているものと思われます。