ホームページ  >  記事  >  バックエンド開発  >  BLE-NRF51822 チュートリアル 8-Dynamic Broadcast_PHP チュートリアル

BLE-NRF51822 チュートリアル 8-Dynamic Broadcast_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:01:47885ブラウズ

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

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

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


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


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


SDK9.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, vdata));

advddata.name_type = BLE_ADVDATA_FULL_NAME ;

advdata.include_Appearance = false;

advdata.flags =BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;

staticuint8_t mydata;ここで ic データが使用されます

//ここで行われる動的ブロードキャストは、これを毎に呼び出すことですtime Function

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

manuf_data.company_identifier= 0xffaa;

manuf_data.data.p_data= &mydata;

mydata++; // 各呼び出し後に 1 を追加します

advddata.p_manuf_specific_data= &manuf_data;

APP_ERROR_CHECK;コード);

}



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

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



void myadv_start(void){

ble_gap_adv_params_tadv_params; // ここでのブロードキャスト間隔は 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;

adv_para ms.channel_mask。 ch _39_off= 0 ;

adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND;

adv_params.p_peer_addr= NULL;

adv_params.fp = BLE_GAP_ADV_FP_ANY;

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;

/ 初期化、

my_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(); // ここで使用される自己定義の起動ブロードキャスト関数


{

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 ずつ増やします


プログラムを書き込んだ後、ブロードキャスト データのメーカー定義のフィールドが動的に変化していることがわかります



http://www.bkjia.com/PHPjc/1088147.html

www.bkjia.com

http://www.bkjia.com/PHPjc/1088147.html技術記事 BLE-NRF51822 チュートリアル 8 - ダイナミック ブロードキャスト このチュートリアルでは、ダイナミック ブロードキャストを実装する方法を説明します。 このチュートリアルは、9.0 SDK の Uart サンプルに基づいています。 動的ブロードキャストを実装する方法は、ブロードキャスト->ブロードキャストを停止->パラメータを変更-...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。