概要
micro:bitで動き、デバッグ用の出力をBluetoothで吐き出すソフトをC++で開発しようとしたところ、Bluetooth通信(特にペアリング不要の通信の場合)の疎通がなかなかできず結構ハマりました。
そこで、備忘録かねてやり方を書きます。
(microbit v2.2を使用していますが、たぶんv2でも同様にできるはずです)
できたこと
- micro:bitからbluetoothを使ってメッセージを出力し、ペアリング操作をせずスマホで受信するようにする
環境
以下の環境を使用しました。
・Windows 11
・micro:bit v2.2
・スマホ(Xperia 10 III lite)
なお、今回はスマホからbluetooth接続・シリアルメッセージ送受信を行うので、以下のアプリをスマホにインストールしてください
https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=en&gl=US
※Android向けアプリです。iPhoneも同様のものがあると思いますが確認していません
開発環境構築
意外と書くことがあったので、別の記事として書きました
Windows上にC++でのmicro:bit v2.2開発環境を作る
Bluetooth通信
プログラム準備
サンプルのリポジトリでBLEのサンプルアプリが提供されているのでこれを利用します。
[cloneしたリポジトリのルート]/source/main.cpp
を以下のように編集します。
#include "MicroBit.h"
#include "Tests.h" //追加
MicroBit uBit;
int
main()
{
uBit.init();
ble_test(); //追加
// 以下はコメントアウト
//while(1)
// uBit.display.scroll("HELLO WORLD!");
}
codal.json
編集
- cloneしたリポジトリのルートにある
codal.json
を削除もしくはリネームします - 同じ階層にある
codal.ble.json
をコピーし、codal.json
にリネームします -
codal.json
を以下のように編集します
{
"target": {
"name": "codal-microbit-v2",
"url": "https://github.com/lancaster-university/codal-microbit-v2",
"branch": "master",
"type": "git",
"test_ignore": true,
"dev": true
},
"config": {
"SOFTDEVICE_PRESENT": 1,
"DEVICE_BLE": 1,
"MICROBIT_BLE_ENABLED": 1,
"MICROBIT_BLE_PAIRING_MODE": 0,
"MICROBIT_BLE_DFU_SERVICE": 1,
"MICROBIT_BLE_WHITELIST": 0,
"MICROBIT_BLE_DEVICE_INFORMATION_SERVICE": 1,
"MICROBIT_BLE_EVENT_SERVICE": 1,
"MICROBIT_BLE_PARTIAL_FLASHING": 0,
"MICROBIT_BLE_SECURITY_LEVEL": "SECURITY_MODE_ENCRYPTION_OPEN_LINK"
}
}
元のcodal.ble.json
からの変更点は以下の通りです。
-
MICROBIT_BLE_PAIRING_MODE
を1から0に変更します -
MICROBIT_BLE_SECURITY_LEVEL
を"SECURITY_MODE_ENCRYPTION_NO_MITM"
から"SECURITY_MODE_ENCRYPTION_OPEN_LINK"
に変更します -
"MICROBIT_BLE_WHITELIST": 0,
を追加します
おそらくキモは三番目で、これを設定しないと接続できない+サンプルプログラムに説明が記載されていない状態のようです。
ここまでできたら、あとはビルドしてバイナリを書き込めば、micro:bit側の準備は完了です
携帯から接続
- micro:bitの電源を入れます
- スマホのbluetooth機能を有効にし、Serial Bluetooth Terminalアプリを立ち上げます
- 左上の
≡
メニュー >Devices
>Bluetooth LE
>SCAN
(右上にあります)で表示されるBBC micro:bit
を押して接続します - 正常に接続が行われたら、スマホ側には
Connected
のメッセージが、micro:bitにはC
の文字が表示されるはずです - スマホからメッセージを送信すると、以下の画像のようにmicro:bitがエコーバックします。正しくエコーバックされていたら、正常にmicro:bitースマホ間のbluetooth シリアル通信ができている状態です。