suchen
HeimBackend-EntwicklungPHP-TutorialBLE-NRF51822教程8-动态广播_PHP教程

BLE-NRF51822教程8-动态广播

本讲接收如何实现动态广播。

教程基于 9.0 sdk中的 Uart例子。


实现动态广播的方法是 广播->停止广播->修改参数->重启广播


所以我们通过一个定时器来周期性的 关闭广播然后再修改广播数据之后再开启广播。


Sdk 9.0中的广播搞了好几个模式,做的有点麻烦,所以我对他做了比较大的改动。

首先 在main.c中 中的advertising_init函数需要改动。


主要修改还添加了红色部分。将 flag 改为了GENERAL。后面又将广播超时设置为0从而实现无线广播。

去掉了根据广播模式来设置广播数据的函数以及对扫描响应数据的设置。

void advertising_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

advdata.p_manuf_specific_data= &manuf_data;

err_code= ble_advdata_set(&advdata, NULL);

APP_ERROR_CHECK(err_code);

}






然后是启动广播函数。 Main 函数中用的是ble_advertising_start。

我们这里不用。直接实现一个自己的简单函数


void myadv_start(void){

ble_gap_adv_params_tadv_params;

adv_params.interval =1600; //这里广播间隔设置为 1s

adv_params.timeout = 0;//这里设置0和上面的flag配合实现无线广播

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_params.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;

adv_params.p_whitelist= NULL;

sd_ble_gap_adv_start(&adv_params);

}


之后我们做一个定时器。定时器的作用是以2s为周期 来关闭修改广播参数然后启动广播









在main 函数中做如下修改,创建一个 2s定时器 my_timer,并且开启它


int main(void)

{

uint32_t err_code;

bool erase_bonds;

uint8_t start_string[] = START_STRING;

app_timer_id_tmy_timer;

// Initialize.

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,

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(); //这里用的自己定义的启动广播函数


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例子中还需要做一个改动,我们创建了一个自己的timer,不过uart例子中定义的 允许使用的最大的 timer数就是它已经使用的数量,所以我们再添加自己的timer会出错。


修改办法:找到main.c文件中的APP_TIMER_MAX_TIMERS宏将其增大1就可以了


之后烧录程序就能看到广播数据中的厂商自定义字段在动态改变了

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1088147.htmlTechArticleBLE-NRF51822教程8-动态广播 本讲接收如何实现动态广播。 教程基于 9.0 sdk中的 Uart例子。 实现动态广播的方法是 广播->停止广播->修改参数-...
Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Wann würden Sie ein Merkmal gegenüber einer abstrakten Klasse oder Schnittstelle in PHP verwenden?Wann würden Sie ein Merkmal gegenüber einer abstrakten Klasse oder Schnittstelle in PHP verwenden?Apr 10, 2025 am 09:39 AM

In PHP eignet sich das Merkmal für Situationen, in denen die Wiederverwendung von Methoden erforderlich ist, aber nicht zur Erbschaft geeignet ist. 1) Das Merkmal ermöglicht Multiplexing -Methoden in Klassen, um die Komplexität mehrerer Vererbungskomplexität zu vermeiden. 2) Bei Verwendung von Merkmalen müssen Sie auf Methodenkonflikte achten, die durch die Alternative und als Schlüsselwörter gelöst werden können. 3) Überbeanspruchte des Merkmals sollte vermieden werden und seine einzelne Verantwortung sollte beibehalten werden, um die Leistung zu optimieren und die Code -Wartbarkeit zu verbessern.

Was ist ein Abhängigkeitsinjektionsbehälter (DIC) und warum eine in PHP verwenden?Was ist ein Abhängigkeitsinjektionsbehälter (DIC) und warum eine in PHP verwenden?Apr 10, 2025 am 09:38 AM

Abhängigkeitsinjektionsbehälter (DIC) ist ein Tool, das Objektabhängigkeiten für die Verwendung in PHP -Projekten verwaltet und bereitstellt. Die Hauptvorteile von DIC sind: 1. Entkopplung, Machen von Komponenten unabhängig, und der Code ist leicht zu warten und zu testen; 2. Flexibilität, leicht zu ersetzen oder zu ändern; 3.. Testbarkeit, bequem für die Injektion von Scheinobjekten für Unit -Tests.

Erklären Sie die SPLFixedArray und seine Leistungseigenschaften im Vergleich zu regulären PHP -Arrays.Erklären Sie die SPLFixedArray und seine Leistungseigenschaften im Vergleich zu regulären PHP -Arrays.Apr 10, 2025 am 09:37 AM

SplfixedArray ist ein Array mit fester Größe in PHP, das für Szenarien geeignet ist, in denen hohe Leistung und geringe Speicherverbrauch erforderlich sind. 1) Es muss die Größe beim Erstellen angeben, um den durch dynamischen Einstellungen verursachten Overhead zu vermeiden. 2) Basierend auf C -Spracharray betreibt direkt Speicher und schnelle Zugriffsgeschwindigkeit. 3) Geeignet für eine großräumige Datenverarbeitung und speicherempfindliche Umgebungen, muss jedoch mit Vorsicht verwendet werden, da seine Größe festgelegt ist.

Wie kann PHP -Datei sicher sicher hochladen?Wie kann PHP -Datei sicher sicher hochladen?Apr 10, 2025 am 09:37 AM

PHP überlädt Datei -Hochladen über die Variable $ \ _ Dateien. Zu den Methoden zur Sicherstellung gehören: 1. Upload -Fehler, 2. Dateityp und -größe überprüfen, 3.. Dateiüberschreibung verhindern, 4. Verschieben von Dateien auf einen dauerhaften Speicherort.

Was ist der Null -Koalescing -Operator (??) und der Null -Koalescing -Zuweisungsoperator (?? =)?Was ist der Null -Koalescing -Operator (??) und der Null -Koalescing -Zuweisungsoperator (?? =)?Apr 10, 2025 am 09:33 AM

In JavaScript können Sie NullCoalescingoperator (??) und NullCoalescingAssignmentoperator (?? =) verwenden. 1.??? 2.??= Weisen Sie den Wert des rechten Operanden die Variable zu, jedoch nur, wenn die Variable null oder undefiniert ist. Diese Operatoren vereinfachen die Codelogik und verbessern die Lesbarkeit und Leistung.

Was ist CSP -Header (Content Security Policy Ricture) und warum ist es wichtig?Was ist CSP -Header (Content Security Policy Ricture) und warum ist es wichtig?Apr 09, 2025 am 12:10 AM

CSP ist wichtig, da es XSS -Angriffe verhindern und das Laden der Ressourcen begrenzen und die Sicherheit der Website verbessern kann. 1.CSP ist Teil von HTTP -Reaktionsüberschriften und begrenzt böswilliges Verhalten durch strenge Richtlinien. 2. Die grundlegende Verwendung besteht darin, nur Laderessourcen aus demselben Ursprung zuzulassen. 3. Erweiterte Verwendung kann mehr feinkörnige Strategien festlegen, z. V.

Was sind HTTP -Anforderungsmethoden (erhalten, posten, setzen, löschen usw.) und wann sollte jeder verwendet werden?Was sind HTTP -Anforderungsmethoden (erhalten, posten, setzen, löschen usw.) und wann sollte jeder verwendet werden?Apr 09, 2025 am 12:09 AM

Zu den HTTP -Anforderungsmethoden gehören GET, Post, Put und Löschen, mit denen Ressourcen erhalten, übermittelt, aktualisiert und gelöscht werden. 1. Die GET -Methode wird verwendet, um Ressourcen zu erhalten, und eignet sich für Lesevorgänge. 2. Die Post -Methode wird verwendet, um Daten zu übermitteln und häufig neue Ressourcen zu erstellen. 3. Die Put -Methode wird zum Aktualisieren von Ressourcen verwendet und eignet sich für vollständige Updates. V.

Was ist HTTPS und warum ist es für Webanwendungen von entscheidender Bedeutung?Was ist HTTPS und warum ist es für Webanwendungen von entscheidender Bedeutung?Apr 09, 2025 am 12:08 AM

HTTPS ist ein Protokoll, das auf der Grundlage von HTTP eine Sicherheitsschicht hinzufügt, die hauptsächlich die Privatsphäre und die Datensicherheit der Benutzer durch verschlüsselte Daten schützt. Zu den Arbeitsprinzipien gehören TLS -Handshake, Zertifikatüberprüfung und verschlüsselte Kommunikation. Bei der Implementierung von HTTPS müssen Sie auf Zertifikatverwaltung, Leistungsauswirkungen und Mischinhalteprobleme achten.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung