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?

More than 5 years have passed since last update.

nRF52832のBLE機能を用いてデータの取得をしてみた

Posted at

nRF52832のBLE機能を用いてデータの取得をしてみた

目次

はじめに

省電力でBLE通信を行うことができるnRF52832のHeart Rate MeasurementとBattery Levelを一定間隔毎に取得するサンプルコードを動かしてみた。文字量を減らして見やすくすることを最優先にしたので、情報不足になっている箇所もあるかとは思われます。

このサンプルコードはNordic公式が配布しているサンプルコードである。
今回はBLE通信でnRF52832からスマートフォンにデータを送るサンプルコードを実行した。

セットアップ

Nordic公式サイトを元に以下の作業は行われた。開発環境はOSX10.15.2、SDKはnRF5 SDK v13.0.0である。

サンプルコードの取得

  1. 本サイト nRF5_SDK_13.0.0_04a0bfd.zipをクリックし、ダウンロードする。
  2. . コンピュータ内で解凍する。

program a Softdeviceを行う

Nordic公式サイトに基づいて作業を行った。

まずは使用するマイコンのセットアップを行う必要がある。
今回はサイト記載のうち、他に
インストール等が必要ないMac OS環境下で一番簡単な方法?(GCC makefileを使う方法)で試した。

  1. nrfjprogを使えるようにするため、
    /nRF-Command-Line-Tools_ 10 _5 _0 _OSX/nrfjprogにパスを通す。(vi ~/.bash_profileでパス変数を編集後、source ~/.bash_profileで読み込み)

  2. make flash_softdeviceを実行して書き込みを行う。
    この作業からマイコンの接続が必要。お忘れなきよう。

書き込みを行う

  1. ターミナルを起動。
  2. cd /nRF5_SDK_13.0.0_04a0bfd/examples/ble_peripheral/ble_app_hrs/pca10040/s132/armgccを実行。
  3. make flashを実行。

スマホと接続する

以下作業では、iphone8にインストールされているアプリnRF Connectを使用する。

  1. Sccanerに表示されているNordic_HRMを選択。
    候補内にデバイス名が表示されない場合はアプリの再起動をかける。筆者も1回目では表示されなかった。
  2. Connectで接続する。
  3. 右にスワイプしてServicesを表示。
  4. Heart Rate MeasurementBattery Levelそれぞれの右下にある「三本の下矢印」マークを選択。
  5. Valueに値が表示される。Heart Rate Measurementは1秒おきに、Battery Levelは2秒おきに値が更新されることを確認する。
  6. サンプルコードは正常に作動した!!!(Heart Rate Measurementの更新周期が1秒より長い気がしなくもない…)

プログラムの確認

サンプルコード内の関数やイベントの役割等を解説する。
変更を加えたい場合は以下関数やイベントを参考にすると、探している箇所を見つけやすいかもしれない。つまりコードをいじらない場合は読み飛ばしてもらって構わない。

重要なイベント

ble _evt _dispatch

様々なイベントのトリガーとなる。これが個々のイベントを開始する。

pm _on _ble _evt 

peer_managerにイベントを伝達。

ble _hrs _on _ble _evt 

BLEスタックからheart_rateへのすべてのイベントを処理。

ble _bas _on _ble _evt 

BLEスタックからバッテリーサービスへのすべてのイベントを処理。

その他のイベント

ble _conn _params _on _ble _evt 

このモジュールに関するBLEスタックからのすべてのイベントを処理。

bsp _btn _ble _on _ble _evt 

このモジュールに関するBLEスタックからのすべてのイベントを処理。

ble _advertising _on _ble _evt 

Advertisingモジュールに関するBLEイベントを処理するには、モジュールのBLEスタックイベントディスパッチャからこの関数を呼び出す必要がある。

nrf _ble _gatt _on _ble _evt 

このモジュールに関するBLEスタックからのイベントを処理。

初期設定

timer init()

タイマーモジュール
battery_level_meas_timeout_handler,heart_rate_meas_timeout_handlerを作成。

ble _stack _init()

ble _evt _dispatchの設定。

advertising_init()

advertising _dataをスタックに保存。そしてble _advertising _startによって操作されるローカル構造内(on _adv _evt)にデータ保存。
今後使用される接続設定タブを変更。

services_init()

heart rateの初期化。
バッテリーサービスの初期化。
Device Information Serviceの初期化。

sensor _simulator _init()

センサーの設定。

conn _params _init()

GAP Peripheral Preferred Connection Parametersの設定。
update _timeout _handlerの作成。

peer _manager _init()

peer _managerの設定
pm _even t _handlerをpeer _managerに登録。
FDSであるfds _evt _handlerを登録。

application _timers _start()

タイマースタート。

advertising_start()

peerにデータが保存されている場合

peerに保存されている前のデータを削除。後advertisingをスタートさせる。

else

advertisingのチャンネルを設定をし、スタートする。

最後に

MacでPATHを通すを参考にしてパスを通したのだが、パスは通ったもののあまりうまくいかなかったので、パスの通し方がわからないという方はご自身でパスの通し方を勉強なさってから作業された方が賢明かもしれない。
具体的な不具合としては、source ~/.bash_profileを実行する度に以前のバージョンのパスに以前のバージョン+変更を加えたパスが追加され、膨大な量に膨れ上がってしまった。

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?