2台のmicro:bitで無線通信を試してみる

明るさセンサーのデータをもう1台のmicro:bitに送信

前回、TFabConnectというmicro:bitからインターネットへの接続サービスを体験しましたが、micro:bitとノートPCをUSBケーブルで接続し、micro:bitから取得した明るさデータをPCのブラウザ経由でTFabConnect上でグラフに反映させる、というものでした。

TFabConnectとはそもそも何か? 以前このブログでもご紹介したmicro:bitですが、低コストな教育用デバイスということで...

手軽にmicro:bitのセンサーデータをインターネット上のグラフに表示できるのは非常に画期的だと感じた一方で、このやり方だと常にデータを取得したい場所にmicro:bitとノートPCをセットで持ち歩く必要があるため、ちょっと不便だなと感じました。

そこで、PCとUSB接続するmicro:bitは受信専用とし、もう1台のmicro:bitをセンサーデータの送信用としてPCとは切り離して使用する方法を試してみることにしました。今回使用するのは「無線通信」です。

具体的な構成は下図の通りで、送信用micro:bitはPCとは完全に独立させます。
無線通信は数メートルの範囲内であれば通信が可能なので、少し離れた場所に送信用micro:bitを設置し、取得したデータを一定間隔で受信用micro:bitに送る仕組みとなります。

送受信用プログラムをMakeCodeで作成

予め、送受信用micro:bitにそれぞれプログラムを実装する必要があります。

送信用プログラムの例

初回のみ、無線のグループを設定します。ここでは、グループIDに”999″を設定します。後述の受信用プログラムでも同様に無線のグループを設定することで、micro:bit間での無線通信が可能となります。

「ずっと」ブロックの中では、以下の処理をひたすら繰り返します。

  1. LEDを点灯(x:0, y:0)
  2. 無線で数値を送信(明るさの値)
  3. 一時停止(1秒)
  4. LED消灯
  5. 一時停止(5分)

LEDを点灯させているのは、無線送信が行われているかどうかを判断できるようにするためです。5分おきに明るさデータを送信し続けます。

ちなみに、ボタンA押下時の処理を加えたのは、今すぐ無線通信が有効であるかをチェックするためです。

受信用プログラムの例

送信用と同じく、初回のみ無線のグループを設定しています。

無線でreceivedNumberを受信した際に、以下を行います。

  1. クラウド変数”light”にreceivedNumberをセット(明るさデータ)
  2. receivedNumberをLEDに表示
  3. 5秒停止
  4. 表示を消す

ちなみに、右側にあるreceivedString受信時の文字列表示は、無線通信有効無効のチェック用文字列の受信のために用意しました。

ボタン電池だと無線通信が暴走?

上述のプログラムを送信側、受信側のmicro:bitにそれぞれ転送します。
転送手順についてはここでは割愛します。

上の画像ですが、左側の青いmicro:bitが受信用、右側が送信用となります。
送信用micro:bitについては、単4電池3本が搭載可能なモジュールに接続しています。これでPCと接続しなくてもmicro:bitを動作させることが可能になります。

なお、こちらのモジュールは「micro:bit用ワークショップモジュール」という名称で、スイッチサイエンスのサイトから購入が可能です。

スイッチサイエンス

実は、このモジュールを使う前に、ボタン電池で電源を供給するモジュールを使用してみたのですが、本来5分おきに明るさデータを送信するはずのプログラムが、突然数秒おきに送信し始めてしまい、非常に不安定な動作となってしまいました。

最初は電池が切れたのかと思い、新品のボタン電池を買って再度試してみたのですが、やはり暴走してしまいました。
ボタン電池だからなのか根本原因はまだよく分かりませんが、単4電池3本を使用するワークショップモジュールだとこの現象は出ていないため、とりあえず今回はワークショップモジュールを使用することにしました。

スイッチサイエンス

TFabConnectで明るさグラフを表示

受信用micro:bitをノートPCとUSBケーブルで接続し、TFabConnectのダッシュボード画面よりWebUSB接続を行います。送信用micro:bitの電源をオンにすると、5分おきの無線通信が開始されます。

上記グラフは、我が家の適当な場所に送信用micro:bitを置いた状態で取得した明るさデータのグラフとなります。
取得開始時刻が15時すぎだったので、あっという間に暗くなってしまいました。そのため、グラフが右肩下がりとなっています。

途中、15:42に突然明るさがゼロになったのは、micro:bitの場所をちょこちょこ動かしている間に、日陰に置いてしまったことが原因です。
その後再び日向に置き直しましたが、この日は曇りがちだったため、16:27には早々に明るさゼロになってしまいました。

ちなみに、グラフをよく見ていただけるとわかるのですが、5分おきの送信のはずが、10分以上間隔が空いてしまっている時間帯もあります。正直、ちゃんとした理由は分かっておりませんが、我が家の家電から出る電波が干渉しているのか、そもそも無線通信が可能な距離よりも離れた場所に置いたことが原因なのかもしれません。

まとめ

プログラムを見ていただければお分かりかと思いますが、micro:bitの無線通信は非常に簡単に実装することが可能です。子供向けのプログラミング教室などでも手軽に扱えるし子供もこういう仕掛けがあるほうが楽しめるのではないかなと思います。

今回は明るさセンサーを使用しましたが、他にもmicro:bitに搭載されている加速度センサーを使って、簡易的な侵入検知システムを作ることも可能です。

玄関ドアに張り付けた送信用micro:bitから加速度センサーのデータを取得し、ドアの開閉の動きを検知した場合に侵入者を知らせるメッセージを送信します。受信側では、メッセージを受信した時点でLEDに侵入者を知らせるメッセージを表示させれば、玄関ドアから離れた場所でも侵入を検知することができます。

正直、大人でも十分その機能を楽しめるのがmicro:bitです。
せっかくプログラミングをお仕事にされているお父さんであれば、休日お子さんと一緒にmicro:bitを使った仕組みを作ってみるなどして、少しでもお子さんにプログラミングへの興味を持ってもらえると嬉しいのではないでしょうか。