- Razvojni komplet nRF52:
- Seggerjev vdelani studio
- DHT11 z nRF52DK
- Kako delati z Bluetooth Low Energy (BLE)?
- Diagram storitve / značilnosti BLE
- Pojasnilo programa nRF52 BLE
- Testiranje našega programa s pomočjo nRF Connect
Fitnes pasovi, pametne ure in druge nosljive naprave postajajo vse bolj priljubljene pri uporabi Bluetooth 5 / Bluetooth Low Energysplošno sprejeti standardi komunikacije. BLE nam pomaga pri izmenjavi podatkov na kratki razdalji z zelo malo moči, kar je zelo pomembno za naprave na akumulator, kot je nosljiv material. Pomaga nam tudi pri nastavitvi brezžičnih mrež BLE mesh, ta funkcija je priročna za naprave za avtomatizacijo doma, kjer mora več naprav komunicirati med seboj v zaprtem okolju. Za izvajanje nekaterih osnovnih funkcij BLE smo že uporabili BLE z Raspberry Pi in BLE z ESP32. Inženirji eksperimentirajo z BLE za oblikovanje prenosnih brezžičnih naprav, ki lahko dolgo delujejo na majhnih baterijah, za delo z BLE pa je na voljo več razvojnih kompletov. V nedavnem pregledu Arduino Nano 33 smo opazili tudi, da ima plošča nRF52840 z BLE zmogljivostmi.
V tej vadnici bomo raziskali še eno razburljivo in priljubljeno razvojno ploščo, imenovano nRF52 DK, za merjenje temperature in vlažnosti z uporabo BLE. Profili za zaznavanje okolja BLE privzeto podpirajo široko paleto okoljskih parametrov, vendar je ta vadnica omejena samo na vrednosti temperature in vlažnosti. Ta rešitev se poveže s pametnim telefonom prek povezave Bluetooth z nizko porabo energije in zagotavlja pogoste posodobitve okoljskih parametrov, npr. Temperature, vlažnosti. Uporabili bomo senzor DHT1, merjenje temperature pa bomo izvedli z ločljivostjo 0,01 stopinje Celzija, vlažnost pa z ločljivostjo 0,01 odstotka.
Razvojni komplet nRF52:
nRF52DK je popolna prototipska platforma za aplikacijo Bluetooth Low Energy in 2,4 GHz Wireless Internet of Things. Razvojni komplet podpira različne standardne nordijske verige orodij, kot so odprtokodna, GCC in komercialna integrirana razvojna okolja, kot so Keil, IAR in Segger Embedded Studio itd. Nordic ponuja tudi popoln komplet za razvoj programske opreme za nRF52, ki vključuje popolno podporo za nRF52DK.
nRF52DK se napaja z mikrokrmilnikom ARM Cortex-M4F ARM nRF52832, ki ima vgrajen 512 KB baterijskega pomnilnika in 64 Kbytes SRAM-a. nRF52DK ima vgrajen razhroščevalec Segger J-Link On Board, ki omogoča lažje in hitrejše odpravljanje napak brez zunanjih / dodatnih naprav za odpravljanje napak jtag. Vključuje tudi priključek, združljiv z Arduino Uno Rev3, ki podpira povezovanje analognih in digitalnih vhodov z mikroprocesorjem, vključuje pa tudi standardne komunikacijske protokole, kot so I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) in UART (Universal Asynchronous Receiver and Transmitter). Ta razvojni komplet je zasnovan z vgrajeno vgrajeno anteno PCB, ki omogoča brezžično komunikacijo kratkega dosega z uporabo Bluetooth Low Energy za povezavo s pametnimi telefoni, prenosniki in tabličnimi računalniki.
Seggerjev vdelani studio
Za programiranje razvojne plošče bomo uporabili Segger Embedded Studio z nRF52. Segger Embedded Studio je močno C / C ++ integrirano razvojno okolje (IDE), namenjeno posebej za razvoj vgrajenih sistemov. To zagotavlja popolno rešitev "vse v enem", ki vsebuje vse, kar je potrebno za vdelano programiranje, razvoj in odpravljanje napak v jeziku C. To vključuje celoten potek dela za programiranje in razvoj vdelanih sistemov, ki je na voljo z vodenjem projektov, urejevalnikom in razhroščevalnikom, ki podpira naprave ARM Cortex. Ta zmogljiv in enostaven za uporabo IDE je popolnoma brezplačen za nordijske stranke s popolno licenco brez kakršnih koli omejitev velikosti kode. IDE lahko prenesete s spodnje povezave,
Prenesite Segger Embedded Studio
DHT11 z nRF52DK
DHT11 je popoln senzor temperature in vlažnosti s komponento za merjenje vlažnosti z uporovnim tipom in komponento za merjenje temperature NTC. Ponuja odlično kakovost, hitrejši odziv in stroškovno učinkovitost. Privzeto so vsi senzorji DHT11 umerjeni v laboratoriju, kar vodi do izjemne natančnosti in zanesljivosti. Komunicira s sistemom enožičnega serijskega vmesnika, druge specifikacije pa so navedene spodaj
Specifikacije DHT11:
- Območje vlažnosti: 20 - 90% RH
- Temperaturno območje: 0 - 50 stopinj Celzija
- Natančnost vlažnosti: ± 5 % RH
- Natančnost temperature: ± 2 ℃
Časovni diagram DHT11:
Branje podatkov s senzorja DHT11 je razmeroma preprosto s pomočjo zgoraj prikazanega časovnega diagrama. Postopek je podoben vsakemu krmilniku in ta senzor smo že uporabljali z drugimi razvojnimi platformami, kot je
- DHT11 senzor z Raspberry Pi
- DHT11 senzor s PIC16F877A
- DHT11 senzor s STM32F103C8
- DHT11 senzor z NodeMCU
Če želite povezati senzor temperature in vlažnosti DHT11 z razvojnim kompletom nRF52, sledite spodnjemu diagramu povezav.
Za priključitev senzorja na ploščo uporabljam priključni modul, zato je moja končna nastavitev videti tako
Diagram poteka za komunikacijo z DHT11:
Spodnji diagram poteka pojasnjuje programski logični tok, ki ga bomo uporabili za komunikacijo med nRF52DK in DHT11
Oblika podatkov:
Kako delati z Bluetooth Low Energy (BLE)?
Da bi razumeli, kako uporabljati funkcijo BLE, moramo razumeti nekaj osnovnih terminologij, ki so razložene spodaj. Če želite izvedeti več o BLE, lahko preberete tudi članek ESP32 BLE
Profil splošnega dostopa (GAP)
Generic Access Profile je v celoti odgovoren za vzpostavitev povezave za komunikacijo med zunanjimi in centralnimi napravami BLE. GAP ponuja tudi različne postopke, vključno z iskanjem / odkrivanjem naprav, vzpostavitvijo povezave na ravni povezave, prekinitvijo povezave, rokovanjem varnostnih funkcij in popolno konfiguracijo naprave. GAP deluje v naslednjih stanjih naprav
Države GAP |
Opis |
Ostani v pripravljenosti |
Začetno stanje naprave ob ponastavitvi |
Oglaševalec |
Oglaševanje naprav s podatki, ki pomagajo pri skeniranju s pobudnikom |
Optični bralnik |
Prejme in pošlje zahtevo za optično branje oglaševalcu |
Pobudnik |
Pošlje zahtevo za povezavo za vzpostavitev povezave |
Suženj / Mojster |
Pri povezavi je naprava kot podrejena, če oglaševalec, glavna, če je pobudnik |
Sloj splošnega profila atributov (GATT)
GATT je kratica za Generic Attribute Profile Layer, odgovoren je za podatkovno komunikacijo med dvema napravama BLE (periferno in centralno). Podatkovna komunikacija je značilna v obliki značilnosti, ki sporočajo in shranjujejo podatke. Naprava BLE ima dve različni vlogi za komunikacijo med napravami, navedeno spodaj,
- GATT Server vsebuje informacije o lastnostih, ki bodo uporabljene za branje in pisanje. V naši vadnici sta senzor DHT11 in razvijalec komplet je naš GATT strežnik.
- Naročnik GATT bere podatke in jih zapisuje iz strežnika GATT. Pametni telefon je odjemalec GATT, ki bere in zapisuje podatke na našo senzorsko ploščo.
Bluetooth SIG
Bluetooth Special Interest Group (SIG) je organizacija za standarde, ki spremlja razvoj standardov Bluetooth in licenciranje tehnologij Bluetooth. Skupina SIG ne proizvaja ali prodaja izdelkov Bluetooth. Določa specifikacijo in standardizacijo Bluetooth. Določajo enolični identifikator za profil nizke porabe energije Bluetooth in ustrezne značilnosti. Specifikacije profila GATT najdete na spodnji povezavi
Specifikacije profila GATT
Na podlagi specifikacije GATT, podane v zgornji povezavi, smo zbrali edinstvene identifikatorje, ki so potrebni za naš projekt in so navedeni v spodnji tabeli.
Profil / značilnosti |
UUID |
GAP (splošni dostop) |
0x1800 |
GATT (generični atribut) |
0x1801 |
ESS (zaznavanje okolja) |
0x181A |
Temperatura |
0x2A6E |
Vlažnost |
0x2A6F |
Diagram storitve / značilnosti BLE
BLE UUID
UUID |
16-bitna vrednost |
128-bitni UUID |
ESS storitev |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Vlažnost Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Temperaturne značilnosti
Nepremičnina |
Opis |
Enota |
Stopinja Celzija z ločljivostjo 0,01 stopinje |
Oblika |
sint16 |
UUID |
0x2A6E |
Decimalna eksponenta |
2. |
Preberite |
Obvezno |
Značilnosti vlažnosti
Nepremičnina |
Opis |
Enota |
Odstotek z ločljivostjo 0,01 odstotka |
Oblika |
uint16 |
UUID |
0x2A6F |
Decimalna eksponenta |
2. |
Preberite |
Obvezno |
Pojasnilo programa nRF52 BLE
Za programiranje našega razvojnega kompleta nRF52 bomo uporabili nRF5 SDK. nRF5 SDK je celoten komplet za razvoj programske opreme, ki je integriran s številnimi profili Bluetooth Low Energy, serijskim pretvornikom GATT in podporo gonilnikom za vse zunanje naprave na SoC-jih serije nRF5. Ta SDK razvijalcem pomaga, da z mikrokrmilniki serij nRF52 in nRF51 razvijejo popolne, zanesljive in varne aplikacije z nizko porabo energije Bluetooth. Celoten program lahko prenesete od tukaj, razlaga kode je naslednja.
DATA pin DHT11 nastavite kot vhod na nrf52 z možnostjo pull up. Stanje zatiča mora biti visoko, da potrdi, da nRF52 zagotavlja ustrezen PULLUP za podatkovni zatič DHT11
/ * nastavite na vhod in preverite, ali se signal potegne gor * / Data_SetInput (); DelayUSec (50); if (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Ustvari signal START iz mikrokrmilnika nRF52 in preveri signal za potrditev.
/ * pošlji signal za zagon * / Data_SetOutput (); Data_ClrVal (); DelayMSec (20); / * naj bo signal nizek vsaj 18 ms * / Data_SetInput (); DelayUSec (50); / * preverite signal za potrditev * / if (Data_GetVal ()! = 0) {/ * senzor mora signal potegniti nizko * / return DHT11_NO_ACK_0; } / * počakajte največ 100 us na signal za zagon s senzorja * / cntr = 18; while (Data_GetVal () == 0) {/ * počakajte, da se signal dvigne * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_1; / * tukaj mora biti signal za ACK povišan * /}} / * počakajte, da se spet spusti, konec zaporedja ack * / cntr = 18; while (Data_GetVal ()! = 0) {/ * počakajte, da signal pade * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_0; / * tukaj mora biti signal spet na nič * /}}
Zdaj preberite 40 bitov podatkov, ki vsebujejo 2 bajta temperature, 2 bajta vlage in 1 bajt kontrolne vsote.
/ * zdaj preberite 40-bitne podatke * / i = 0; podatki = 0; loopBits = 40; naredite {cntr = 11; / * počakajte največ 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * počakajte največ 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_1; }} podatki << = 1; / * naslednji podatkovni bit * / if (cntr <10) {/ * podatkovni signal visok> 30 us ==> podatkovni bit 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * naslednji bajt * / medpomnilnik = podatki; i ++; podatki = 0; }} while (- loopBits! = 0);
Podatke potrdite s pomočjo kontrolne vsote.
/ * test CRC * / if ((uint8_t) (vmesnik + vmesnik + vmesnik + vmesnik)! = vmesnik) {return DHT11_BAD_CRC; }
Manipulirajte in shranjujte temperaturo in vlago
/ * shrani vrednosti podatkov za klicatelja * / vlažnost = ((int) medpomnilnik) * 100 + medpomnilnik; temperatura = ((int) pufer) * 100 + pufer;
Inicializirajte storitev zapisovalnika SDK nRF5. NRF52 SDK je opremljen z nadzornim vmesnikom za beleženje, imenovanim nrf_log, in uporablja privzeto ozadje za beleženje informacij. Privzeti backend bodo serijska vrata. Tukaj smo inicializacijo tako nrf_log nadzorni vmesnik in nrf_log privzete vmesnike, kot tudi.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (koda napake); NRF_LOG_DEFAULT_BACKENDS_INIT ();
nRF52 SDK ima funkcijo časovnika aplikacij. Modul aplikacijskega časovnika omogoča ustvarjanje več primerkov časovnika na podlagi zunanje naprave RTC1. Tu inicializiramo časovni modul aplikacije nRF5. V tej rešitvi se uporabljata dva časovnika aplikacij za in interval posodabljanja podatkov.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (koda napake);
nRF52 SDK ima popoln modul za upravljanje napajanja, saj morajo naprave BLE več mesecev delati na Coin celični bateriji. Upravljanje porabe ima ključno vlogo v aplikacijah BLE. Modul za upravljanje napajanja nRF52 popolnoma obravnava enako. Tu inicializiramo modul za upravljanje napajanja SDK nRF5
ret_code_t koda napake; koda napake = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (koda napake);
nRF52 SDK ima vgrajeno šestnajstiško datoteko vdelane programske opreme Nordic Soft Device, ki vsebuje nizkoenergijski centralni in periferni niz Bluetooth. Ta visoko kvalificirani sklad protokolov vključuje GATT, GAP, ATT, SM, L2CAP in Link Layer. Tu sledimo zaporedju inicializacije, ki je inicializiral radijski sklad nRF5 BLE (Nordic Soft Device)
ret_code_t koda napake; koda napake = nrf_sdh_enable_request (); APP_ERROR_CHECK (koda napake); // Konfigurirajte sklad BLE z uporabo privzetih nastavitev. // Pridobi začetni naslov RAM-a aplikacije. uint32_t ram_start = 0; err_code = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG, & ram_start); APP_ERROR_CHECK (koda napake); // Omogoči sklad BLE. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (koda napake); // Registriranje vodnika za dogodke BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP je odgovoren za skeniranje / odkrivanje naprav, vzpostavitev povezave, prekinitev povezave, zagon varnostnih funkcij in konfiguracijo. GAP ima ključne parametre povezave, kot so interval povezave, podrejena zakasnitev, časovna omejitev nadzora itd. S tem se inicializirajo parametri povezave generičnega profila dostopa
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 (koda napake); 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; err_code = sd_ble_gap_ppcp_set (& gap_conn_params); APP_ERROR_CHECK (koda napake);
GATT je odgovoren za podatkovno komunikacijo med zunanjimi in centralnimi napravami BLE. Modul nRF52 GATT je koristen za pogajanja in spremljanje največje velikosti ATT_MTU. Tu inicializiramo generični atributni modul nRF52 SDK, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (koda napake);
GATT izvaja podatkovno komunikacijo v obliki storitev in značilnosti. Tu inicializiramo storitve zaznavanja okolja GATT, kar vključuje inicializacijo lastnosti, kot sta temperatura in vlaga.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Inicializacija modula za pisanje v čakalni vrsti. qwr_init.error_handler = nrf_qwr_error_handler; koda napake = nrf_ble_qwr_init (& m_qwr, & qwr_init); APP_ERROR_CHECK (koda napake); m_ess.notif_write_handler = ble_ess_notif_write_handler; koda napake = ble_ess_init (& m_ess); APP_ERROR_CHECK (koda napake);
Oglaševanje igra ključno vlogo v okolju aplikacije BLE. Paketi vključujejo informacije o vrsti naslova, vrsti oglaševanja, oglaševalskih podatkih, podatkih proizvajalca naprave in podatkih o odzivu skeniranja. nRF52 SDK, predstavljen z oglaševalskim modulom. Tu izvedemo inicializacijo oglaševalskega modula s parametri.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Izdelava in nastavitev oglaševalskih podatkov. 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 (koda napake); err_code = ble_advdata_encode (& srdata, m_adv_data.scan_rsp_data.p_data, & m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK (koda napake); ble_gap_adv_params_t adv_params; // Nastavitev oglaševalskih parametrov. 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 (koda napake);
Povezava BLE bo obdelana in nadzorovana z različnimi parametri povezave, kot so zakasnitev posodobitve prvih parametrov povezave, naslednje zaporedne zamude, število posodobitev, funkcija povratnega klica upravljavca dogodkov povezave in obdelava dogodkov povratne klice napake povezave. Tu izvedemo inicializacijo parametrov vzpostavitve BLE Connection in obdelovalca dogodkov povratnega klica za dogodke povezave in dogodke napak.
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; koda napake = ble_conn_params_init (& cp_init); APP_ERROR_CHECK (koda napake);
Po zaključku inicializacije sistema začnemo z oglaševanjem imena naprave BLE in informacij o njeni zmogljivosti. Od tu je ta zunanja naprava vidna na seznamu za pregledovanje pametnega telefona Ble.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (koda napake);
Glavna zanka deluje v razmaku 2 sekund, odčitava temperaturo in vlažnost ter posodablja priključeno pametno napravo z branjem ali obvestilom
for (;;) { uint16_t temperatura, vlaga; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); če (updtmrexp) { dhtErrCode = DHTxx_Read (& temperatura, & vlažnost); če (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Temperatura:% d Vlažnost:% 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); } če je (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, vlažnost); } else { ble_ess_update_humid (& m_ess, vlažnost); } } updtmrexp = false; } }
Testiranje našega programa s pomočjo nRF Connect
nRF Connect je močno Bluetooth-orodje z nizko porabo energije, ki omogoča optično branje in raziskovanje zunanjih naprav, ki podpirajo BLE. nRF Connect za mobilne naprave podpira široko paleto standardnih profilov, ki jih sprejema Bluetooth SIG. Z uporabo tega lahko preverimo svoj program, po namestitvi aplikacije lahko ploščo nRF52 povežemo s svojim telefonom tako, da v aplikaciji poiščemo naprave BLE. Znotraj atributa zaznavanja okolja lahko opazimo, da se vrednosti temperature in vlažnosti posodabljajo, kot je prikazano na spodnjih slikah.
Hariharan Veerappan je neodvisni svetovalec z več kot 15-letnimi izkušnjami pri razvoju vdelanih izdelkov. Ponuja svetovalne storitve pri razvoju vdelane programske opreme / Linuxa, nudi tudi korporativno in spletno usposabljanje. Hariharan je diplomiral iz inženirstva na področju elektronike in komunikacijske tehnike, s svojimi članki in vajami deli svoje izkušnje in misli z bralci Circuit Digest.