- Vývojová sada nRF52:
- Segger Embedded Studio
- DHT11 s nRF52DK
- Jak pracovat s Bluetooth Low Energy (BLE)?
- Schéma služeb / charakteristik BLE
- Vysvětlení programu nRF52 BLE
- Testování našeho programu pomocí nRF Connect
U fitness pásů, chytrých hodinek a dalších nositelných zařízení je používání Bluetooth 5 / Bluetooth Low Energy stále populárnějšíkomunikační standardy jsou široce přijímány. BLE nám pomáhá vyměňovat si data na krátkou vzdálenost s velmi malým výkonem, což je velmi důležité pro zařízení napájená z baterie, jako jsou nositelná zařízení. Pomáhá nám také nastavit bezdrátové sítě BLE mesh, tato funkce se hodí pro zařízení domácí automatizace, kde musí více zařízení navzájem komunikovat v uzavřeném prostředí. K provádění některých základních funkcí BLE jsme již použili BLE s Raspberry Pi a BLE s ESP32. Inženýři experimentují s BLE, aby navrhli přenosná bezdrátová zařízení, která mohou po dlouhou dobu běžet na malé baterie a pro práci s BLE je k dispozici několik vývojových sad. V naší nedávné recenzi na Arduino Nano 33 jsme si také všimli, že deska má nRF52840 s funkcemi BLE.
V tomto kurzu prozkoumáme další vzrušující a populární vývojovou desku s názvem nRF52 DK pro měření teploty a vlhkosti pomocí BLE. Ve výchozím nastavení profily snímání prostředí BLE podporují širokou škálu parametrů prostředí, ale tento výukový program je omezen pouze na hodnoty teploty a vlhkosti. Toto řešení je spojeno se smartphonem přes Bluetooth s nízkou spotřebou energie a poskytuje časté aktualizace týkající se parametrů prostředí, tj. Teploty, vlhkosti. Budeme používat snímač DHT1 a měření teploty bude prováděno s rozlišením 0,01 stupně Celsia a měření vlhkosti bude prováděno s rozlišením 0,01 procenta.
Vývojová sada nRF52:
nRF52DK je kompletní prototypová platforma pro aplikaci Bluetooth Low Energy a 2,4 GHz bezdrátový internet věcí. Vývojová sada podporuje různé standardní nástroje Nordic Toolchain, jako je open-source, GCC a komerční integrovaná vývojová prostředí, jako jsou Keil, IAR a Segger Embedded Studio atd. Nordic také poskytuje plnohodnotnou sadu pro vývoj softwaru pro nRF52, která zahrnuje úplnou podporu pro nRF52DK.
nRF52DK je poháněn nRF52832 ARM Cortex-M4F Microcontroller, který je integrován 512 kB Flash Memor a 64 kB SRAM. nRF52DK má integrovaný Segger J-Link On Board debugger, který poskytuje jednodušší a rychlejší ladění bez externích / dalších ladicích zařízení jtag. Obsahuje také konektor kompatibilní s Arduino Uno Rev3, který podporuje propojení analogových a digitálních vstupů s mikroprocesorem a zahrnuje také standardní komunikační protokoly jako I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) a UART (Universal Asynchronous Receiver and Transmitter). Tato vývojová sada je navržena s integrovanou vestavěnou anténou PCB, která zajišťuje bezdrátovou komunikaci na krátkou vzdálenost pomocí technologie Bluetooth Low Energy pro připojení k chytrému telefonu, notebookům a tabletům.
Segger Embedded Studio
K naprogramování vývojové desky použijeme Segger Embedded Studio s nRF52. Segger Embedded Studio je výkonné integrované vývojové prostředí (IDE) C / C ++ zaměřené speciálně na vývoj vestavěných systémů. To poskytuje kompletní řešení vše v jednom obsahující vše potřebné pro vložené programování v C, vývoj a ladění. To zahrnuje kompletní pracovní postup pro programování a vývoj vestavěných systémů, který zahrnuje správu projektů, editor a debugger podporující zařízení ARM Cortex. Toto výkonné a snadno použitelné IDE je zcela zdarma pro severské zákazníky s plnou licencí bez omezení velikosti kódu. IDE lze stáhnout z níže uvedeného odkazu,
Stáhněte si Segger Embedded Studio
DHT11 s nRF52DK
DHT11 je plně vybavený snímač teploty a vlhkosti se složkou pro měření vlhkosti odporového typu a složkou pro měření teploty typu NTC. Nabízí vynikající kvalitu, rychlejší odezvu a hospodárnost. Ve výchozím nastavení jsou všechny senzory DHT11 kalibrovány v laboratoři, což vede k extrémní přesnosti a spolehlivosti. Komunikuje pomocí systému Single-Wire Serial Interface a další specifikace jsou uvedeny níže
Specifikace DHT11:
- Rozsah vlhkosti: 20 - 90% RH
- Teplotní rozsah: 0-50 stupňů Celsia
- Přesnost vlhkosti: ± 5 ° RH
- Přesnost teploty: ± 2 ° C
Schéma časování DHT11:
Čtení dat ze snímače DHT11 je relativně jednoduché pomocí výše uvedeného časovacího diagramu. Postup je podobný jakémukoli řadiči a tento snímač jsme již použili s jinými vývojovými platformami
- Senzor DHT11 s Raspberry Pi
- Senzor DHT11 s PIC16F877A
- Senzor DHT11 s STM32F103C8
- Senzor DHT11 s NodeMCU
Chcete-li propojit snímač teploty a vlhkosti DHT11 s vývojovou sadou nRF52, postupujte podle níže uvedeného schématu připojení.
K připojení senzoru k mé desce používám konektorový modul, takže moje konečné nastavení vypadá takto
Vývojový diagram pro komunikaci s DHT11:
Níže uvedený vývojový diagram vysvětluje logický tok programu, který budeme používat ke komunikaci mezi nRF52DK a DHT11
Datový formát:
Jak pracovat s Bluetooth Low Energy (BLE)?
Abychom pochopili, jak používat funkci BLE, musíme porozumět několika základním terminologiím, které jsou vysvětleny níže. Můžete si také přečíst článek ESP32 BLE a dozvědět se více o BLE
Obecný profil přístupu (GAP)
Obecný přístupový profil nese plnou odpovědnost za navázání spojení pro komunikaci mezi periferními zařízeními BLE a centrálními zařízeními. GAP také poskytuje různé postupy, včetně skenování / zjišťování zařízení, navazování spojení mezi linkami, ukončení spojení, předávání bezpečnostních funkcí a plnohodnotné konfigurace zařízení. GAP funguje v následujících stavech zařízení
Státy GAP |
Popis |
Pohotovostní |
Počáteční stav zařízení po resetu |
Inzerent |
Reklama na zařízení s daty, která pomáhají při skenování iniciátorů |
Skener |
Přijme a odešle požadavek na skenování inzerentovi |
Iniciátor |
Odešle žádost o připojení k navázání spojení |
Slave / Master |
Při připojení zařízení jako otrok, pokud je inzerent, mistr, pokud je iniciátor |
Vrstva profilu obecného atributu (GATT)
GATT je zkratka pro Generic Attribute Profile Layer, je zodpovědná za datovou komunikaci mezi dvěma zařízeními BLE (Peripheral & Central). Datová komunikace je charakterizována ve formě charakteristik, které komunikují a ukládají data. Zařízení BLE hraje dvě různé role pro komunikaci zařízení uvedené níže,
- GATT Server obsahuje informace o vlastnostech, které budou použity ke čtení a zápisu. V našem tutoriálu jsou senzor DHT11 a vývojář. sada je náš GATT Server.
- Klient GATT čte a zapisuje data z / na server GATT. Smartphone je klient GATT, který čte a zapisuje data do naší desky senzoru.
Bluetooth SIG
Bluetooth Special Interest Group (SIG) je organizace pro standardy, která sleduje vývoj standardů Bluetooth a licencování technologií Bluetooth. Skupina SIG nevyrábí ani neprodává žádné produkty Bluetooth. Definuje specifikaci a standardizaci Bluetooth. Definují jedinečný identifikátor pro nízkoenergetický profil Bluetooth a příslušné charakteristiky. Specifikace profilu GATT najdete na níže uvedeném odkazu
Specifikace profilu GATT
Na základě specifikace GATT uvedené ve výše uvedeném odkazu jsme shromáždili jedinečné identifikátory požadované pro náš projekt, které jsou uvedeny v tabulce níže.
Profil / charakteristika |
UUID |
GAP (obecný přístup) |
0x1800 |
GATT (obecný atribut) |
0x1801 |
ESS (Environment Sensing) |
0x181A |
Teplota |
0x2A6E |
Vlhkost vzduchu |
0x2A6F |
Schéma služeb / charakteristik BLE
BLE UUID
UUID |
16bitová hodnota |
128bitové UUID |
Služba ESS |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Vlhkost Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Teplotní charakteristiky
Vlastnictví |
Popis |
Jednotka |
Stupeň Celsia s rozlišením 0,01 stupně |
Formát |
sint16 |
UUID |
0x2A6E |
Desetinná složka |
2 |
Číst |
Povinné |
Vlhkostní charakteristiky
Vlastnictví |
Popis |
Jednotka |
Procento s rozlišením 0,01 procenta |
Formát |
uint16 |
UUID |
0x2A6F |
Desetinná složka |
2 |
Číst |
Povinné |
Vysvětlení programu nRF52 BLE
K programování naší vývojové sady nRF52 budeme používat sadu nRF5 SDK. nRF5 SDK je kompletní sada pro vývoj softwaru integrovaná s četnými profily Bluetooth Low Energy, GATT Serializer a podporou ovladačů pro všechny periferie na SoC řady nRF5. Tato sada SDK pomáhá vývojářům vytvářet plnohodnotné, spolehlivé a bezpečné aplikace s nízkou spotřebou energie Bluetooth pomocí mikrokontrolérů řady nRF52 a nRF51. Celý program lze stáhnout zde, vysvětlení kódu je následující.
Nakonfigurujte datový pin DHT11 jako vstup na nrf52 s povolením pull up. Stav kolíku by měl být vysoký, aby se potvrdilo, že nRF52 poskytuje správné PULLUP pro datový kolík DHT11
/ * nastaven na vstup a zkontrolovat, zda je signál vytažen nahoru * / Data_SetInput (); DelayUSec (50); if (Data_GetVal () == 0) {návrat DHT11_NO_PULLUP; }
Generujte signál START z mikrokontroléru nRF52 a zkontrolujte potvrzovací signál.
/ * odeslat počáteční signál * / Data_SetOutput (); Data_ClrVal (); DelayMSec (20); / * udržovat nízký signál po dobu nejméně 18 ms * / Data_SetInput (); DelayUSec (50); / * zkontrolujte potvrzovací signál * / if (Data_GetVal ()! = 0) {/ * signál musí být senzorem stažen nízko * / návrat DHT11_NO_ACK_0; } / * počkejte max. 100 us na potvrzovací signál ze snímače * / cntr = 18; while (Data_GetVal () == 0) {/ * počkejte, až se signál zvedne * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_1; Signál / * by měl být pro ACK nahoře zde * /}} / * počkat, až se opět sníží, konec sekvence ack * * cntr = 18; while (Data_GetVal ()! = 0) {/ * počkejte, dokud signál neklesne * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_0; Signál / * by zde měl být opět na nule * /}}
Nyní si přečtěte 40 bitů dat, která obsahují 2 bajty teploty, 2 bajty vlhkosti a 1 bajt kontrolního součtu.
/ * nyní čte 40bitová data * / i = 0; data = 0; loopBits = 40; do {cntr = 11; / * počkejte max. 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * počkejte max. 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_1; }} data << = 1; / * další datový bit * / if (cntr <10) {/ * vysoký datový signál> 30 us ==> datový bit 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * další bajt * / buffer = data; i ++; data = 0; }} while (- loopBits! = 0);
Ověřte data pomocí kontrolního součtu.
/ * test CRC * / if ((uint8_t) (buffer + buffer + buffer + buffer)! = buffer) {return DHT11_BAD_CRC; }
Manipulujte a skladujte teplotu a vlhkost
/ * ukládat hodnoty dat pro volajícího * / vlhkost = ((int) buffer) * 100 + buffer; teplota = ((int) pufr) * 100 + pufr;
Inicializujte službu Logger nRF5 SDK. Sada nRF52 SDK je vybavena ovládacím rozhraním protokolování nazvaným nrf_log a pro protokolování informací používá výchozí backend. Výchozí back-end bude sériový port. Zde se inicializovat oba nrf_log ovládací rozhraní a nrf_log výchozí backends stejně.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
Sada nRF52 SDK má funkci časovače aplikace. Modul časovače aplikace umožňuje vytvářet více instancí časovačů založených na periferních zařízeních RTC1. Zde inicializujeme modul časovače aplikace nRF5. V tomto řešení se používají dva aplikační časovače a interval aktualizace dat.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
Sada nRF52 SDK má plně funkční modul správy napájení, protože zařízení BLE musí pracovat několik měsíců na knoflíkové baterii. Správa napájení hraje v aplikacích BLE zásadní roli. Modul řízení spotřeby nRF52 zvládá totéž. Zde inicializujeme modul řízení spotřeby sady nRF5 SDK
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
Sada nRF52 SDK má vestavěný hexadecimální soubor firmwaru Nordic Soft Device, který obsahuje centrální a periferní zásobník Bluetooth s nízkou energií. Tento vysoce kvalifikovaný zásobník protokolů zahrnuje GATT, GAP, ATT, SM, L2CAP a Link Layer. Zde sledujeme inicializační sekvenci, která inicializovala nRF5 BLE Radio Stack (Nordic Soft Device)
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (err_code); // Nakonfigurujte zásobník BLE pomocí výchozího nastavení. // Načte počáteční adresu RAM aplikace. uint32_t ram_start = 0; err_code = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG, & ram_start); APP_ERROR_CHECK (err_code); // Povolit BLE stack. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Zaregistrujte obslužnou rutinu pro události BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP je zodpovědný za skenování / zjišťování zařízení, navazování spojení, ukončení spojení, zahájení bezpečnostních funkcí a konfiguraci. GAP obsahuje klíčové parametry připojení, jako je interval připojení, latence slave, časový limit dohledu atd. Tím se inicializují parametry připojení obecného profilu přístupu
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 (err_code); 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 (err_code);
GATT je zodpovědná za datovou komunikaci mezi periferními a centrálními zařízeními BLE. Modul nRF52 GATT je užitečný pro vyjednávání a sledování maximální velikosti ATT_MTU. Zde inicializujeme modul nRF52 SDK Generic Attribute Module, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
GATT provádí datovou komunikaci ve formě služeb a charakteristik. Zde inicializujeme služby snímání prostředí GATT, které zahrnují inicializaci charakteristik, jako je teplota a vlhkost.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Inicializace modulu zápisu ve frontě. qwr_init.error_handler = nrf_qwr_error_handler; err_code = nrf_ble_qwr_init (& m_qwr, & qwr_init); APP_ERROR_CHECK (err_code); m_ess.notif_write_handler = ble_ess_notif_write_handler; err_code = ble_ess_init (& m_ess); APP_ERROR_CHECK (err_code);
Reklama hraje v prostředí aplikace BLE zásadní roli. pakety obsahují informace o typu adresy, typu reklamy, reklamních datech, datech specifických pro výrobce zařízení a datech odezvy skenování. Sada nRF52 SDK s reklamním modulem. Zde provádíme inicializaci reklamního modulu s parametry.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Vytváření a nastavování reklamních údajů. 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 (err_code); err_code = ble_advdata_encode (& srdata, m_adv_data.scan_rsp_data.p_data, & m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK (err_code); ble_gap_adv_params_t adv_params; // Nastavení reklamních parametrů. 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 (err_code);
Připojení BLE bude zpracováno a monitorováno pomocí různých parametrů připojení, jako je zpoždění aktualizace prvních parametrů připojení, další po sobě jdoucí zpoždění, počet aktualizací, funkce zpětného volání obslužné rutiny události připojení a obslužná rutina události zpětného volání chyby připojení. Zde provádíme inicializaci parametrů založení BLE připojení a obslužnou rutinu události zpětného volání pro události připojení a chybové události.
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; err_code = ble_conn_params_init (& cp_init); APP_ERROR_CHECK (err_code);
Po dokončení inicializace systému zde začneme inzerováním názvu zařízení BLE a informací o jeho schopnostech. Odtud lze tuto periferii vidět přes seznam Ble skenování smartphonu.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Hlavní smyčka běží v intervalu 2 sekund, čte teplotu a vlhkost a aktualizuje připojené chytré zařízení pomocí čtení nebo upozornění
pro (;;) { uint16_t teplota, vlhkost; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); if (updtmrexp) { dhtErrCode = DHTxx_Read (& teplota, & vlhkost); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Teplota:% d Vlhkost:% d \ n", teplota, vlhkost); if (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, temperature); } else { ble_ess_update_temp (& m_ess, teplota); } if (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, vlhkost); } else { ble_ess_update_humid (& m_ess, vlhkost); } } updtmrexp = false; } }
Testování našeho programu pomocí nRF Connect
nRF Connect je výkonný Bluetooth nástroj s nízkou spotřebou energie, který umožňuje skenovat a zkoumat periferní zařízení s povoleným BLE. nRF Connect pro mobilní zařízení podporuje širokou škálu standardních profilů přijatých technologií Bluetooth SIG. Pomocí toho můžeme ověřit náš program, po instalaci aplikace můžeme spárovat desku nRF52 s naším telefonem skenováním zařízení BLE v aplikaci. Uvnitř atributu Snímání prostředí si můžeme všimnout aktualizace hodnot teploty a vlhkosti, jak je znázorněno na obrázcích níže.
Hariharan Veerappan je nezávislý konzultant, který má více než 15 let zkušeností s vývojem vestavěných produktů. Poskytuje poradenské služby při vývoji vestavěného firmwaru / Linuxu, poskytuje také firemní a online školení. Hariharan je držitelem bakalářského titulu v oboru elektroniky a komunikačního inženýrství, prostřednictvím svých článků a cvičení sdílí své zkušenosti a myšlenky se čtenáři Circuit Digest.