BLE_Health_Thermometer for mbed HRM1017 with BLE library 0.1.0

Dependencies:   BLE_API TMP102 mbed nRF51822

Fork of BLE_Health_Thermometer2 by Ken Todotani

You are viewing an older revision! See the latest version

BLE_Health_Thermometer2 010

mbed HRM1017をはじめように掲載されている、https://mbed.org/users/ytsuboi/code/BLE_Health_Thermometer_IRC/をBLE ライブラリ0.1.0に移植しました。 前回公開したhttp://mbed.org/users/todotani/code/BLE_Health_Thermometer2/からさらに新ライブラリ0.1.0に対応するための各種修正を加えています。修正点は以下の通りです。

  • ライブラリ0.1.0を使うためには、mbedライブラリをDevelopment版である、mbed-srcに変更します
  • mbed-srcのクロッククロック設定が外部クロックになっているため、HRM1017で使用する内部クロック設定に変更します。mbed-src/targets/cmsis/TARGET_NORDIC/TARGET_MCU_NRF51822/system_nrf51822.cの69行目を以下のように修正します。<追記>最新のmbed-src 309版では、ターゲットをHRM1017に設定すると自動的に下記のコードが選択されるようになっています。

system_nrf51822.cの変更

NRF_CLOCK->LFCLKSRC             = (CLOCK_LFCLKSRC_SRC_RC << CLOCK_LFCLKSRC_SRC_Pos);
  • nRF51822/btle/btle.cpp 66行目を以下のように変更し、内部クロックを選択するようにします(この変更は以前から必要なものでした)<追記> 最新のpublishではターゲットをHRM1017に設定すると自動的に以下のコードを選択するようにしました。

btle.cppの変更1

SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);
  • btle.cppの140行、142行目を以下のようにコメントアウトします。この変更は、disconnected.reasonが1種類しか定義されていないために、disconnectionCallback関数が呼ばれない問題を回避するためです。<追記>最新のpublishでは、BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTIONに加えて、BLE_HCI_REMOTE_USER_TERMINATED_CONNECTIONの処理を追加して、iOSでバイス等から切断した時もイベント処理出来るようにしました。

btle.cppの変更2

// if (p_ble_evt->evt.gap_evt.params.disconnected.reason == BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION) {
       nRF51Gap::getInstance().processDisconnectionEvent(handle, Gap::LOCAL_HOST_TERMINATED_CONNECTION);
// }
  • main.cppにTickerを設定して以下のような処理を周期的に実行するようにします。こうすることで、waitForEvent()関数から抜けない問題を回避します。

Tickerの使用

void periodicCallback(void)
{
    oneSecondLed = !oneSecondLed; /* Do blinky on LED1 while we're waiting for BLE events */

    /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
     * heavy-weight sensor polling from the main thread. */
    triggerSensorPolling = true;
}
  • main.cppで定義するイベントハンドラ関数の引数が以下のように追加されています。新ライブラリのAPI変更に対応したコード変更になります。

EventHandler

void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
void onConnectionCallback(Gap::Handle_t handle, const Gap::ConnectionParams_t *params)
  • main.cppで呼び出すupdateCharacteristicValueの引数が、以前のtempChar.getHandle()から変更されています。こちらも、新ライブラリのAPI変更に対応したコード変更になります。

updateCharacteristicValue

ble.updateCharacteristicValue(tempChar.getValueAttribute().getHandle(), thermTempPayload, sizeof(thermTempPayload));
ble.updateCharacteristicValue(battLevel.getValueAttribute().getHandle(), (uint8_t *)&batt, sizeof(batt));
  • あと、iOSを使っている方で、mbedのBLEソフトを入れ替えてGATTの内容がが変わるような場合は、iOSデバイスのBluetoothをoff/onしないと変更が反映されず、接続しても情報が表示されないような状態になります。この点も、ご注意を。

プログラム全体は以下の通りです。

Import programBLE_Health_Thermometer2-010

BLE_Health_Thermometer for mbed HRM1017 with BLE library 0.1.0

btle.cppの<追記>分変更を盛り込んだコードは以下の通りです。

[Not found]


All wikipages