LoginSignup
2
2

More than 1 year has passed since last update.

C++でmicro:bit (v2.2) にbluetooth UART通信をペアリングなしでする

Last updated at Posted at 2022-04-23

概要

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 シリアル通信ができている状態です。Screenshot_20220423-180533.png
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2