1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node-RED MCUのBluetoothでmicro:bitに接続する

Last updated at Posted at 2025-12-23

はじめに

 Node-RED MCUでBluetoothが使えるようになったので、まずはシンプルに試してみた内容を紹介します。Node-RED MCUの情報はこちら:

Bluetoothノードのインストール

フローエディタ上ではBluetoothを扱うノードとして下記を使用しますので、パレットの管理からインストールしておきます。
・node-red-contrib-noble-bluetooth

このノードでフローを作成してNode-RED MCUでBuildすることによって、MCUで動作するコードに変換されます。

ターゲット

 今回試すのは、教育用のマイコンデバイスとして普及しているBBC micro:bitと接続して、micro:bitに搭載された温度センサーの値をNode-RED MCUで取得してみたいと思います。他にもいろいろな応用ができると思いますので試してみてください。

Target.jpg

おもな手順

  1. micro:bit側には、Microsoft MakeCode for microbitを使用してBluetoothを有効化して、temperatureサービスを開始するように設定します。その際に、Connect/Disconnectの際にLED表示とサウンド再生を行うようにもします。
  2. Bluetoothの情報を取得するユーティリティを使用して、micro:bitのボード固有の識別子とTemperature ServiceのUUIDを調べます。
    私の場合はiPhoneアプリの”nRF Connect”が使えました。
  3. Node-REDとNode-RED MCUでxiao ESP32S3側のフローを作成して動かします。
1. micro:bit側でTemperature Serviceを開始する

 Microsoft MakeCode for microbitを使ってmicro:bit側の設定を行います。micro:bitの場合、初期状態ではBluetoothが有効になっておらず、代わりに”Radio”モジュールが有効になっています。両者は同時に利用することはできず、どちらかの選択になっています。Radioのほうは子供たちのプログラミングには使いやすい面もありますが、今回はこれをBluetoothに入れ替えて使います。

・パレットにRadioがある場合、Extensionsを押してBluetoothエクステンションをインストールします。Radioを削除してBluetoothをインストールするか確認ダイアログが表示されます。エクステンションが入れ替わるとパレットにBluetoothが表示されます。

Radio-Bluetooth.jpg

・micro:bit側のブロックプログラム
 Temperature サービスを開始するため、on startにBluetooth内のtemperature serviceブロックを配置します。また、connectとdisconnectが分かりやすいように、Bluetooth内のon bluetooth connectedブロックと、on bluetooth disconnectブロックに適当なアイコン表示とサウンドを割り当てます。

microbitBlock.jpg

これでmicro:bit側の準備はOKですので、[Download]ボタンを押してボードに書き込んでおきます。

2. micro:bitのボード固有の識別子とTemperature ServiceのUUIDを調べる

 micro:bitでは各ボードを識別するための識別子が付けられており、複数のmicro:bitが動作している場所でも特定のボードにアクセスすることができます。また、先ほど有効化したTemperature Serviceに接続するためのUUIDを後述のMCU側のフローに設定する必要があるため、これらを調べる必要があります。

・nRF Connect(Nordic Semiconductor社)を使用する
 今回はiPhone版をインストールして調べてみました。

-Scannar画面を開き、Nameフィルターに「BBC microbit」をセットすると、先ほど準備したmicro:bitが表示されているはずです。「BBC microbit」に続く5文字の識別子がここで確認できるので控えておきます。(下記の例では[tevev]がそれにあたります。)

-リストのデバイスをクリックすると開きますが、connectしていないので情報は取得できていません。

-[Connect]ボタンを押して接続すると、Attribute Tableの内容を確認できるようになります。ここで目的のサービスを探します。

Scanner.jpg

(注)もし複数のmicro:bitがあるとリストには全部表示されるため、
   Connectしてmicro:bit側の反応を見ることで識別できます。

-Attribute Table をスクロールしてTemperature Serviceの内容を見つけます。ここのアイテム:micro:bit TemperatureのUUIDを控えておきます。このUUIDはあとでノードにセットします。

UUID.jpg

これでフローに設定する情報を取得できました。

3.Node-RED MCUのフローを作成する

 ようやくフローの作成です。今回はシンプルに温度データを確認する下記のようなフローを作ります。

Flow.jpg

・フローの構成
 下段のchangeノード「set flow.identifier」では、接続するmicro:bitの識別子をflowコンテキストに格納し、「BLE scanner」ノードに続くファンクションノード
「search」で使用しています。識別子を設定しやすくするためにこの構成を取りましたが、「search」内で直接設定しても構いません。

 フロー起動時にインジェクトノード「Start Scan」からmsgが出て「BLE scanner」をトリガします。micro:bitではadvertiseしているサービスはないのでServicesは空欄とし、continuous scanningのチェックボックスだけONにしています。

BLE_ScannerNode.jpg

これに続くファンクションノード「search」でターゲットのmicrobitが存在するか確認して、次の「BLE device」ノードに送ります。

const targetId = flow.get("identifier");
const name = (msg.name || "").toString();


if (!name.includes("BBC micro:bit")) {
    return null;
}
if (!name.includes(targetId)) {
    return null;
}


node.status({ fill: "green", shape: "dot", text: `Found: ${name}` });
msg = {
    topic: "connect",
    peripheral: msg.peripheral,
    name: name
};


return msg;

「BLE device」で接続を行い、接続が確認できたらmsgを次のノードに送ります。

device-switch.jpg

次に、「BLE in」ノードでは先ほど調べたmicro:bitのtemperatureサービスをサブスクライブする設定を行います。CharacteristicのフィールドにUUIDをセットします。

・ここで設定するUUIDは、PC上のNode-REDではハイフンなしで動作しますが
 Node-RED MCUで使用する場合はハイフン「あり」でセットします。

BLEin.jpg

基本の構成は以上ですが、Node-RED MCUでの「BLE in」ノードの動作はオリジナルとは異なり、出力が「ArrayBuffer」になっています。
ArrayBuffer.jpg

そのため、「BLE in」ノードの後段にファンクションノードを設けて、このArrayBufferをデコードします。

let buffer = new Uint8Array(msg.payload);
msg.payload = {
    "temperature" : buffer[0]
    } 
return msg;

これでmsg.payload.temperatureに温度データが取得できました。

Temp.jpg

接続が成功すると、各ノードにステータスが表示されます。

status.jpg

さいごに

 今回試したのは温度データを取得するシンプルなフローでしたが、MCU上のメモリの制約が厳しいのかxiao esp32c3では動作せず、xiao esp32s3を使用しました。
ハードウェア上の制約が多いMCU上ではなかなか厳しい面があるのを実感しました。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?