- nRF52 razvojni komplet:
- Ugrađeni studio Segger
- DHT11 s nRF52DK
- Kako raditi s Bluetooth Low Energy (BLE)?
- Dijagram BLE usluge / karakteristika
- Objašnjenje programa nRF52 BLE
- Testiranje našeg programa pomoću nRF Connect
Fitness vrpce, pametni satovi i drugi nosivi uređaji postaju sve popularniji uz upotrebu Bluetooth 5 / Bluetooth Low Energykomunikacijski standardi široko se usvajaju. BLE nam pomaže u razmjeni podataka na kratkoj udaljenosti s vrlo malo snage, što je vrlo važno za uređaje na baterije poput nosive opreme. Također nam pomaže u postavljanju bežičnih BLE mrežastih mreža, ova značajka dobro dođe za uređaje za automatizaciju kuće gdje više uređaja mora međusobno komunicirati u zatvorenom okruženju. Već smo koristili BLE s Raspberry Pi i BLE s ESP32 za obavljanje nekih osnovnih BLE funkcija. Inženjeri eksperimentiraju s BLE-om kako bi dizajnirali prijenosne bežične uređaje koji mogu dugo raditi na malim baterijama, a za rad s BLE-om postoji više razvojnih setova. U nedavnom pregledu Arduino Nano 33, također smo primijetili da ploča ima nRF52840 s BLE mogućnostima.
U ovom uputstvu istražit ćemo još jednu uzbudljivu i popularnu razvojnu ploču nazvanu nRF52 DK za mjerenje temperature i vlažnosti pomoću BLE. Prema zadanim postavkama, BLE Environment Sensing Profiles podržava širok raspon parametara okoliša, ali ovaj je vodič ograničen samo na vrijednosti temperature i vlažnosti. Ovo rješenje povezuje se sa pametnim telefonom putem Bluetooth veze s niskom potrošnjom energije i pruža često ažuriranje parametara okoliša, tj. Temperature, vlažnosti. Koristit ćemo DHT1 senzor, a mjerenje temperature vršit će se s razlučivošću 0,01 Celzijeva stupnja, a vlažnost zraka s razlučivošću 0,01 posto.
nRF52 razvojni komplet:
nRF52DK je cjelovita prototipska platforma za Bluetooth Low Energy i 2,4 GHz Wireless Internet of Things aplikaciju. Komplet za razvoj podržava razne standardne nordijske alate, kao što su open source, GCC i komercijalna integrirana razvojna okruženja poput Keil, IAR i Segger Embedded Studio, itd. Nordic također nudi punopravni komplet za razvoj softvera za nRF52, koji uključuje potpunu podršku za nRF52DK.

nRF52DK napaja se s nRF52832 ARM Cortex-M4F mikrokontrolerom, koji je integriran 512 KB by Flash Memor i 64 Kbytes za SRAM. nRF52DK ima integrirani program za ispravljanje pogrešaka Segger J-Link, koji omogućuje lakše i brže uklanjanje pogrešaka bez vanjskih / dodatnih jtag uređaja za uklanjanje pogrešaka. Uključuje i Arduino Uno Rev3 kompatibilni konektor, koji podržava međusobno povezivanje analognih i digitalnih ulaza s mikroprocesorom, a uključuje i standardne komunikacijske protokole poput I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) i UART (Universal Asynchronous Receiver and Transmitter). Ovaj razvojni komplet dizajniran je s integriranom ugrađenom PCB antenom koja pruža bežičnu komunikaciju kratkog dometa koristeći Bluetooth Low Energy za povezivanje sa pametnim telefonima, prijenosnicima i tabletima.
Ugrađeni studio Segger
Za programiranje razvojne ploče koristit ćemo Segger Embedded Studio s nRF52. Segger Embedded Studio snažno je C / C ++ integrirano razvojno okruženje (IDE) ciljano posebno za razvoj ugrađenih sustava. To pruža cjelovito cjelovito rješenje koje sadrži sve potrebno za ugrađeno C programiranje, razvoj i uklanjanje pogrešaka. To uključuje cjelovit tijek rada za programiranje i razvoj ugrađenih sustava, koji sadrži upravljanje projektima, uređivač, program za ispravljanje pogrešaka koji podržavaju ARM Cortex uređaje. Ovaj moćan i jednostavan IDE potpuno je besplatan za nordijske kupce s punom licencom bez ikakvih ograničenja veličine koda. IDE se može preuzeti s donje veze,
Preuzmite Segger Embedded Studio
DHT11 s nRF52DK
DHT11 je cjeloviti senzor temperature i vlažnosti s komponentom za mjerenje vlažnosti rezisivnog tipa i komponentom za mjerenje temperature NTC tipa. Nudi izvrsnu kvalitetu, brži odgovor i isplativost. Prema zadanim postavkama, svi DHT11 senzori su kalibrirani u laboratoriju što dovodi do krajnje točnosti i pouzdanosti. Komunicira pomoću jednožičnog sustava serijskog sučelja, a ostale specifikacije date su u nastavku

Specifikacije DHT11:
- Raspon vlažnosti: 20 - 90% RH
- Raspon temperatura: 0 - 50 Celzijevih stupnjeva
- Točnost vlažnosti: ± 5 % RH
- Točnost temperature: ± 2 ℃
Vremenski dijagram DHT11:

Čitanje podataka s DHT11 senzora relativno je jednostavno pomoću gore prikazanog vremenskog dijagrama. Postupak je sličan bilo kojem kontroleru i ovaj smo senzor već koristili s drugim razvojnim platformama poput
- DHT11 senzor s Raspberry Pi
- DHT11 senzor s PIC16F877A
- DHT11 senzor sa STM32F103C8
- DHT11 senzor s NodeMCU
Za povezivanje senzora temperature i vlažnosti DHT11 s razvojnim kompletom nRF52, slijedite donji dijagram povezivanja.

Koristim modul konektora za povezivanje senzora s pločom, tako da moje konačno postavljanje izgleda ovako

Dijagram toka za komunikaciju s DHT11:
Dijagram toka u nastavku objašnjava logički tijek programa koji ćemo koristiti za komunikaciju između nRF52DK i DHT11

Format podataka:

Kako raditi s Bluetooth Low Energy (BLE)?
Da bismo razumjeli kako koristiti BLE značajku, moramo razumjeti nekoliko osnovnih terminologija koje su objašnjene u nastavku, također možete pročitati članak ESP32 BLE da biste saznali više o BLE
Profil generičkog pristupa (GAP)
Generički pristupni profil snosi potpunu odgovornost uspostavljanja veze za komunikaciju između BLE perifernih i središnjih uređaja. GAP također nudi razne postupke, uključujući skeniranje / otkrivanje uređaja, uspostavljanje veze na sloju veze, prekid veze, rukovanje sigurnosnim značajkama i punopravnu konfiguraciju uređaja. GAP radi u sljedećim stanjima uređaja
|
GAP države |
Opis |
|
Pričekaj |
Početno stanje uređaja nakon resetiranja |
|
Oglašivač |
Oglašavanje uređaja s podacima koji pomažu u skeniranju inicijatora |
|
Skener |
Prima i šalje zahtjev za skeniranje oglašivaču |
|
Pokretač |
Šalje zahtjev za povezivanje radi uspostavljanja veze |
|
Rob / Gospodar |
Pri povezivanju, uređaj kao slave ako oglašivač, master ako inicijator |
Sloj generičkog profila atributa (GATT)
GATT je skraćenica od Generic Attribute Profile Layer, odgovoran je za podatkovnu komunikaciju između dva BLE uređaja (periferni i središnji). Komunikacija podataka karakterizira se u obliku karakteristika koje komuniciraju i pohranjuju podatke. BLE uređaj igra dvije različite uloge za komunikaciju uređaja dane u nastavku,
- GATT Server sadrži informacije o karakteristikama koje će se koristiti za čitanje i pisanje. U našem vodiču senzor DHT11 i razvojni programer komplet je naš GATT poslužitelj.
- GATT klijent čita i zapisuje podatke s / na GATT poslužitelj. Pametni telefon je GATT klijent koji čita i zapisuje podatke na našu ploču senzora.
Bluetooth SIG
Bluetooth Special Interest Group (SIG) je organizacija za standardizaciju koja prati razvoj Bluetooth standarda i licenciranje Bluetooth tehnologija. SIG grupa ne proizvodi niti prodaje bilo kakve Bluetooth proizvode. Definira specifikaciju i standardizaciju Bluetootha. Oni definiraju jedinstveni identifikator za Bluetooth niskoenergetski profil i odgovarajuće karakteristike. Specifikacije GATT profila nalaze se na donjoj poveznici
Specifikacije GATT profila
Na temelju GATT Specifikacije dane u gornjoj poveznici, prikupili smo jedinstvene identifikatore potrebne za naš projekt koji su navedeni u nastavku.
|
Profil / Karakteristike |
UUID |
|
GAP (generički pristup) |
0x1800 |
|
GATT (generički atribut) |
0x1801 |
|
ESS (Sensing Environment) |
0x181A |
|
Temperatura |
0x2A6E |
|
Vlažnost |
0x2A6F |
Dijagram BLE usluge / karakteristika

BLE UUID
|
UUID |
16-bitna vrijednost |
128-bitni UUID |
|
ESS služba |
0x181A |
0000181A-0000-0000-0000-00000000000 |
|
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
|
Vlažnost Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Karakteristike temperature
|
Vlasništvo |
Opis |
|
Jedinica |
Stupanj Celzija s rezolucijom 0,01 stupnja |
|
Format |
sint16 |
|
UUID |
0x2A6E |
|
Decimalni eksponent |
2 |
|
Čitati |
Obavezno |
Karakteristike vlage
|
Vlasništvo |
Opis |
|
Jedinica |
Postotak s razlučivošću 0,01 posto |
|
Format |
uint16 |
|
UUID |
0x2A6F |
|
Decimalni eksponent |
2 |
|
Čitati |
Obavezno |
Objašnjenje programa nRF52 BLE
Koristit ćemo nRF5 SDK kako bismo programirali naš razvojni komplet nRF52. nRF5 SDK je cjelovit komplet za razvoj softvera integriran s brojnim Bluetooth niskoenergetskim profilima, GATT serilizatorom i podrškom za upravljačke programe za sve periferne uređaje na SoC-ima serije nRF5. Ovaj SDK pomaže programerima da izgrade cjelovite, pouzdane i sigurne Bluetooth niskoenergetske aplikacije s mikrokontrolerima serije nRF52 i nRF51. Kompletni program možete preuzeti ovdje, objašnjenje koda je sljedeće.
Konfigurirajte DHT11 DATA pin kao ulaz na nrf52 s povlačenjem. Status pin-a trebao bi biti visok kako bi se potvrdilo da nRF52 pruža odgovarajući PULLUP za podatkovni pin DHT11
/ * postavljeno za unos i provjeriti dolazi li do povlačenja signala * / Data_SetInput (); OdgodaUSec (50); if (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Generirajte signal START od mikrokontrolera nRF52 i provjerite signal za potvrdu.
/ * poslati startni signal * / Data_SetOutput (); Data_ClrVal (); OdgodaMec (20); / * neka signal ostane nizak najmanje 18 ms * / Data_SetInput (); OdgodaUSec (50); / * provjeri signal za potvrdu * / if (Data_GetVal ()! = 0) {/ * senzor senzor mora povući nisko / return DHT11_NO_ACK_0; } / * pričekajte maks. 100 us za signal za uzbunu sa senzora * / cntr = 18; while (Data_GetVal () == 0) {/ * pričekajte dok se signal ne poveća * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_1; / * ovdje bi trebao biti signal za ACK * /}} / * pričekajte dok se opet ne spusti, kraj sekvence ack * / cntr = 18; while (Data_GetVal ()! = 0) {/ * pričekajte dok se signal ne smanji * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_0; / * ovdje bi signal trebao ponovo pasti na nulu * /}}
Sada pročitajte 40 bitova podataka koji sadrže 2 bajta temperature, 2 bajta vlage i 1 bajt kontrolne sume.
/ * sada pročitajte 40-bitne podatke * / i = 0; podaci = 0; loopBits = 40; učiniti {cntr = 11; / * pričekajte najviše 55 nas * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * pričekajte maks. 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_1; }} podaci << = 1; / * sljedeći bit podataka * / if (cntr <10) {/ * podatkovni signal visok> 30 us ==> podatkovni bit 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * sljedeći bajt * / buffer = data; i ++; podaci = 0; }} while (- loopBits! = 0);
Potvrdite podatke uz pomoć kontrolne sume.
/ * test CRC * / if ((uint8_t) (međuspremnik + međuspremnik + međuspremnik + međuspremnik)! = međuspremnik) {return DHT11_BAD_CRC; }
Manipulirajte i čuvajte temperaturu i vlažnost
/ * pohrana vrijednosti podataka za pozivatelja * / vlažnost = ((int) međuspremnik) * 100 + međuspremnik; temperatura = ((int) međuspremnik) * 100 + međuspremnik;
Inicijalizirajte uslugu evidencije nRF5 SDK. nRF52 SDK opremljen je upravljačkim sučeljem za bilježenje naziva nrf_log i koristi zadani pozadinski sustav za bilježenje podataka. Zadana će pozadina biti serijski priključak. Ovdje ćemo inicijalizirati oba nrf_log upravljačko sučelje i nrf_log zadane backends kao dobro.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (kôd pogreške); NRF_LOG_DEFAULT_BACKENDS_INIT ();
nRF52 SDK ima funkciju odbrojavanja vremena aplikacije. Modul aplikacijskog tajmera omogućuje stvaranje više instanci tajmera na temelju periferne opreme RTC1. Ovdje inicijaliziramo modul vremenskog odbrojavanja aplikacije nRF5. U ovom rješenju koriste se dva vremenska mjerača vremena i interval ažuriranja podataka.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (kôd pogreške);
nRF52 SDK ima cjeloviti modul za upravljanje napajanjem jer BLE uređaji moraju raditi nekoliko mjeseci na Coin ćelijskoj bateriji. Upravljanje napajanjem igra vitalnu ulogu u BLE aplikacijama. Modul za upravljanje napajanjem nRF52 u potpunosti podnosi isto. Ovdje inicijaliziramo modul za upravljanje napajanjem nRF5 SDK
ret_code_t kôd pogreške; kôd pogreške = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (kôd pogreške);
nRF52 SDK ima ugrađenu šesterokutnu datoteku firmvera Nordic Soft Device koja sadrži Bluetooth središnju i perifernu hrpu s niskom potrošnjom energije. Ovaj visokokvalificirani skup protokola uključuje GATT, GAP, ATT, SM, L2CAP i sloj veza. Ovdje slijedimo inicijalizacijski slijed, onaj inicijalizirani nRF5 BLE Radio Stack (Nordic Soft Device)
ret_code_t kôd pogreške; kôd pogreške = nrf_sdh_enable_request (); APP_ERROR_CHECK (kôd pogreške); // Konfigurirajte BLE stog pomoću zadanih postavki. // Dohvaćanje početne adrese RAM-a aplikacije. uint32_t ram_start = 0; kôd pogreške = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG, & ram_start); APP_ERROR_CHECK (kôd pogreške); // Omogući BLE stog. kôd pogreške = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (kôd pogreške); // Registriraj obrađivač za BLE događaje. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP je odgovoran za skeniranje / otkrivanje uređaja, uspostavljanje veze, prekid veze, pokretanje sigurnosnih značajki i konfiguraciju. GAP sadrži ključne parametre veze poput intervala veze, kašnjenja slave, vremensko ograničenje nadzora itd. Ovim se inicijalizira generički parametar veze profila pristupa
ret_code_terr_code; ble_gap_conn_params_tgap_conn_params; ble_gap_conn_sec_mode_t sec_mode; BLE_GAP_CONN_SEC_MODE_SET_OPEN (& sec_mode); err_code = sd_ble_gap_device_name_set (& sec_mode, (const uint8_t *) DEVICE_NAME, strlen (DEVICE_NAME)); APP_ERROR_CHECK (kôd pogreške); memset (& gap_conn_params, 0, sizeof (gap_conn_params)); gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; gap_conn_params.slave_latency = SLAVE_LATENCY; gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; kôd pogreške = sd_ble_gap_ppcp_set (& gap_conn_params); APP_ERROR_CHECK (kôd pogreške);
GATT je odgovoran za podatkovnu komunikaciju između BLE perifernih i središnjih uređaja. Modul nRF52 GATT koristan je za pregovaranje i praćenje maksimalne veličine ATT_MTU. Ovdje inicijaliziramo generički atributni modul nRF52 SDK, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (kôd pogreške);
GATT vrši podatkovnu komunikaciju u obliku usluga i karakteristika. Ovdje inicijaliziramo usluge osjetljivosti na okoliš GATT, što uključuje inicijalizaciju karakteristika poput temperature i vlažnosti.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Inicijalizacija modula za pisanje u redu. qwr_init.error_handler = nrf_qwr_error_handler; kôd pogreške = nrf_ble_qwr_init (& m_qwr, & qwr_init); APP_ERROR_CHECK (kôd pogreške); m_ess.notif_write_handler = ble_ess_notif_write_handler; kôd pogreške = ble_ess_init (& m_ess); APP_ERROR_CHECK (kôd pogreške);
Oglašavanje igra vitalnu ulogu u BLE aplikacijskom okruženju. paketi uključuju informacije o vrsti adrese, vrsti oglašavanja, podacima o oglašavanju, podacima specifičnim za proizvođača uređaja i podacima o odgovoru na skeniranje. nRF52 SDK s modulom za oglašavanje. Ovdje radimo inicijalizaciju modula za oglašavanje s parametrima.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Izrada i postavljanje podataka o oglašavanju. memset (& advdata, 0, sizeof (advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = true; advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; memset (& srdata, 0, sizeof (srdata)); srdata.uuids_complete.uuid_cnt = sizeof (adv_uuids) / sizeof (adv_uuids); srdata.uuids_complete.p_uuids = adv_uuids; err_code = ble_advdata_encode (& advdata, m_adv_data.adv_data.p_data, & m_adv_data.adv_data.len); APP_ERROR_CHECK (kôd pogreške); err_code = ble_advdata_encode (& srdata, m_adv_data.scan_rsp_data.p_data, & m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK (kôd pogreške); ble_gap_adv_params_t adv_params; // Postavljanje parametara oglašavanja. memset (& adv_params, 0, sizeof (adv_params)); adv_params.primary_phy = BLE_GAP_PHY_1MBPS; adv_params.duration = APP_ADV_DURATION; adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; adv_params.p_peer_addr = NULL; adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; adv_params.interval = APP_ADV_INTERVAL; err_code = sd_ble_gap_adv_set_configure (& m_adv_handle, & m_adv_data, & adv_params); APP_ERROR_CHECK (kôd pogreške);
BLE konekcija obrađivat će se i nadzirati s različitim parametrima veze, poput kašnjenja ažuriranja parametara prve veze, sljedećih uzastopnih kašnjenja, broja ažuriranja, funkcije povratnog poziva rukovatelja događaja veze i obrađivača događaja povratne pogreške veze. Ovdje radimo inicijalizaciju parametara uspostavljanja veze BLE i obrađivača događaja povratnog poziva za događaje veze i događaje pogrešaka.
ret_code_terr_code; ble_conn_params_init_t cp_init; memset (& cp_init, 0, sizeof (cp_init)); cp_init.p_conn_params = NULL; cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; t_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; cp_init.disconnect_on_fail = false; cp_init.evt_handler = on_conn_params_evt; cp_init.error_handler = conn_params_error_handler; kôd pogreške = ble_conn_params_init (& cp_init); APP_ERROR_CHECK (kôd pogreške);
Nakon završetka inicijalizacije sustava, ovdje započinjemo s oglašavanjem naziva BLE uređaja i informacija o mogućnostima. Odavde se ova periferna oprema može vidjeti na popisu Ble skeniranja pametnog telefona.
ret_code_terr_code; kôd pogreške = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (kôd pogreške);
Glavna petlja radi u intervalu od 2 sekunde, očitava temperaturu i vlažnost te se ažurira na povezani pametni uređaj pomoću čitanja ili obavijesti
za (;;) { uint16_t temperatura, vlaga; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); if (updtmrexp) { dhtErrCode = DHTxx_Read (& temperatura, & vlažnost); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Temperatura:% d Vlaga:% d \ n", temperatura, vlaga); if (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, temperature); } else { ble_ess_update_temp (& m_ess, temperatura); } if (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, vlažnost); } else { ble_ess_update_humid (& m_ess, vlaga); } } updtmrexp = netačno; } }
Testiranje našeg programa pomoću nRF Connect
nRF Connect moćan je Bluetooth niskoenergetski alat koji omogućuje skeniranje i istraživanje BLE perifernih uređaja. nRF Connect za mobitel podržava širok raspon standardnih profila koji su usvojeni za Bluetooth SIG. Pomoću ovoga možemo provjeriti svoj program, nakon instaliranja aplikacije možemo upariti ploču nRF52 s telefonom skeniranjem BLE uređaja u aplikaciji. Unutar atributa Environmental sensing možemo primijetiti kako se vrijednosti temperature i vlažnosti ažuriraju kako je prikazano na slikama u nastavku.
Hariharan Veerappan neovisni je savjetnik koji ima više od 15 godina iskustva u razvoju ugrađenih proizvoda. Pruža savjetodavne usluge u razvoju ugrađenog firmwarea / Linuxa, također pruža korporativne i mrežne treninge. Hariharan je diplomirao inženjerstvo u disciplini Elektronika i komunikacijski inženjering, kroz svoje članke i tutorijale dijeli svoja iskustva i razmišljanja s čitateljima Circuit Digesta.
