- nRF52 Development Kit:
- Segger Embedded Studio
- DHT11 kasama ang nRF52DK
- Paano gagana sa Bluetooth Low Energy (BLE)?
- BLE Service / Characteristics Diagram
- nRF52 BLE Program Explanation
- Pagsubok sa aming Programa gamit ang nRF Connect
Sa Fitness Bands, Smartwatches at iba pang mga naisusuot na aparato na lalong nagiging popular ang paggamit ng Bluetooth 5 / Bluetooth Low Energypamantayan ng komunikasyon ay malawak na pinagtibay. Tinutulungan kami ng BLE na makipagpalitan ng data sa isang maikling distansya na may napakakaunting lakas, na napakahalaga para sa mga aparatong pinapatakbo ng baterya tulad ng mga naisusuot. Tinutulungan din kami na mag-set up ng mga wireless BLE mesh network, ang tampok na ito ay magagamit para sa mga aparato sa pag-automate ng bahay kung saan maraming mga aparato ang kailangang makipag-usap sa bawat isa sa isang saradong kapaligiran. Gumamit na kami ng BLE sa Raspberry Pi at BLE sa ESP32 upang maisagawa ang ilang pangunahing mga pagpapaandar ng BLE. Ang mga inhinyero ay nag-eeksperimento sa BLE upang mag-disenyo ng mga portable wireless device na maaaring tumakbo nang mahabang panahon sa mga maliliit na baterya at, maraming magagamit na mga kit sa pag-unlad na magagamit upang gumana sa BLE. Sa aming kamakailang pagsusuri sa Arduino Nano 33, napansin din namin na ang board ay may nRF52840 na may mga kakayahan sa BLE.
Sa tutorial na ito, susuriin namin ang isa pang kapanapanabik at tanyag na development board na tinawag na nRF52 DK upang masukat ang Temperatura at Humidity gamit ang BLE. Bilang default, sinusuportahan ng BLE Environment Sensing Profiles ang isang malawak na hanay ng mga parameter ng kapaligiran ngunit ang tutorial na ito ay limitado lamang sa mga halagang temperatura at halumigmig. Ang solusyon na ito ay kumokonekta sa isang Smartphone na mas mababa sa enerhiya ng Bluetooth at nagbibigay ng isang madalas na pag-update patungkol sa mga parameter ng kapaligiran ie Temperatura, Humidity. Gagamitin namin ang sensor ng DHT1 at ang pagsukat sa Temperatura ay gagawin sa isang resolusyon na 0.01 degree Celsius at ang pagsukat ng Humidity ay gagawin sa isang resolusyon na 0.01 porsyento.
nRF52 Development Kit:
Ang nRF52DK ay isang kumpletong platform ng prototyping para sa Bluetooth Low Energy at 2.4 GHz Wireless Internet of Things application. Sinusuportahan ng development kit ang iba't ibang pamantayang mga Nordic Toolchain tulad ng open-source, GCC at mga komersyal na integrated development environment tulad ng Keil, IAR at Segger Embedded Studio, atbp. Nagbibigay din ang Nordic ng isang kumpletong kit para sa pag-unlad ng software para sa nRF52, kasama ang kumpletong suporta para sa nRF52DK.
Ang nRF52DK ay pinalakas ng nRF52832 ARM Cortex-M4F Microcontroller, na isinama sa 512Kbytes ng Flash Memor at 64 Kbytes ng SRAM. Ang nRF52DK ay may isang isinamang Segger J-Link On Board debugger, na nagbibigay ng isang mas madali at mas mabilis na pag-debug nang walang isang panlabas / karagdagang mga aparato ng pag-debug ng jtag. Kasama rin dito ang katugmang konektor ng Arduino Uno Rev3, na sumusuporta sa pag-interfacing ng analog at digital na mga input sa microprocessor at nagsasama rin ito ng mga karaniwang mga protocol sa komunikasyon tulad ng, I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) at UART (Universal Asynchronous Receiver at Transmitter). Ang development kit na ito ay dinisenyo gamit ang isang integrated in-built PCB antena na nagbibigay ng maikling-saklaw na wireless na komunikasyon gamit ang Bluetooth Low Energy para sa pagkonekta sa Smart Phone, Laptops at Tablet.
Segger Embedded Studio
Upang ma-program ang development board, gagamitin namin ang Segger Embedded Studio na may nRF52. Ang Segger Embedded Studio ay isang malakas na C / C ++ integrated environment ng pag-unlad (IDE) na partikular na nai-target para sa naka-embed na mga pag-unlad ng system. Nagbibigay ito ng isang kumpletong all-in-one na solusyon na naglalaman ng lahat ng kinakailangan para sa naka-embed na C na programa, pag-unlad at pag-debug. Kasama rito ang kumpletong daloy ng trabaho para sa naka-embed na mga pag-program ng system at pag-unlad, na itinampok sa pamamahala ng proyekto, editor, debugger na sumusuporta sa mga ARM Cortex device. Ang malakas at madaling gamitin na IDE na ito ay ganap na libre para sa mga customer sa Nordic na may buong lisensya nang walang anumang mga paghihigpit sa laki ng code. Maaaring ma-download ang IDE mula sa ibinigay na link sa ibaba,
I-download ang Segger Embedded Studio
DHT11 kasama ang nRF52DK
Ang DHT11 ay isang buong tampok na Temperatura at Humidity Sensor na may isang Resistive Type Humidity Sukat na Component at isang uri ng NTC na Sukat ng Pagsukat ng Temperatura. Nag-aalok ito ng mahusay na kalidad, mas mabilis na tugon, at pagiging epektibo sa gastos. Bilang default, ang lahat ng mga sensor ng DHT11 ay naka-calibrate sa lab na humahantong sa matinding katumpakan at pagiging maaasahan. Nakikipag-usap ito gamit ang Single-Wire Serial Interface system at iba pang mga pagtutukoy na ibinibigay sa ibaba
Mga pagtutukoy ng DHT11:
- Saklaw ng Humidity: 20 - 90% RH
- Saklaw ng Temperatura: 0 - 50-degree celsius
- Katumpakan ng Humidity: ± 5 % RH
- Katumpakan ng Temperatura: ± 2 ℃
Timing Diagram ng DHT11:
Ang pagbabasa ng data mula sa sensor ng DHT11 ay medyo simple gamit ang diagram ng tiyempo na ipinakita sa itaas. Ang pamamaraan ay katulad ng anumang controller at nagamit na namin ang sensor na ito sa iba pang mga platform ng pag-unlad tulad ng
- DHT11 Sensor na may Raspberry Pi
- DHT11 Sensor na may PIC16F877A
- DHT11 Sensor na may STM32F103C8
- DHT11 sensor na may NodeMCU
Upang mai-interface ang sensor ng Temperatura at Humidity ng DHT11 gamit ang nRF52 Development Kit, sundin ang diagram ng koneksyon na ibinigay sa ibaba.
Gumagamit ako ng isang module ng konektor upang ikonekta ang sensor sa aking board, kaya ganito ang aking panghuling set-up
Flow Chart para sa pakikipag-usap sa DHT11:
Ipinapaliwanag ng tsart ng daloy sa ibaba ang lohikal na daloy ng programa na gagamitin namin upang makipag-usap sa pagitan ng nRF52DK at DHT11
Format ng Data:
Paano gagana sa Bluetooth Low Energy (BLE)?
Upang maunawaan kung paano gamitin ang tampok na BLE, kailangan naming maunawaan ang ilang pangunahing mga terminolohiya na ipinaliwanag sa ibaba, maaari mo ring basahin ang artikulo ng ESP32 BLE upang malaman ang higit pa tungkol sa BLE
Generic Access Profile (GAP)
Hawak ng Generic Access Profile ang kumpletong responsibilidad na maitaguyod ang koneksyon para sa komunikasyon sa pagitan ng BLE peripheral at Central Devices. Nagbibigay din ang GAP ng iba't ibang mga pamamaraan kabilang ang pag-scan ng aparato / pagtuklas, pagtatatag ng link-layer, pagwawakas ng link, pag-handshake ng mga tampok sa seguridad at ganap na pagsasaayos ng aparato. Gumagana ang GAP sa mga sumusunod na estado ng aparato
Mga Estadong GAP |
Paglalarawan |
Standby |
Paunang estado ng aparato sa pag-reset |
Advertiser |
Pag-a-advertise ng aparato na may data na makakatulong para sa pag-scan ng initiator |
Scanner |
Natatanggap ang at nagpapadala ng kahilingan sa pag-scan sa advertiser |
Inisyador |
Nagpadala ng isang kahilingan sa koneksyon upang magtaguyod ng isang link |
Alipin / Guro |
Sa koneksyon, aparato bilang isang alipin kung advertiser, master kung isang nagpasimula |
Lapad ng Profile ng Generic na Katangian (GATT)
Maikli ang GATT para sa Lapad ng Profile ng Generic na Katangian, responsable ito para sa komunikasyon sa data sa pagitan ng dalawang mga aparato na BLE (Peripheral & Central). Ang komunikasyon sa data ay nailalarawan sa anyo ng mga katangian, na nakikipag-usap at nag-iimbak ng data. Gumaganap ang aparato ng BLE ng dalawang magkakaibang papel para sa komunikasyon ng aparato na ibinigay sa ibaba,
- Naglalaman ang GATT Server ng impormasyon ng mga katangian na magagamit upang basahin at isulat. Sa aming tutorial, ang sensor ng DHT11, at ang dev. ang kit ay ang aming GATT Server.
- Basahin at isusulat ng GATT Client ang data mula sa / papunta sa GATT Server. Ang smartphone ay isang GATT Client na nagbabasa at nagsusulat ng data sa aming sensor board.
Bluetooth SIG
Ang Bluetooth Special Interes Group (SIG) ay ang pamantayan na samahan na sinusubaybayan ang pagbuo ng mga pamantayan ng Bluetooth at ang paglilisensya ng mga teknolohiyang Bluetooth. Ang pangkat ng SIG ay hindi gumagawa o nagbebenta ng anumang mga produktong Bluetooth. Tinutukoy nito ang pagtutukoy at pamantayan ng Bluetooth. Tinukoy nila ang Natatanging Tagakilala para sa Bluetooth na mababang profile ng enerhiya at kani-kanilang mga katangian. Ang mga pagtutukoy ng Profile ng GATT ay matatagpuan sa link sa ibaba
Mga pagtutukoy ng GATT Profile
Batay sa pagtutukoy ng GATT na ibinigay sa link sa itaas, nakolekta namin ang natatanging mga pagkakakilanlan na kinakailangan para sa aming proyekto na naka-tabulate sa ibaba.
Profile / Mga Katangian |
UUID |
GAP (Generic Access) |
0x1800 |
GATT (Generic na Katangian) |
0x1801 |
ESS (Kapansin-pansin sa Kapaligiran) |
0x181A |
Temperatura |
0x2A6E |
Humidity |
0x2A6F |
BLE Service / Characteristics Diagram
BLE UUIDs
UUID |
16 bit na halaga |
128 bit UUID |
Serbisyo ng ESS |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Humidity Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Mga Katangian sa Temperatura
Pag-aari |
Paglalarawan |
Yunit |
Degree Celsius na may resolusyon na 0.01 degree |
Format |
sint16 |
UUID |
0x2A6E |
Decimal Exponent |
2 |
Basahin |
Sapilitan |
Mga Katangian ng Humidity
Pag-aari |
Paglalarawan |
Yunit |
Porsyento na may resolusyon na 0.01 porsyento |
Format |
uint16 |
UUID |
0x2A6F |
Decimal Exponent |
2 |
Basahin |
Sapilitan |
nRF52 BLE Program Explanation
Gagamitin namin ang nRF5 SDK upang mai-program ang aming nRF52 Development kit. Ang nRF5 SDK ay isang kumpletong kit sa pag-unlad ng software na isinama sa maraming mga profile ng Bluetooth Low Energy, GATT Serializer at suporta ng driver para sa lahat ng mga peripheral sa mga serye ng nRF5 na SoCs. Tinutulungan ng SDK na ito ang mga developer na bumuo ng buong tampok, maaasahan at ligtas na mga aplikasyon ng mababang enerhiya sa Bluetooth na may mga serye ng nRF52 at nRF51 ng mga microcontroller. Ang kumpletong programa ay maaaring ma-download mula dito, ang paliwanag sa code ay ang mga sumusunod.
I-configure ang DHT11 DATA pin bilang input sa nrf52 na may paganahin ang pull up. Ang katayuan ng pin ay dapat na mataas upang kumpirmahing ang nRF52 ay nagbibigay ng wastong PULLUP para sa data ng DHT11
/ * itakda sa pag-input at suriin kung nakuha ang signal * / Data_SetInput (); DelayUSec (50); kung (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Bumuo ng simulang signal mula sa nRF52 Microcontroller at suriin para sa kinikilala na signal.
/ * magpadala ng signal ng pagsisimula * / Data_SetOutput (); Data_ClrVal (); DelayMSec (20); / * panatilihing mababa ang signal nang hindi bababa sa 18 ms * / Data_SetInput (); DelayUSec (50); / * suriin para sa kinikilala signal * / kung (Data_GetVal ()! = 0) {/ * signal ay dapat na hinila pababa ng sensor * / ibalik ang DHT11_NO_ACK_0; } / * hintayin ang max 100 sa amin para sa ack signal mula sa sensor * / cntr = 18; habang (Data_GetVal () == 0) {/ * maghintay hanggang sa tumaas ang signal * / DelayUSec (5); kung (--cntr == 0) {return DHT11_NO_ACK_1; / * signal ay dapat na para sa ACK dito * /}} / * maghintay hanggang sa bumaba muli ito, pagtatapos ng pagkakasunod-sunod ng ack * / cntr = 18; habang (Data_GetVal ()! = 0) {/ * maghintay hanggang sa bumaba ang signal * / DelayUSec (5); kung (--cntr == 0) {return DHT11_NO_ACK_0; / * signal ay dapat na bumaba sa zero muli dito * /}}
Basahin ngayon ang 40 piraso ng data na naglalaman ng 2 bytes ng temperatura, 2 bytes ng halumigmig at 1 byte ng isang tsekum.
/ * basahin ngayon ang 40 bit data * / i = 0; data = 0; loopBits = 40; gawin ang {cntr = 11; / * wait max 55 us * / habang (Data_GetVal () == 0) {DelayUSec (5); kung (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * wait max 75 us * / habang (Data_GetVal ()! = 0) {DelayUSec (5); kung (--cntr == 0) {return DHT11_NO_DATA_1; }} data << = 1; / * susunod na data bit * / if (cntr <10) {/ * data signal mataas> 30 us ==> data bit 1 * / data - = 1; } kung ((loopBits & 0x7) == 1) {/ * susunod na byte * / buffer = data; ako ++; data = 0; }} habang (- loopBits! = 0);
Patunayan ang data sa tulong ng Checksum.
/ * pagsubok CRC * / if ((uint8_t) (buffer + buffer + buffer + buffer)! = buffer) {return DHT11_BAD_CRC; }
Manipula at iimbak ang temperatura at halumigmig
/ * mag-imbak ng mga halaga ng data para sa tumatawag * / halumigmig = ((int) buffer) * 100 + buffer; temperatura = ((int) buffer) * 100 + buffer;
Simulan ang serbisyo ng nRF5 SDK Logger. Ang nRF52 SDK ay itinampok sa isang interface ng control ng pag-log na tinatawag na nrf_log at ginagamit ang default na backend para sa pag-log ng impormasyon. Ang default na backend ay isang serial port. Dito namin pinasimulan ang parehong interface ng control ng nrf_log at ang mga default na backf ng nrf_log din.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
Ang nRF52 SDK ay may pagpapaandar ng application timer. Nagbibigay-daan ang module ng application timer upang lumikha ng maraming mga instance ng timer batay sa RTC1 paligid. Dito namin nasisimulan ang module ng timer ng nRF5 application. Sa solusyon na ito, ginagamit ang dalawang timer ng application at agwat ng pag-update ng data.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
Ang nRF52 SDK ay may buong tampok na module ng pamamahala ng kapangyarihan dahil ang mga aparato ng BLE ay kailangang gumana ng maraming buwan sa isang baterya ng Coin cell. Ang pamamahala ng kuryente ay may mahalagang papel sa mga aplikasyon ng BLE. Ang nRF52 power management module ay ganap na humahawak sa pareho. Dito namin pinasimulan ang module ng Pamamahala ng Power ng nRF5 SDK
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
Ang nRF52 SDK ay may built-in na Nordic Soft Device firmware hex file, na nagtatampok ng Bluetooth low energy central at peripheral stack. Ang mataas na kwalipikadong stack ng protocol na ito ay may kasamang GATT, GAP, ATT, SM, L2CAP, at Link Layer. Sinusundan namin ang pagkakasunud-sunod ng pagsisimula, na pinasimulan ng nRF5 BLE Radio Stack (Nordic Soft Device)
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (err_code); // I-configure ang BLE stack gamit ang mga default na setting. // Fetch ang start address ng application RAM. 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); // Paganahin ang BLE stack. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Magrehistro ng isang handler para sa mga kaganapan sa BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
Responsable ang GAP para sa pag-scan / pagtuklas ng aparato, pagtatatag ng link, pagwawakas ng link, pagsisimula ng mga tampok sa seguridad at pagsasaayos. Nagtatampok ang GAP ng mga pangunahing parameter ng koneksyon tulad ng agwat ng koneksyon, latency ng alipin, pag-timeout ng pangangasiwa, atbp. Sa pamamagitan nito, pinasimulan ang mga parameter ng koneksyon ng Generic Access Profile
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);
Responsable ang GATT para sa komunikasyon sa data sa pagitan ng BLE paligid at mga gitnang aparato. NRF52 GATT module ay kapaki-pakinabang para sa pakikipag-ayos at pagsubaybay sa maximum na laki ng ATT_MTU. Dito namin pinasimulan ang nRF52 SDK Generic na Katangian na Module, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
Gumagawa ang GATT ng komunikasyon sa data sa anyo ng mga serbisyo at katangian. Dito namin pinasimulan ang mga serbisyo sa sensing ng kapaligiran ng GATT, na kinabibilangan ng pagsisimula ng mga katangian tulad ng temperatura at halumigmig.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Initialize Queue Writing Module. 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);
Ang advertising ay may mahalagang papel sa kapaligiran ng aplikasyon ng BLE. kasama sa mga packet ang impormasyon ng uri ng address, uri ng advertising, data ng advertising, data na partikular sa tagagawa ng aparato, at data ng pagtugon sa pag-scan. itinampok ang nRF52 SDK na may isang module ng advertising. Dito ginagawa namin ang pagsisimula ng module ng advertising na may mga parameter.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Bumuo at magtakda ng data ng advertising. memset (& advdata, 0, sizeof (advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = totoo; 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; // Itakda ang mga parameter ng advertising. 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);
Ang Koneksyon ng BLE ay hahawakan at susubaybayan ng iba't ibang mga parameter ng koneksyon tulad ng pagkaantala sa pag-update ng params ng unang koneksyon, susunod na magkakasunod na pagkaantala, bilang ng pag-update, pagpapaandar ng callback na handler ng kaganapan sa callback at error sa koneksyon ng callback na kaganapan. Dito ginagawa namin ang pagsisimula ng mga parameter ng pagtataguyod ng BLE Connection at isang handler ng kaganapan sa callback para sa mga kaganapan sa koneksyon at mga kaganapan sa error.
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);
Matapos ang pagkumpleto ng pagsisimula ng system, dito nagsisimula kami sa pag-advertise ng BLE aparato pangalan at impormasyon ng kakayahan. Mula dito, ang peripheral na ito ay makikita sa listahan ng pag-scan ng Ble ng smartphone.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Ang pangunahing loop ay tumatakbo sa pagitan ng 2 segundo, basahin ang temperatura at halumigmig at mga pag-update sa isang konektadong smart device gamit ang alinman sa nabasa o abiso
para sa (;;) { uint16_t temperatura, halumigmig; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); kung (updtmrexp) { dhtErrCode = DHTxx_Read (& temperatura, & halumigmig); kung (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Temperatura:% d Humidity:% d \ n", temperatura, halumigmig); kung (temp_notif_enified) { ble_ess_notify_temp (m_conn_handle, & m_ess, temperatura); } iba pa { ble_ess_update_temp (& m_ess, temperatura); } kung (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, halumigmig); } iba pa { ble_ess_update_humid (& m_ess, halumigmig); } } updtmrexp = false; } }
Pagsubok sa aming Programa gamit ang nRF Connect
Ang nRF Connect ay isang malakas na tool na mababa ang lakas ng Bluetooth na nagbibigay-daan upang i-scan at tuklasin ang mga peripheral na pinapagana ng BLE. Sinusuportahan ng nRF Connect para sa mobile ang isang malawak na hanay ng mga Bluetooth SIG na pinagtibay na karaniwang mga profile. Maaari naming mapatunayan ang aming programa sa pamamagitan ng paggamit nito, pagkatapos mai-install ang app maaari naming ipares ang nRF52 board sa aming telepono sa pamamagitan ng pag-scan para sa mga BLE device sa app. Sa loob ng katangiang pang-sensing ng Kapaligiran, mapapansin natin ang temperatura at halagang halumigmig na ina-update tulad ng ipinakita sa mga larawan sa ibaba.
Ang Hariharan Veerappan ay isang independiyenteng consultant na mayroong higit sa 15 taong karanasan sa naka-embed na pag-unlad ng produkto. Nagbibigay siya ng mga serbisyo sa pagkonsulta sa naka-embed na pag-unlad na firmware / Linux, nagbibigay din siya ng pagsasanay sa korporasyon at online. Si Hariharan ay nagtataglay ng degree na Bachelor of Engineering sa disiplina ng Electronics & Communication Engineering, sa pamamagitan ng kanyang mga artikulo at tutorial na ibinabahagi niya ang kanyang karanasan at saloobin sa mga mambabasa ng Circuit Digest.