0
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 1 year has passed since last update.

nRF52シリーズで Nordic UART Service を Multi モードで使う

Posted at

はじめに
nRF52 の BLE 機能を用いて 文字列を 複数のnRF52(peripheral側) から ホストとなる1台のnRF52(central側) に送ることを試みた。

なお、nRF52 のサンプルコードに
[SDK\examples\ble_central\ble_app_multilink_central] がある。このサンプルコードと
[SDK\examples\ble_peripheral] を用いれば、複数のperipheral側から Button を押すと Central側に その結果が反映される。
参考:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsdk_nrf5_v17.1.0%2Fble_sdk_app_nus_eval.html

このサンプルコードでは、文字列を送ることが出来ない。

一方で、サンプルコードに
[C:\nRF5_SDK_17.1.0_up20220520\examples\ble_central\ble_app_uart_c] と
[C:\nRF5_SDK_17.1.0_up20220520\examples\ble_peripheral\ble_app_uart] がある。
これは、1台のnRF52(Central側) と 1台のnRF(peripheral側)間で nus(Nordic UART Service) を用いて
文字列の送受信を行うサンプルであり、複数台のnRF(peripheral側)から1台のnRF52(Central側) への送受信は、不可能である。
参考:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsdk_nrf5_v17.1.0%2Fble_sdk_app_nus_eval.html


サンプルコード修正のポイント

nRF52 に記載の2種類のサンプルコード
[SDK\examples\ble_central\ble_app_multilink_central] と [SDK\examples\ble_peripheral] をミックスさせて
コードを修正した。

ポイントとなるのは、nus を定義しているマクロを変更する必要がある。加えて、関連する項目の修正。

補足: [SDK\examples\ble_peripheral] をベースにすると動作が不安定になり
[SDK\examples\ble_central\ble_app_multilink_central] をベースに修正を加えると動作が安定する。
原因は、不明。

修正前

main.c
BLE_NUS_C_DEF(m_ble_nus_c);

static void db_disc_handler(ble_db_discovery_evt_t * p_evt)
{
    ble_nus_c_on_db_disc_evt(&m_ble_nus_c, p_evt);
}
|
    err_code = ble_nus_c_handles_assign(&m_ble_nus_c, p_ble_evt->evt.gap_evt.conn_handle, NULL);
|
    err_code = ble_nus_c_init(&m_ble_nus_c, &init);
    APP_ERROR_CHECK(err_code);
|

修正後

main.c
BLE_NUS_C_ARRAY_DEF(m_ble_nus_c, NRF_SDH_BLE_CENTRAL_LINK_COUNT);

static void db_disc_handler(ble_db_discovery_evt_t * p_evt)
{
    ble_nus_c_on_db_disc_evt(&m_ble_nus_c[p_evt->conn_handle], p_evt);
}
|
    err_code = ble_nus_c_handles_assign(&m_ble_nus_c[p_gap_evt->conn_handle], p_ble_evt->evt.gap_evt.conn_handle, NULL);
|
    for (uint32_t i = 0; i < NRF_SDH_BLE_CENTRAL_LINK_COUNT; i++)
    {
        err_code = ble_nus_c_init(&m_ble_nus_c[i], &init);
        APP_ERROR_CHECK(err_code);
    }
|

☆2022年 5月23日(月) 午前10時15分 初版(Ver1.00) 作成


0
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
0
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?