本記事ではmicro:bitの無線機能を使いこなせるようになることを目指して解説します。
- micro:bit同士で無線通信する方法②【信号強度、時刻、シリアル番号】
前回はmicro:bit同士で簡単なメッセージのやり取りをするプログラムを作りました。
今回は、その通信時に得られる情報(信号強度など)を使ったプログラムを作ります。
micro:bit同士で無線通信する方法②【信号強度、時刻、シリアル番号】
micro:bitには無線通信用のアンテナが搭載されています。
前回も解説しましたが、メッセージを送信したときに下記の内容も一緒に送られます。
- 信号強度・・・信号の強さ
- 時刻・・・送信された時刻
- シリアル番号・・・micro:bit1つ1つに割り当てられた番号
今回はこれらの情報を使うプログラム例を紹介します。
micro:bit同士の通信を使ってできること
micro:bit同士の通信に前述の情報を使うと下記のようなことができます。
- 近くのmicro:bitと遠くのmicro:bitを区別できる
- 他のmicro:bitが近づいてきたら音を鳴らす
- 前回送られたメッセージから何秒経ったかわかる
- 特定のmicro:bitから送られたメッセージのみ表示する
上記のとおりです。ぜひ、使い方をマスターしましょう!
「受信したパケットの信号強度」ブロック
この命令は受信したパケットに含まれる「信号強度、送信時刻、送信元のシリアル番号」が保存されているブロックです。
そして、保存されている値は次の3つです。
- 信号強度・・・信号の強さ
- 時刻・・・送信された時刻
- シリアル番号・・・micro:bit1つ1つに割り当てられた番号
それぞれ詳しく見ていきましょう。
信号強度
信号強度は通信しているときの信号の強さを表します。基本的には通信しているmicro:bitの距離が遠くなると信号強度が弱くなります。
信号の強さは次のとおりです。
ちなみに、信号強度はシミュレーターのこの部分に表示され、アンテナマークの上にマウスカーソルを持ってくると擬似的に信号強度を変えることができます。
時刻
時刻は送信側がメッセージを送信したときの時刻で、micro:bitを起動してから送信するまでに経過した時間[マイクロ秒]です。
マイクロ秒は1,000,000分の1秒のことで、つまり次のとおりです。
- 1[秒] = 1,000,000[マイクロ秒]
- 1[マイクロ秒] = 0.000001[秒]
例えば、値が51148だったら、micro:bitの電源を入れてから送信するまでの時間が51,148[マイクロ秒] = 0.051148[秒]ということです。
シリアル番号
シリアル番号はmicro:bit1つ1つに割り当てられた固有の番号で、9桁の数値で表されます。
相手のシリアル番号を知っていれば、それ以外の相手からのメッセージを破棄することができます。
「受信したパケットの信号強度」ブロックを使う例
では、それぞれの情報を表示するプログラムを作りましょう。
プログラムの考え方としては次のとおりです。
- 最初だけ「無線の電波帯域を設定する」
- 最初だけ「無線のグループを設定」
- ボタンAが押されたとき「無線で数値を送信」
- 無線で数値を受信したとき、受信したパケットの信号強度を表示する
- 無線で数値を受信したとき、受信したパケットの時刻を表示する
- 無線で数値を受信したとき、受信したパケットのシリアル番号を表示する
上記のとおりです。これをプログラムにすると次のとおりです。
※実行結果は▶ボタンを押してから確認してみてください。
「シリアル番号の送信の有無を設定」ブロック
この命令は無線でメッセージを送信するときにシリアル番号の送信有無を設定できる命令です。
設定できる内容は次の通りです。
- 真:シリアル番号を送信する
- 偽:シリアル番号を送信しない(初期値)
この命令を使ってシリアル番号の送信有無を設定しないとシリアル番号は送信されません。
基本的には最初に一度設定すればいいので次のように使います。
この命令を使って前述のプログラムを改良したものがこちらです。
※実行結果は▶ボタンを押してから確認してみてください。
信号強度を使うプログラム例 ~ビーコン~
信号強度を使うプログラム例としてビーコンプログラムを紹介します。
micro:bit同士の距離に応じてLEDディスプレイの棒グラフを変化させるプログラムを作ります。
考え方は次のとおりです。
- 0.2秒おきに「無線で数値を送信」
- 無線で数値を受信したとき、受信したパケットの信号強度を変数に代入する
- 変数を+128する
- 2.の値を棒グラフで表示する
上記のとおりです。これをプログラムにすると次のとおりです。
▼送信側の処理
▼受信側の処理
「2.変数に+128する」について補足すると、これは信号が一番弱い時を0にするための処理です。
▼エディター※実行結果は▶ボタンを押してから確認してみてください。
時刻を使うプログラム例 ~時刻の差分~
時刻を使う例として前回送られてきたメッセージから今回送られてきたメッセージまでの時間を表示するプログラムを作ります。
考え方は次のとおりです。
- ボタンAが押されたとき「無線で数値を送信」
- 最初だけ「前回と今回の時刻を保存する変数に0を代入する(初期化)」
- 無線で数値を受信したとき、受信したパケットの時刻を変数に代入する
- 「今回の時刻 – 前回の時刻」の結果を表示する
- 前回の時刻を今回の時刻で書き換える
上記のとおりです。これをプログラムにすると次のとおりです。
▼送信側の処理
▼受信側の処理
前回の時刻と今回の時刻の関係がややこしいですよね?図にすると次のとおりです。
▼エディター※実行結果は▶ボタンを押してから確認してみてください。
シリアル番号を使うプログラム例 ~通信相手を選択~
シリアル番号を使う例として特定の相手からのメッセージのみ表示するプログラムを作ります。
プログラムの考え方としては次のとおりです。
- 最初だけ「シリアル番号の送信の有無を設定(送信する)」
- ボタンAが押されたとき「無線で文字列を送信」
- 1.無線で文字列を受信したとき、受信したい相手のシリアル番号と受信したパケットのシリアル番号が一致するか判定する
- 2-1.一致する場合:受信した文字列と♡マークを表示する
- 2-2.一致しない場合:×マークを表示する
上記のとおりです。これをプログラムにすると次のとおりです。
▼送信側の処理
▼受信側の処理
「受信したパケットのシリアル番号」ブロックなどを使ってから調べて、あらかじめプログラムに書いておく必要があります。
▼エディター※実行結果は▶ボタンを押してから確認してみてください。
まとめ
本記事のおさらいです。
- メッセージと一緒に「信号強度、時刻、シリアル番号」も送信される
- 信号強度はmicro:bit同士が近づくと強くなり、離れると弱くなる
- 時刻はmicro:bitの電源をONにしてから送信するまでの時間
- シリアル番号はmicro:bit1つ1つに割り当てられた番号
上記のとおりです。
次は「micro:bit同士で無線通信する方法③」です。