LoginSignup
6
4

More than 1 year has passed since last update.

micro:bit で標準的な BLE 動作するテストプログラム

Last updated at Posted at 2021-05-01

micro:bit では無線を使ったプログラムを作成できます。

  • micro:bit オリジナルの 2.4GHz 帯プロトコル
  • Bluetooth プロトコル

使いやすいのは micro:bit Radio プロトコルですが、ここでは BLE デバイスとして micro:bit を使う実験をします。

cf., micro:bit Radio プロトコル

今回の実験には使用しませんが、オリジナルプロトコルについても付記しておきます。

オリジナルプロトコルについての詳細はこちら
https://lancaster-university.github.io/microbit-docs/ubit/radio/
オリジナルプロトコルは micro:bit Radio プロトコルと呼ばれていますが、正式な用語定義やプロトコル定義は見つかりませんでした。
micro:bit に搭載されている nRF52822 チップの開発元である Nordic 社独自の「Gazell」という2.4GHzプロトコルに関連しているらしいです。
https://devzone.nordicsemi.com/f/nordic-q-a/41770/how-can-i-make-nrf52832-talk-to-microbit-by-radio-gazell

Bluetooth プロトコルでの実験

ここでは一般的な BLE と同じように使用する方法を示します。
micro:bit に搭載されている温度センサーを、スマホなどで取得できるようにします。

環境

  • micro:bit v1.5
  • Ubuntu 20.04 LTS
  • Android 10 ( moto g(8) power
  • Makecode 開発環境

ハードウェア

  • micro:bit を USB ケーブルで PCに接続します。
  • その他の工作は今回の実験では行いません。

ソフトウェア

Nordic の 「nRF Connect」を使用します。

スマホアプリおよび Desktop アプリとして提供されており、Desktop アプリは WindowsやMac、Linux、で使えます。しかしながら Desktop アプリは利用準備に手間がかかりますので、今回は Android で動作する「nRF Connect」を使用します。

なお、 iOS 版については今回は動作確認はしていません。
cf., iOS 版は以下のように開発されているようです。
「NordicSemiconductor / IOS-nRF-Connect」
https://github.com/NordicSemiconductor/IOS-nRF-Connect

BLEを使わずに micro:bit の動作を確認

にアクセスします。
image.png

「新しいプロジェクト」で「TEST1」などの名前を付けてプログラムを以下のように作ります。

image.png

左下のアイコンからダウンロードします。

image.png

image.png

「Hello!」と表示されます。

BLEプログラムを作る

「硬度なブロック」-「拡張機能」

image.png

「bluetooth」
image.png

「一部の拡張機能を削除してbluetoothを追加する」
image.png

Bluetoothブロックが増えます
image.png

micro:bit は接続のための方法を3種類備えています。

  • ペアリングなし接続
  • パスキーペアリング経由の接続
  • Just Worksペアリング経由の接続

ON時にアドバタイズを行ったうえで、ペアリング動作無し接続で試すために、
右上の歯車アイコン→「プロジェクトの設定」から、設定を変更してください。

image.png

以下のように配置します

image.png

「Bluetooth 温度計サービス」を追加するだけで、温度の送信に対応した機能が追加されます。

Android 版の nRF Connect を使用する

「nrf connect 」で検索、インストールします。

Screenshot_20210501-165641.png

実行します。

Screenshot_20210501-165618.png

BBC micro bit を選択します。

Screenshot_20210501-170559.png

micro:bit Temperature Service の下にいくつかキャラクタリスティックが出ています。micro:bit Temperature の横にある連続受信のアイコン(下矢印が3つ重なっているヤツ)を選択します

Screenshot_20210501-170735.png

温度が表示されるようになります。

Screenshot_20210501-170753.png

この温度表示機能は
TEMPERATURE SERVICE
として

E95D6100251D470AA062FA1922DFA9A8

として128ビットの ServiceUUID で定義、

また
TEMPERATURE SERVICE - CHARACTERISTICS

として

E95D9250251D470AA062FA1922DFA9A8

として128ビットの CharacteristicsUUID での定義が
「2021/5/2Bluetooth Developer Studio Level 3 Profile Report」
https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html
によってなされています。

Bluetooth の 温度センサといえば 16ビットのUUID で定義されている 「0x0543 Temperature Sensor」
https://specificationrefs.bluetooth.com/assigned-values/Appearance%20Values.pdf
ですが、 今回使用したものは micro:bit の専用の ServiceUUID/CharacteristicsUUID となっているようです。

さて、この Temperature Service はオンボードの温度センサの値となっていて、そのままでは簡単に自由なデータを送受信はできないです。

例えば、外部にセンサーをつなげてそのセンサーの値を温度として送るときにはどうしたらいいでしょうか?

Bluetooth UART サービス

Bluetooth の 「その他」のアイコン中に Bluetooth UART サービスがあります。

image.png

これを使って、任意の値を送ることができます。

UART でテスト

Bluetooth UART サービスに先立ち、一般的な UART通信をつかって、USBで接続しているパソコンに任意の値を送ってみます。

先程のプログラムを以下に変更します。

image.png

PC側でシリアル通信ソフトを起動して、数字が来ていることを確認してみます。ここでは Arduino 開発環境のシリアルモニターで確認してみました。

image.png

出力が確認できたら、これと同じものを Bluetooth で取得するようにしてみましょう。

Bluetooth UART でデータを受けてみる

以下のようにプログラムを書き換えます。

image.png

nRF Connect で見てみると、6E400001-B5A3-F393-E0A9-E50E24DCCA9E としてサービスUUIDが見えることがわかります。

Screenshot_20210502-182825.png

RX Characteritic を開けるとデータが更新されていきます。

Screenshot_20210502-190847.png

さて、サービス UUID やキャラクタリスティック UUID は、定義済
https://www.bluetooth.com/specifications/assigned-numbers/
のものと vendor-specific のものとがあります。
そして、この 6E400001-B5A3-F393-E0A9-E50E24DCCA9E の サービス UUID および 6E400002-B5A3-F393-E0A9-E50E24DCCA9E のキャラクタリスティック UUID は vendor-specific のものとなります。この値は、Nordic Semiconductor 社が独自に定めた Nordic UART Service あるいは NUS と言われているもの
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/include/bluetooth/services/nus.html
と一致します。

そして、先にも挙げた
「2021/5/2Bluetooth Developer Studio Level 3 Profile Report」
https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html
によると、「UART SERVICE」に「UUID6E400001B5A3F393E0A9E50E24DCCA9E」の値と共に

This is an implementation of Nordic Semicondutor's UART/Serial Port Emulation over Bluetooth low energy.

See https://developer.nordicsemi.com/nRF5_SDK/nRF51_SDK_v8.x.x/doc/8.0.0/s110/html/a00072.html for the original Nordic Semiconductor
documentation by way of background.

とあり、micro:bit Bluetooth UART サービスは Norduc UART Service と同じものと考えていいことになります。

さて現時点で USB 経由の UART と同じものが BLE に出ています。それを UART っぽくデータを受信するには、スマホ側で、 Nordic UART に対応したソフトをインストールします。本来であれば、 Nordic 謹製の 「nRF UART」 が望ましいのですが・・・
https://qiita.com/nanbuwks/items/7c448837eedf439b8ee9
Screenshot_20210502-182939.png

Screenshot_20210502-183002.png

Android 10に対応できていないらしく、デバイスのスキャンができませんでした。これでなくても Nordic UART に対応したアプリは多くあるのですが、以下の記事で使用しているアプリを代わりに使ってみました。

「【micro:bit 2019】micro:bit で BLE + UART による文字列の送受信(29記事目)」
https://qiita.com/youtoy/items/46502b9bd17fad16d427

Screenshot_20210502-183525.png
Serial Bluetooth Terminal をインストールしてみました。
Screenshot_20210502-184801.png
上記の画面で「Devices」を選び、「Bluetooth LE」を選び、画面上の「SCAN」を押します。
Screenshot_20210502-184112.png

BBC micro:bit を選びます
Screenshot_20210502-184808.png

Screenshot_20210502-184818.png

受信できました。

この、変数にセンサーの値を入れるようにしておくと、外部センサーなどの値を送信できることになります。

参考資料

「gatttool を使って NUS( Nordic UART Service ) とつなぐ実験」
https://qiita.com/nanbuwks/items/7c448837eedf439b8ee9

6
4
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
6
4