ホームページ > php教程 > php手册 > BLE-NRF51822 チュートリアル 8-ダイナミック ブロードキャスト

BLE-NRF51822 チュートリアル 8-ダイナミック ブロードキャスト

WBOY
リリース: 2016-06-16 09:16:25
オリジナル
1410 人が閲覧しました

BLE-NRF51822 チュートリアル 8 - ダイナミック ブロードキャスト

このチュートリアルでは、受信時にダイナミック ブロードキャストを実装する方法を説明します。

このチュートリアルは、9.0 SDK の Uart サンプルに基づいています。


動的ブロードキャストを実装する方法は、ブロードキャスト -> ブロードキャストの停止 -> パラメータの変更 -> ブロードキャストの再開です


そこで、タイマーを使用して定期的にブロードキャストをオフにし、ブロードキャストをオンにする前にブロードキャスト データを変更します。


SDK 9.0のブロードキャストはモードがいくつかあって少し面倒なので、比較的大きな変更を加えました。

まず、main.c のAdvertising_init 関数を変更する必要があります。


主な修正では赤い部分も追加されました。フラグを GENERAL に変更します。その後、ブロードキャスト タイムアウトが 0 に設定され、ワイヤレス ブロードキャストが実装されます。

ブロードキャストモードに応じたブロードキャストデータの設定機能とスキャンレスポンスデータの設定を削除しました。

voidAdvertising_init(void)

{

uint32_t err_code;

ble_advdata_t advdata;

ble_advdata_t scanrsp;


memset(&advdata,0, sizeof(advdata));

advdata.name_type = BLE_ADVDATA_FULL_NAME;

advdata.include_Appearance = false;

advdata.flags =BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;

staticble_advdata_manuf_data_t manuf_data;

staticuint8_t mydata = 0; // ここでは静的データが使用されます。ここで行われる動的ブロードキャストはそれぞれこの関数が呼び出されるたびに

//数値、ブロードキャスト データのメーカー定義フィールドが 1 ずつ増加します

manuf_data.company_identifier= 0xffaa;

manuf_data .data.size= 1;

manuf_data.data.p_data= &mydata;

mydata++; // 各呼び出しの後に 1 を追加します。 🎜> advddata .p_manuf_specific_data= &manuf_data;

err_code= ble_advdata_set(&advdata, NULL);

APP_ERROR_CHECK(err_code); 🎜>



そしてブロードキャスト機能を開始します。 Main 関数は ble_advertising_start を使用します。


ここでは使用しません。独自の単純な関数を直接実装します。 🎜 >

adv_params.interval =1600; //ここでのブロードキャスト間隔は 1 秒に設定されます


adv_params.timeout = 0; //ここで 0 を設定し、上記のフラグと連携して無線ブロードキャストを実装します

adv_params .type =BLE_GAP_ADV_TYPE_ADV_IND;

adv_params.channel_mask.ch_37_off= 0;

adv_params.channel_mask.ch_38_off= 0;

_39_オフ= 0;


adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND;

adv_params.p_peer_addr= NULL;

adv_params.fp = BLE_GAP_ADV_FP_ANY;

adv_para ms.p_whitelist= NULL ;

sd_ble_gap_adv_start(&adv_params);

}

その後、タイマーを作ります。タイマーの機能は、2 秒サイクルでブロードキャスト パラメータを閉じて変更し、その後ブロードキャストを開始することです



main 関数内で行います。 以下のように変更し、2 秒タイマー my_timer を作成し、有効にします。



int main(void)

{

uint32_t err_code;


bool Erase_bonds;

uint8_t start_string[] = START_STRING;

app_timer_id_tmy_timer;


// 初期化します。


APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false);

uart_init();


app_timer_create(&my_timer,APP_TIMER_MODE_REPEATED,

私の _timer_handler);

buttons_leds_init(&erase_bonds);

ble_stack_init();

gap_params_init();

services_init();

Advertising_init();

conn_params_init();

app_timer_start(my_timer,APP_TIMER_TICKS(2000,APP_TIMER_PRESCALER), NULL);

myadv_start(); //ここで使用される自己定義の開始ブロードキャスト関数


for (;;)

{

power_manage();

}

}





次に、独自のタイマー オーバーフロー処理関数を実装します


void my_timer_handler(void *p_contex){

int i = 50;

sd_ble_gap_adv_stop(); //ブロードキャストをオフにする

Advertising_init() //メーカー定義フィールドのデータを変更します

while(i--) ;

myadv_start(); //ブロードキャストの開始

}


ここで行われる動的ブロードキャストは、ブロードキャスト データ内のメーカーを動的に変更することですカスタムフィールド。

advertising_init 関数が呼び出されるたびに、メーカーのカスタム フィールドの値が増加します。 Advertising_init 関数にコメントがあります




ここで動的ブロードキャストのために行う必要があることは次のとおりです終わった、終わった。

ただし、uart の例では変更を加える必要がありますが、独自のタイマーを作成しましたが、uart の例で定義されている使用可能なタイマーの最大数は、すでに使用されている数です。したがって、独自のタイマーを追加します。タイマーは間違っています。


変更方法: main.c ファイル内の APP_TIMER_MAX_TIMERS マクロを見つけて、1 ずつ増やします。


書き込みプログラムを実行すると、ブロードキャスト データ内のメーカー定義のフィールドが動的に変更されたことがわかります

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート