Back to tech

node.jsでBLE通信におけるCentralの役割をするプログラム

1 min read
Table of Contents

相変わらずBLE通信の勉強をしています

ESP32やBleanno2等々でPeripheralを実装してきました

接続される側(Peripheral)はできたけど接続する側(Central)はどうするの?ということでnodejsでプログラムをつくりました

色々調べるとnodeで作るのがベターらしいのでnodejsで組んでみました

せっかくなのでRaspberrypi3でできるかの確認もしてみました

インストール

※nodeはすでにインストールしている状態で話をすすめます

Terminalで以下のコマンドを打つ

$sudo apt-get update
$sudo apt-get upgrade -y
$sudo reboot
$sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
$sudo apt-get install git
$npm init
$npm install --save-dev noble

nobleというライブラリを使ってCentralを実現します

簡単な接続までのアルゴリズム

個人的な解釈ですが、BLEの通信のCentralは以下のようにしてつながると思います

赤色っぽい色で示されているところがすごーく重要です

BLEは単純にIPを検索して接続すれば良いというものではありません

デバイスを検索して、そのデバイスが持っているServiceにアクセスし、Serviceが持っているCharacteristicにアクセスし、通知や読み書きを受け取ります(または送信)をします

BLEプログラミング.jpg

プログラム

論より先にプログラムを掲載

GitHub - Momijinn/SampleNodejsBleCentral: node.jsでBLE通信におけるCentralの役割をするサンプルプログラム
github.com
image

起動方法

$sudo node NodeBleConnection.js

解説

基本的に下記のところを書き換えればBLE通信ができると思います

周辺のBLE機器をスキャンして検索したいデバイス名があったら接続をします

その後、そのデバイスが持っているServiceのUUIDを検索し見つけたら接続

そしてServiceの中に接続したCharacteristicがあればそれを受け取るようにしています

var DEVICE_NAME = "MyBlePeripheral"; //検索したいデバイス名
var SERVICE_UUID = "713d0000503e4c75ba943148f18d941e"; //検索したいサービスのUUID
var SERVICE_CHARACTERISTIC_UUID = "713d0001503e4c75ba943148f18d941e"; //検索したいキャラクタスタティックのUUID

Notifyを受け取るときに重要な一行があり下記のものがないとNotifyを受け取ることができません

characteristics[0].subscribe(function(error) {
};

ほんとに動くかどうかを試したい場合はBlenano2を購入し、以下のGitHubに上がっているサンプルのPeripheralプログラムをBlenano2書き込んでみてください

GitHub - Momijinn/mySimplePeriferalBlenano: Blenano2をble通信のPeripheralとして使うサンプルプログラム
github.com
image

こんな感じで動くと思います

nodeble.png