相変わらず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にアクセスし、通知や読み書きを受け取ります(または送信)をします
プログラム
論より先にプログラムを掲載
起動方法
$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書き込んでみてください
こんな感じで動くと思います