先日は、
にてワンボードマイコンやシングルボードコンピューターについて書きましたが、ワンボードマイコンでは、マイコン部分だけでなくパーツなどが付属した構成になっている物のカスタマイズをデバイス側で行う仕様になっているので、基本的に処理部分としての機能がメインになっています。その為、入出力の機能は電気工作の分野になるので、外部でそうしたパーツを用意して、データシートに準じて電気工作を粉う事になります。
この時に、ボタンやLEDなどの表示機材も外部で用意する必要があります。
BBC micro:bitでは、デバイスやセンサーなどがワンパッケージになっているので単体でも動く物を作れるのですが、複数の端末を用意するとmicro:bit同士でBluetoothを使った無線通信が行えるようになっています。
先日は、
のようにすることで、
のようにサーボとLEDを追加できるのですが、実際に動かすと、
のように無線で信号を送受信して動く物を作る事ができます。
同じようなコードを書いて実際に動かすと、
■ MakeCodeのテスト
のような感じの動きになります。
このように無線通信が使えるのですが、今回はその機能について書こうかなと思います。
無 線通信
無線通信では複数の端末を使う事になりますが、この場合、機材間での通信網を開く必要があります。Bluetoothの機器だとペアリングをして動かす事になりますが、micro;bitでは、通信するグループを合わせておく必要があります。MakeCodeでは、
のように 【 無線のグループを設定 】 のブロックで通信するグループの番号をあわえておく必要があります。
これは、オフカメラストロボでライティングをする場合とかでも同じですが、コマンダーで発行打をする場合に、グループで分けておくと必要なストロボだけ発光させる事ができるのですが、グループ分けをすると電波の送受信における誤動作が減ります。
micro:bitの場合も同様に、グループを分けておくと異なるグループの端末では送受信が出来なkなりますから、そう言った使い分けをする事が出来るようになります。
■ データでの使い分け
処理についてですが、データの種類でブロックが分かれており、
■ 数値
■ 文字
■ 変数
で送受信を使い分けることが出来るようになっています。送信については、
のように何かのイベントが発生した時に動いたり演算尾結果で実装するk十になりますが、このように何を送るのかを指定できます。
これが、送受信の時の 【 識別 】 として使用する事が出来るのですが、受信時には特定の変数が送信される仕様になっています。
受信をした際には、
のようになっていますが、この時の変数を使用して表示をしたり判断をする事が出来ます。
このように、
■ グループの番号
■ 送信時のデータの型
で送受信の可否を行えるようになっているので、細かな設定を行う事が出来るようになっています。
■ データの送受信をするプログラム
今回は、
のように乱数を使ったコードを書いていました。今回は最初だけ初期化を行い、永続的に基本の状態としてアイコンを表示するように指定をしてみました。
そして、ボタンに対して処理を入れるので、
のように送信時に文字列を送るようにして、受信時には、
のように受信した時の変数を表示するようにしました。
今回は、タッチセンサーを使って別の処理を行うので、
のような処理も入れてみました。送信側が、
のようになっており、無線で任意の数値を送っています。今回は、パルスを送るだけなので、数値は何でもいいのですが、これを別の端末で受信をします。受信側では、
のように同じ処理をしていますが、乱数で表示するパターンを選択する処理を送信側と受信側で行うような物になっています。
送信側では、
のようにロゴのタップで処理が発生するようになっており、乱数の生成後にパターンを選択しているのですが、乱数の判定後に
のように無線でデータを送っています。これが、送信時の値を参照しない信号なので、 【 単なるパルス 】 になります。
受信側では、
のように数値の受信で判定を行い、乱数を生成して、判定を行って表示をするような処理を実装しています。
これを実行してみると、
の状態から通信の処理を行うと、
のように端末が増え、Aボタンを押すと、
になり、Bの端を押すと、
のような感じで用意した文字列が表示されるのですが、ロゴをタッチすると、
のように表示された後に送信が行われ、
のように送信先の端末でも乱数の処理が行われて乱数の値に対応した物が表示されるようになっています。
この事例では、端末Aと端末Bに全く同じコードが入っており、その状態で送受信をした場合の処理だと対応が出来るのですが、
■ 端末A : トランスミッター
■ 端末B : レシーバー
のような使い方をするコードは書けません。例えば、イメージとしてはラジコンが該当しますが、ラジコンの場合、
■ 操作するコントローラー部分
■ 動作するアクチュエーター部分
に分けることができますが、この場合だと、2つの端末では行う事が異なりますから、GPIOの数が同じ場合だと、
■ 操作端末 : ボタンや可変抵抗部分に使用する
■ ラジコン本体 : 動作に関連した部分に使用する
事になります。と言う事は、二者の回路を比較すると全く異なる構造になるはずです。この場合でも通信は必要ですから、同じグループ内で管理する事になりますが、こうした構造はMakeCodeでは作れません。
MakeCodeの場合だと、同じ処理をする端末同士のテストはできるので、同じ処理を実装した端末が2台ある場合の送受信の処理のテストを行う事が出来るようになっています。
今回のコードでは、
■ グループの指定
をしていますが、その後に初期化を行い、
■ 型の違いによる判定
を行っています。今回は、文字列と数値で判定を行っていますが、変数での判定もできるので、変数の宣言をした後に、その値の変化によってパルスを送信して、別の端末に変数の値を表示することもできます。
これも、以前、YouTubeに実際に動かしてみた動画をアップしているのですが、
■ 今回のプログラムの挙動
のような感じになります。
シ リアル通信
micro:bitは、PCと接続して使用できますが、micro:bitとPC間でも通信を行う事が出来ます。この時に行うのが、 【 シリアル通信 】 になります。
シリアル通信と言うと、マイコンと電子部品間の通信を行う時に使用するI2C通信もその一つになります。この呼び名ですが、
■ I2C通信の読み方
■ アイ・スクエアド・シー
■ アイ・ツー・シー
■ アイ・アイ・シー
などがありますが、このいずれかだとI2Cと言う事になります。シリアル通信には、
■ I2C通信
■ SPI通信
■ UART通信
などがあります。シリアル通信は1本のケーブルでデータを送信する物になりますから、パラレル通信で行うようなことをシリアル化をすると結構難しいコードになります。その為、配線が少ない代わりにプログラミングの難易度が上がるという特性があります。
シリアル通信とは別の通信方式にパラレル方式というのがありますが、これは複数のケーブルで個別に同時にデータを送れる仕様になっています。その為、プログラミングの難易度が低い代わりにケーブルの本数は増えてしまいます。その為、ケーブルまみれになるのでパラレル通信は回路が複雑になるものの、コードは簡単に欠けるという利点があります。
コンピューター間だと、この二者を選択できるのですが、電子部品だとパーツごとに通信方式がパラレルとシリアルのいずれかに指定されているので、パーツに合わせた通信方式を選択する事になります。
I2C通信では、
■ SCL : クロックを送る端子
■ SDL ; データを送る端子
を使用しますが、
■ マスター(親)
■ スレイブ(子)
が存在し、マスターのタイミングに合わせてスレイブが動く仕組みになっています。シリアル方式は複数ありますが、IC2通信では、1本のケーブルだけで通信できると言う利点があります。
■ micro:bitでのシリアル通信
マイコンとPCのシリアル通信はUSBで行えるのですが、micro:bitでシリアル通信をする時にはUSBを使います。
micro:bitを接続すると、通信ポートであるCOMポートが追加されるので、このポートの数を確認しておく必要がありますが、それを使うと、COMポートからの信号を取得してプロットするようなソフトを使ってデータを取る事ができます。
また、micro:bit v2とRaspberry PIをBlueToothで繋いでデータを取得することもできるので、コンパクトなシステムで有線と無線で通信をする事が出来るようになっています