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

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

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

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

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

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

スポンサーリンク




スポンサーリンク

インストール

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

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

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

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

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

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

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

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

プログラム

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

node.jsでBLE通信におけるCentralの役割をするサンプルプログラム. Contribute to Momijinn/SampleNodejsBleCentral development by creating an account on GitHub.

起動方法

解説

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

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

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

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

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

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

Blenano2をble通信のPeripheralとして使うサンプルプログラム. Contribute to Momijinn/mySimplePeriferalBlenano development by creating an account on GitHub.

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

スポンサーリンク







フォローする

コメント

  1. unipolar より:

    NodeBleConnection.jsのプログラムのソースコードを見せてもらえないでしょうか?

  2. unipo より:

    1秒おきに”WRITING TEST”という文字列を送信するペリフェラルの機器を実装し、raspberrypiでデータを受信しようとしているのですが何も受け取ることが出来ません。

    BLE機器とラズパイとの接続は成功し、service,characteristicへのアクセスは成功していると思うのですが出来ないです。

    何か心当たりはないでしょうか?

    • miyakawa より:

      はじめにCharacteristicsにアクセスしているかもう一度確認してください
      上記のプログラムではConsole.logにて接続ができているかを出力しています
      Characteristicsにアクセスできていると、「find!」「connect」「notify」と出力されます

      その他、bleで文字列を送信するには一度アスキーコード等の進数に変換する必要があります
      文字列のままで送信することができません

      文字列を整数列にしてラズパイへ送信してみてください

  3. unipo より:

    miyakawaさん返信ありがとうございます。
    Characteristicsにアクセスし、「connect」と表示されていますが、「notify」の表示は行われていません。

    試しにAndroidのアプリケーションを作成し、serviceとcharacteristicsにアクセスしたところ、notifyの通知は定期的に来ていました。

    byte型でデータを送信していますが、node.jsとandroidでは違う点が何かあるのでしょうか?

    • miyakawa より:

      unipo様
      返事が遅くなり申し訳ありません。
      node、androidともにBLE通信をやったことがありますが、特に相違点はありません。
      どちらも同じように「デバイスを検索・接続→サービスの接続→Characteristicsの接続」となります

      nodeにて「notify」が出力されていないということはCharacteristicsのUUIDが間違っている可能性があります。
      今一度確認してみてください。