[Enter]実行結果は下図の通りです。106)こちらも、誤差は+/-5ぐらいになった。LEDを光らせる機能を選び、点滅させせるコマンドを送ります。送れたら、本体裏にある指定した色のLEDが点滅します。正しくなかったら、青色のLEDが点滅します。「ランプ」の仕様に書かれているように、キャラUUID=10B20103-5B3B-4571-9508-CF3EFCD7BBAEを探し、プロパティが書き込み属性なので、サンプルにあるようにコマンドをバイナリで送ります。handleは実行時にふられます。順に、連続的な点灯・消灯、繰り返しは複数回、Operationは二つ、ランプを制御する時間は500ms、ランプの数は1、IDは1、REDは最大輝度、GREENは消灯、BLUEも消灯、制御期間は180ms、ランプの数は1、IDは1、REDは消灯、GREENは最大輝度、BLUEは消灯です。[Enter]実行結果は下図の通りです。★★★★★2.サンプルプログラム(toio_motor_1.py)の実行モータを動かします。二つあるモータを動かす機能だけでなく、速度、速度の変化などのパラメータも用意されています。responsをクリックすると、toio本体が同じ場所で回転し始めます。Disconnectで通信を切るまで続きます。[Enter]実行結果は下図の通りです。★★★★★ついでに応用問題で〜す。toio本体が前進、後退を2回繰り返します。最後にDisconnectで通信を切断します。★★★★★3.サンプルプログラム(toio_butukari.py)の実行toioには、外部の情報を知るには、読み取りセンサもしくはモーション(加速度)センサが利用できます。超音波などを利用して進行方向などの障害物を検知するセンサは搭載されていません。モーション・センサには、読み取ったデータに「衝突」という項目があります。ここでは、モータを駆動して前進し、壁にぶつかったら引き返すという動作を考えます。衝突するという現象は、いつも監視していなくてはなりません。二つの方法があります。RPi.GPIOライブラリを使ったとき、GPIOの設定したピンがLow->Highに変化すると、何かの処理を行う、というのは割り込み処理です。一つは、ポーリングという方法で、プログラムのループの中で、常にGPIOピンを監視するという方法です。ループが大きくなると、監視する間隔があくので、ピンの変化を見逃してしまうという欠点があります。ここではpigpioライブラリ(インストールされている)のソフトウェア割り込みを使います。呼び出す関数名)を記述これらを動かす前に、pigpiodというデーモンを動かしておきます。[Enter]●モーション・センサのインスタンスモーション・センサのプロパティは、readとnotifyなので、常にデータが更新されているので、読み出したら、それが最新データです。インスタンスを使ってセンサのvalueをリードできます。衝突の情報は3番目に書かれています。ぶつかると1で、そうでないときは0です。●プログラムメインのプログラムはcollision()関数にしました。モーション・センサのvalueを読み出し、衝突の項目が1だったら、イベントの「2」を発生させます。イベントの「2」が発生すると、callback_kaihi(event,tick)関数が呼び出されます。ここでは、モータを逆向きに回転させ、ぶつかった壁から退避します。それだけなので、退避中に別の壁にぶつかると動けなくなります。SensorInformation.read()は、2回実行しています。これは、読み出しでエラーがおきたからです。2回目は必ず成功します。最初の読み出しの前にtime.sleep(0.01)を置くと、1回目の読み出しでもエラーが出なくなりました。[Enter]実行結果は下図の通りです。★★★★★4.サンプルプログラム(toio_yomitori.py)の実行toio本体は小さく、距離センサは備えていませんが、底面に光学センサがあり、読み取りセンサという名称がついています。この装置で遊ぶときのキーになっているように見えます。受け取った情報を、以下に示す構成のデータで取得できます。読み取り用のプログラムを作り、床に線を描いた付属のシートを貼って動作を確認します。最初の情報の種類以外は2バイトのデータです。角度は水平面で、X軸方向に対してと説明されています。IDが読み出されます。この用紙を使うと、座標値は、仕様から次のようになります。座標98142402358角度は0から360度です。その場で回転したときのデータです。図は、それらを整理した座標です。「キューブの中心」と「読み取りセンサ」の座標は5~8くらいの差が出ます。角度はほとんど同じ値になります。つねに、座標を管理しておけば、壁にぶつかったり、シートからはみ出したりせずにすみます。[Enter]実行結果は下図の通りです。Bluetoothを内蔵しているので、Bluetoothでmicro:bitと接続してみる。micro:bitでScratchでプログラム作成Bluetoothのサービス開始だけをしておく。起動し、「拡張機能」をクリックします。https://makecode.microbit.org2.下図の画面が表示されるので、「bluetooth」をクリックします。3.下図の画面が表示されますので、「一部の拡張機能を削除してbluetoothを追加する」をクリックします。4.下図の画面が表示されます。「bluetooth」ブロックが追加されます。「bluetooth」に関するブロックを組み上げて行きます。5画面右上の「その他」をクリックします。Bluetooth.を有効にして、ファイル名を「bluetooth_1.hex」という名前にして、「保存」をクリックします。9.先程作成した「bluetooth_1.hex」ファイルをコピーします。「K」の文字が表示されます。micro:bitを、Bluetoothで接続するために、画面右下の「bluetooth」マークをクリックします。[zituz]」を選択し、「Pair」をクリックします。!」の文字が右から左に流れながら表示されます。micro:bitの、Bluetoothを切断するために、画面右下の「bluetooth」マークをクリックします。15.「disconnect」をクリックします。「X」の文字が表示されます。Pythonでプログラミングするための準備PythonからBluetoothを使うための「bluepy」モジュールをインストールします。「mu」でプログラム記述サンプルプログラムを作成して見る。いうファイル名にします。[Enter]実行結果は下図の通りです。部分は数字とアルファベット小文字の2文字です。これでアドレスが分かりました。★★★★★2.UUIDを調べるアドレスが分かったので、そこへ接続してUUIDを調べます。「mu」でプログラム記述サンプルプログラムを作成して見る。いうファイル名にします。部分は数字とアルファベット小文字の2文字です。(例)d7:a6:5f:ce:bf:34実行結果は下図の通りです。※実行結果は、実際に動きました!(感動)ここまでで、デバイスについて以下の情報が分かった。使って、デバイスを特定し、接続することができる。特性UUIDは、デバイスが提供するサービスについての情報のキーになる。使って、利用したい特性を指定し、コマンドを送受信させる。LEDにアスキー文字をスクロールさせて表示させるサービスがある。39′′と表示させる。LEDに文字列を表示させるサービスの特性UUIDを調べると、「E95D93EE251D470AA062FA1922DFA9A8」だと分かる。「0x003a」であることが分かる。命令を送ることができる。「mu」でプログラム記述サンプルプログラムを作成して見る。いうファイル名にします。39′′と表示されたBluetoothを使ってmicro:bitをコントロール出来るようになった。表示するLEDのサービスUUIDから、TEXT出力用UUIDを取得して、そこに出力することでLEDに表示が出来る。「E95DD93EE251D470AA062FA1922DFA9A8」だと分かる。「mu」でプログラム記述サンプルプログラムを作成して見る。いうファイル名にします。123456789′′と表示されたBluetoothを使ってmicro:bitをコントロール出来るようになった。表示するLEDのサービスUUIDから、TEXT出力用UUIDを取得して、そこに出力することでLEDに表示が出来る。「E95DD93EE251D470AA062FA1922DFA9A8」だと分かる。「mu」でプログラム記述サンプルプログラムを作成して見る。いうファイル名にします。9876′′と表示されたBlueToothを使ってmicro:bitをコントロール出来るようになった。