Giter VIP home page Giter VIP logo

blegattdummysensor's Introduction

BleGATTDummySensor

M5Stack に書き込むと GATT のサーバーとして動作し、クライアントが接続してきたら一定時間ごとに Notify するだけのプログラム (同時に1クライントまで)

あるセンサの動作を模すために作ったので Sensor という名前

Spec

M5Stack GRAY を使ったが別のモデルでも大丈夫

  1. ソースコードにハードコードされた UUID にしたがって Service およびそれに紐づく Characteristic を Advertise する

  2. クライアントからの接続要求に応答して Advertise を中止し、一定時間ごとに Notification を送る

  3. クライアントが切断するまで2を行い、切断後は Advertise を再開して1に戻る

Notification に載っかってクライアントに送信されるデータは整数、だんだん増える

LCD に何も表示されないのは仕様

Bug?

たまに自分で追加したサービスが Secondary Service になってしまって Primary Service にしかアクセスできない仕様の WebBluetoothAPI から触れなくなる

使用しているライブラリの仕様なのか私の書き方が悪いのかは不明

パソコン再起動したり OS の Bluetooth 機能をオンオフしたり、なんやかんやしたら直る(かもしれない)

ここはよく分かっていないのだが他の BLE デバイスのパケットを見たりサンプルコードを読んだりした限り、このプログラムが Advertise するデータは Service のリストは載っているものの、ほぼ空らしい

そのため、 Advertise されたデータを読んで Service の有無等を判断して接続先を決定するようなクライアントだとうまく動作しない可能性がある

後述のスマホアプリではサービス名が Unknown と表示されるものの いちおう Notification を受信することはできた

Build & Upload

VS Code の拡張機能で platformio を使うと吉

画面下部のツールバーに左の方にある右矢印アイコンをクリックするとビルドして M5Stack にアップロードできる

詳しくは公式ドキュメントを参照されたし

なおplatformio cli がインストールされていてパスが通っているならこれでも行ける

# Build project
pio run

# Upload firmware
pio run --target upload

# Clean build files
pio run --target clean

📝 VS Code の拡張機能、PlatformIO IDE for VSCode (platformio.platformio-ide) を使っていると pio コマンドにパスが通っていないかもしれないが実体は ~/.platformio/penv/bin にあるはずなので直接叩くなりここをパスに追加するなりすればよい

Debug

View log through serial port

デバッグするときは ~/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/qspi_qspi/include/sdkconfig.h の350行目あたりで定義されているCONFIG_LOG_DEFAULT_LEVEL の値を上げて詳細を出力させるようにするとデバッグが捗る

// これを
define CONFIG_LOG_DEFAULT_LEVEL 1
// こうする
define CONFIG_LOG_DEFAULT_LEVEL 5

またこれに加えて以下のオプションも忘れずにコンパイラに渡す(platformio を使う分には platform.ini から自動的に読み込まれる)

-DCORE_DEBUG_LEVEL=4 # 4か5でないと詳細が出ない

上の手順を踏むことで吐き出されるようになるログは platformio のシリアルモニターを使って見ることができる

VS Codeなら画面下部のツールバーの左の方にあるコンセントマークをクリックする

cliは次の通り

pio device monitor -b 115200

ここに関しては一般的なシリアル通信なので通信速度とポートさえ正しく設定すれば Arduino IDE 等のツールでも同じことができる

Other tools for debug

他にも自作のクライアントプログラムや WebBluetoothAPI だとうまく通信できなかったがスマホアプリではできることもあったので、おかしいなと思ったら一度スマホアプリで様子を見るのもアリ

私は nRF Connect を使った

あるいはパソコンをクライアントにしているなら Wireshark で Bluetooth アダプタがやり取りしている通信内容を眺めるのも手

blegattdummysensor's People

Contributors

h-takeyeah avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.