micro:bit同士で無線通信する方法②【信号強度、時刻、シリアル番号】

micro:bit同士で無線通信する方法②【信号強度、時刻、シリアル番号】

※当サイトには広告が掲載されています。ご了承くださいm(_ _)m

本記事では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から送られたメッセージのみ表示する

上記のとおりです。ぜひ、使い方をマスターしましょう!

「受信したパケットの信号強度」ブロック

この命令は受信したパケットに含まれる「信号強度、送信時刻、送信元のシリアル番号」が保存されているブロックです。

パケットとは小包のことで、データを送るときの一単位です。大きなデータを小さな小包に分けてちょっとずつ送るイメージです。パケット1つ1つに送信元や送信先などの情報が書かれています。

そして、保存されている値は次の3つです。

  • 信号強度・・・信号の強さ
  • 時刻・・・送信された時刻
  • シリアル番号・・・micro:bit1つ1つに割り当てられた番号

それぞれ詳しく見ていきましょう。

信号強度

信号強度は通信しているときの信号の強さを表します。基本的には通信しているmicro:bitの距離が遠くなると信号強度が弱くなります。

信号の強さは次のとおりです。

信号強度:-128(弱い) ~ -42(強い)

ちなみに、信号強度はシミュレーターのこの部分に表示され、アンテナマークの上にマウスカーソルを持ってくると擬似的に信号強度を変えることができます。

時刻

時刻は送信側・・・がメッセージを送信したときの時刻で、micro:bitを起動してから送信するまでに経過した時間[マイクロ秒]です。

マイクロ秒は1,000,000分の1秒のことで、つまり次のとおりです。

  • 1[秒] = 1,000,000[マイクロ秒]
  • 1[マイクロ秒] = 0.000001[秒]

例えば、値が51148だったら、micro:bitの電源を入れてから送信するまでの時間が51,148[マイクロ秒] = 0.051148[秒]ということです。

シリアル番号

シリアル番号はmicro:bit1つ1つに割り当てられた固有の番号で、9桁の数値で表されます。

相手のシリアル番号を知っていれば、それ以外の相手からのメッセージを破棄することができます。

「受信したパケットの信号強度」ブロックを使う例

では、それぞれの情報を表示するプログラムを作りましょう。

プログラムの考え方としては次のとおりです。

▼送信側・受信側共通の処理
  1. 最初だけ「無線の電波帯域を設定する」
  2. 最初だけ「無線のグループを設定」
▼送信側の処理
  1. ボタンAが押されたとき「無線で数値を送信」
▼受信側の処理
  1. 無線で数値を受信したとき、受信したパケットの信号強度を表示する
  2. 無線で数値を受信したとき、受信したパケットの時刻を表示する
  3. 無線で数値を受信したとき、受信したパケットのシリアル番号を表示する

上記のとおりです。これをプログラムにすると次のとおりです。
※実行結果は▶ボタンを押してから確認してみてください。

これだとシリアル番号が0と表示されますよね?これはシリアル番号を送信する設定がOFFになっているからです。次はシリアル番号を送信する設定を解説します。

「シリアル番号の送信の有無を設定」ブロック

この命令は無線でメッセージを送信するときにシリアル番号の送信有無を設定できる命令です。

設定できる内容は次の通りです。

  • 真:シリアル番号を送信する
  • 偽:シリアル番号を送信しない(初期値)

この命令を使ってシリアル番号の送信有無を設定しないとシリアル番号は送信されません。

セキュリティの観点から初期値ではシリアル番号を送信しないようになっているんですね~。なので、前述のプログラムではシリアル番号が0と表示されました。

基本的には最初に一度設定すればいいので次のように使います。

この命令を使って前述のプログラムを改良したものがこちらです。
※実行結果は▶ボタンを押してから確認してみてください。

これですべての情報が表示されました!

信号強度を使うプログラム例 ~ビーコン~

信号強度を使うプログラム例としてビーコンプログラムを紹介します。

ビーコンとは通信機器同士が近づいたことを検知する装置のことです。

micro:bit同士の距離に応じてLEDディスプレイの棒グラフを変化させるプログラムを作ります。

考え方は次のとおりです。

▼送信側の処理
  1. 0.2秒おきに「無線で数値を送信」
▼受信側の処理
  1. 無線で数値を受信したとき、受信したパケットの信号強度を変数に代入する
  2. 変数を+128する
  3. 2.の値を棒グラフで表示する

上記のとおりです。これをプログラムにすると次のとおりです。

▼送信側の処理

▼受信側の処理

「2.変数に+128する」について補足すると、これは信号が一番弱い時を0にするための処理です。

「plot bar graph」ブロックではマイナスの値が使えないのでこうしています。
棒グラフを表示する「plot bar graph」ブロックの使い方は「【microbit】LEDディスプレイの使い方②」をご覧ください。

▼エディター※実行結果は▶ボタンを押してから確認してみてください。

時刻を使うプログラム例 ~時刻の差分~

時刻を使う例として前回送られてきたメッセージから今回送られてきたメッセージまでの時間を表示するプログラムを作ります。

考え方は次のとおりです。

▼送信側の処理
  1. ボタンAが押されたとき「無線で数値を送信」
▼受信側の処理
  1. 最初だけ「前回と今回の時刻を保存する変数に0を代入する(初期化)」
  2. 無線で数値を受信したとき、受信したパケットの時刻を変数に代入する
  3. 「今回の時刻 – 前回の時刻」の結果を表示する
  4. 前回の時刻を今回の時刻で書き換える

上記のとおりです。これをプログラムにすると次のとおりです。

▼送信側の処理

▼受信側の処理

前回の時刻と今回の時刻の関係がややこしいですよね?図にすると次のとおりです。

表示が終わったら今回の時刻を「時刻(前回)」変数に入れることで差を計算できるようにしています。

▼エディター※実行結果は▶ボタンを押してから確認してみてください。

ボタンAを同じタイミングで何回も押すと表示される時間が近い値になるはずです。

シリアル番号を使うプログラム例 ~通信相手を選択~

シリアル番号を使う例として特定の相手からのメッセージのみ表示するプログラムを作ります。

プログラムの考え方としては次のとおりです。

▼送信側の処理
  1. 最初だけ「シリアル番号の送信の有無を設定(送信する)」
  2. ボタンAが押されたとき「無線で文字列を送信」
▼受信側の処理
  • 1.無線で文字列を受信したとき、受信したい相手のシリアル番号と受信したパケットのシリアル番号が一致するか判定する
  • 2-1.一致する場合:受信した文字列と♡マークを表示する
  • 2-2.一致しない場合:×マークを表示する

上記のとおりです。これをプログラムにすると次のとおりです。

▼送信側の処理

▼受信側の処理

このプログラムは、事前に相手のシリアル番号を知っておく必要があります。

「受信したパケットのシリアル番号」ブロックなどを使ってから調べて、あらかじめプログラムに書いておく必要があります。

なので、あまり実用性がないプログラムです…

▼エディター※実行結果は▶ボタンを押してから確認してみてください。

まとめ

本記事のおさらいです。

  • メッセージと一緒に「信号強度、時刻、シリアル番号」も送信される
  • 信号強度はmicro:bit同士が近づくと強くなり、離れると弱くなる
  • 時刻はmicro:bitの電源をONにしてから送信するまでの時間
  • シリアル番号はmicro:bit1つ1つに割り当てられた番号

上記のとおりです。

次は「micro:bit同士で無線通信する方法③」です。

micro:bit講座一覧へ戻る

タイトルとURLをコピーしました