イギリスBBCがIT教育のために開発した話題のマイコンボード「micro:bit(マイクロビット)」。micro:bitには独自の無線機能が搭載されており、特別な設定をしなくてもすぐに無線通信を行うことができます。今回はこの無線機能を使って、じゃんけんプログラムを作ってみたいと思います。
micro:bitの無線通信
micro:bit(マイクロビット)には、Bluetooth LEと、CPUに組み込まれた「無線機能」と呼ばれる2つの無線通信機能があります。
Bluetooth LEは音楽再生などで幅広く使われている無線通信技術「Bluetooth」の一部で、「LE」=「Low Energy」、つまり低消費電力での通信が可能な規格です。パソコンやスマートフォンなど多くの端末と無線通信を行うことができ、データ転送や機器の制御などを行うことができます。
一方、公式サイトでは単に「無線機能」と呼ばれているmicro:bit独自の無線機能は、micro:bitの頭脳にあたるCPU(中央演算処理装置)の機能の一つとして備えられており、Bluetoothのような汎用性はありませんが、micro:bit同士の通信が非常に簡単にできるというメリットがあります。
今回はこの「無線機能」を使って、複数台でも手軽に楽しめるじゃんけんプログラムを作って動かしてみたいと思います。
“機能|micro:bit”.Micro:bit Educational Foundation.
https://microbit.org/ja/guide/features/#radio
無線機能を使ったじゃんけんプログラム
ではさっそく、micro:bitの「無線機能」を使ったじゃんけんプログラムを作成していきたいと思います。
まず、今回作成するプログラム全体のブロックエディタ上のイメージを下図に示します。
上図の中に記載しているとおり、処理としては
① 無線機能の初期設定
② じゃんけんを仕掛ける側の処理
③ じゃんけんを仕掛けられる側の処理
の3つに分けられます。
無線機能の初期設定
複数台のmicro:bitを連携させるために、最初に同じグループとして設定をします。
記述としては非常にシンプルですが、これだけで複数台での連携ができるのが、「無線機能」の大きなメリットです。
じゃんけんを仕掛ける側の処理
同じグループに属しているmicro:bitの中で、本体がゆさぶられたmicro:bitがじゃんけんを仕掛ける側になります。
じゃんけん自体の処理はオーソドックスに、ランダムに発生させた数値に対応させたグー、チョキ、パーに見立てた図柄をLED画面に表示させる、というものです。
細かいですが、複数回じゃんけんを繰り返した際、同じ手が出た時に動作していないように見えてしまうため、いったん表示を消してから手を出す(=グー、チョキ、パーに対応させたLEDを点灯させる)流れにしています。
じゃんけんを仕掛けられる側の処理
同じグループに属している他のmicro:bitからじゃんけんを仕掛けられたら、無線機能を介して仕掛けられたことを察知し、自身もグー、チョキ、パーに見立てた図柄のLEDを点灯させます。
じゃんけん自体の処理は仕掛ける側と同じです。
プログラムの作成
MakeCodeのホーム画面(https://makecode.microbit.org/#lang=ja)で「新しいプロジェクト」をクリックして、ブロックエディタを表示します。
※ブロックエディタの使用については「micro:bitで始めるプログラミング入門[基本操作〜カップラーメン専用タイマー制作]」記事も参照してください。
“micro:bitで始めるプログラミング入門[基本操作〜カップラーメン専用タイマー制作]”
https://www.pc-koubou.jp/magazine/10208
まず、上記「無線機能」の初期設定部分から作成します。
「最初だけ」ブロックに「無線」メニュー内下部にある「無線のグループを設定」ブロック(下図上側)をつなぎます(下図下側)。
同じプログラムをインストールしたmicro:bitが最初にこの処理を実行することで、同じ「1」というグループに属する形になり、グループ内での無線通信機能が使えるようになります。
続いてじゃんけんを仕掛ける側の処理です。
ゆさぶることでじゃんけんを仕掛けますので、まず「入力」メニューから「ゆさぶられたとき」ブロックをエディタ上にドラッグ&ドロップします(下図)。
この「ゆさぶられた」ブロックの中に、じゃんけんの手(グー、チョキ、パー)を出す処理を入れていきます。
先に説明したとおり、繰り返した際にあらためてじゃんけん動作に入ったことがわかるよう、いったん表示を消す処理を最初に入れます。
「基本」メニュー内にある「表示を消す(「基本>more」内)」「一時停止(ミリ秒)」を下図のように「ゆさぶられた」ブロック内につなぎます。
「一時停止(ミリ秒)」の時間は「200(0.2秒)」に設定しておきます。
続いて、グー、チョキ、パーを割り当てる数字を設定します。
変数」メニューで「変数を追加する…」から「グー、チョキ、パー」という名前の変数を作成し、追加された「変数 グー、チョキ、パー▼ を 0にする」ブロックをドラッグドロップして先ほどの「一時停止(ミリ秒)」ブロックにつなぎます。
右側の「0」に「計算」メニューから「0から10までの乱数」ブロックをドラッグ&ドロップしてはめ込み、数値を「0から2までの乱数」に変更します(下図)。
実際に「グー、チョキ、パー」を表示する処理は3分割になるので、「論理」メニューから「もし〜でなければもし〜でなければ」ブロックを追加し、
・「グー、チョキ、パー」に格納された乱数が「0」なら「グー」
・「グー、チョキ、パー」に格納された乱数が「1」なら「パー」
・「グー、チョキ、パー」に格納された乱数が上記以外なら「チョキ」
となるように、それぞれ設定します(下図)。
じゃんけんを仕掛ける側最後の処理として、出したじゃんけんの手を無線で送る処理を「無線」メニュー一番上にある「無線で数値を送信」ブロックを使い、値に変数「グー、チョキ、パー」ブロックを「もし〜でなければもし〜でなければ」ブロックのすぐ下に追加します(下図)。
続いて、じゃんけんを仕掛けられた側の処理を設定します。
「無線」メニューにある「無線で受信したとき」ブロックをドラッグ&ドロップで配置し、その中にじゃんけんを仕掛ける側と同じように*ブロックを複製しながらつないでいきます(下図)。
*仕掛けられた側には「無線で数値を送信」は不要です
以上でプログラムの作成は完了です。
実際に動かしてみる
プログラムが完成したら、画面左下の「ダウンロード」ボタンからプログラムファイル(.hex形式)をダウンロードし、じゃんけんに参加させたいmicro:bitに同じプログラムをコピーします。
※下図は2台ですが、2台でなくてもかまいません。
コピーしたmicro:bitを並べて、じゃんけんを仕掛ける側のmicro:bitを振ってみます。
他のmicro:bitに「グー、チョキ、パー」に見立てたLEDが点灯すれば、動作成功です。
実際の動作の様子は下記から動画でご覧ください。
まとめ
今回は「無線機能」というmicro:bit独自の通信方法で非常に簡単に複数台のmicro:bitを連携させることができました。
他にもたくさんmicro:bitを並べて大きなディスプレイのような魅せ方をしたり、使い方は簡単ですが様々に活用することができそうです。
別の機会にもうひとつの無線通信機能である「Bluetooth LE」を使った通信方法についてもご紹介したいと思います。
石郷祐介
大学卒業後、公設研究機関勤務を経て、「情報科学芸術大学院大学[IAMAS]」に入学。
専門学校講師を経て、企業の研究開発をコンセプトから開発まで支援する「合同会社4D Pocket」代表、エンジニアを養成するフリースクール「一般社団法人HOPTER TECH SCHOOL」代表理事、「名古屋文理大学」及び「名古屋造形大学」非常勤講師。