- nRF52 fejlesztőkészlet:
- Segger Embedded Studio
- DHT11 nRF52DK-val
- Hogyan működik a Bluetooth Low Energy (BLE)?
- BLE szolgáltatás / jellemző diagram
- nRF52 BLE program magyarázat
- Programunk tesztelése az nRF Connect használatával
A Fitness zenekarok, az intelligens órák és más viselhető eszközök egyre népszerűbbé válnak a Bluetooth 5 / Bluetooth Low Energy használatakommunikációs szabványokat széles körben elfogadják. A BLE segít rövid távú, kis energiaigényű adatcserében, ami nagyon fontos az akkumulátorral működtetett eszközök, például a hordható eszközök esetében. Ez segít a vezeték nélküli BLE hálós hálózatok kiépítésében is, ez a funkció jól jön az otthoni automatizálási eszközöknél, ahol több eszköznek kell kommunikálniuk egymással zárt környezetben. Már használtuk a BLE-t Raspberry Pi-vel és a BLE-t az ESP32-vel néhány alapvető BLE-funkció végrehajtásához. A mérnökök a BLE-vel kísérleteznek olyan hordozható vezeték nélküli eszközök tervezésével, amelyek hosszú ideig kis akkumulátorokkal működhetnek, és a BLE-vel való együttműködéshez több fejlesztőkészlet is rendelkezésre áll. Az Arduino Nano 33-ról szóló közelmúltbeli áttekintésünk során azt is észrevettük, hogy az alaplap nRF52840 BLE képességekkel rendelkezik.
Ebben az oktatóanyagban egy másik izgalmas és népszerű fejlesztői fórumot fogunk felfedezni, az nRF52 DK nevet, amely a hőmérséklet és páratartalom mérésére szolgál a BLE segítségével. Alapértelmezés szerint a BLE Environment Sensing Profiles a környezeti paraméterek széles skáláját támogatja, de ez az oktatóanyag csak a hőmérsékleti és páratartalmi értékekre korlátozódik. Ez a megoldás kapcsolódik egy okostelefonnal alacsony energiafelhasználású Bluetooth-on keresztül, és gyakran frissíti a környezeti paramétereket, például a hőmérsékletet és a páratartalmat. A DHT1 érzékelőt fogjuk használni, és a hőmérséklet mérését 0,01 Celsius fok, a páratartalom mérését pedig 0,01 százalék felbontással végezzük.
nRF52 fejlesztőkészlet:
Az nRF52DK egy teljes prototípus-platform a Bluetooth alacsony energiafelhasználású és 2,4 GHz-es vezeték nélküli tárgyak internete alkalmazásához. A fejlesztőkészlet különféle szabványos Nordic Toolchain-okat támogat, mint például a nyílt forráskódú, a GCC és a kereskedelmi integrált fejlesztői környezetek, mint a Keil, az IAR és a Segger Embedded Studio, stb. A Nordic egy teljes értékű szoftverfejlesztő készletet is kínál az nRF52 számára, amely teljes körű támogatást tartalmaz az nRF52DK számára.
Az nRF52DK az nRF52832 ARM Cortex-M4F mikrovezérlővel működik, amely 512 KByte Flash Memort és 64 KB SRAM-ot integrált. Az nRF52DK integrált Segger J-Link On Board hibakeresővel rendelkezik, amely egyszerűbb és gyorsabb hibakeresést biztosít külső / kiegészítő jtag hibakereső eszközök nélkül. Tartalmazza az Arduino Uno Rev3 kompatibilis csatlakozót is, amely támogatja az analóg és digitális bemenetek összekapcsolását a mikroprocesszorral, és tartalmaz olyan szabványos kommunikációs protokollokat is, mint az I2C (Inter-Integrated Circuit), az SPI (Serial Peripheral Interface) és az UART (Universal Asynchronous Receiver and Transmiter). Ezt a fejlesztőkészletet egy beépített beépített NYÁK-antennával tervezték, amely rövid hatótávolságú vezeték nélküli kommunikációt biztosít a Bluetooth Low Energy használatával az okostelefonokkal, laptopokkal és táblagépekkel való összeköttetéshez.
Segger Embedded Studio
A fejlesztõ tábla programozásához a Segger Embedded Studio-t fogjuk használni az nRF52-vel. A Segger Embedded Studio egy erőteljes C / C ++ integrált fejlesztői környezet (IDE), amely kifejezetten a beágyazott rendszerek fejlesztésére irányul. Ez egy komplett all-in-one megoldást nyújt, amely mindent tartalmaz a beágyazott C programozáshoz, fejlesztéshez és hibakereséshez. Ez magában foglalja a beágyazott rendszerek programozásának és fejlesztésének teljes munkafolyamatát, amely az ARM Cortex eszközöket támogató projektmenedzsmenttel, szerkesztővel és hibakeresővel szerepel. Ez az erőteljes és könnyen használható IDE teljesen ingyenes a skandináv ügyfelek számára, teljes licenccel, kódméret-korlátozások nélkül. Az IDE letölthető az alábbi linkről,
Töltse le a Segger Embedded Studio alkalmazást
DHT11 nRF52DK-val
A DHT11 egy teljes funkcionalitású hőmérséklet- és páratartalom-érzékelő, amely ellenálló típusú páratartalom-mérő és NTC típusú hőmérséklet-mérő alkatrészeket tartalmaz. Kiváló minőséget, gyorsabb reagálást és költséghatékonyságot kínál. Alapértelmezés szerint az összes DHT11 szenzort kalibrálják a laboratóriumban, ami rendkívüli pontossághoz és megbízhatósághoz vezet. Egyvezetékes soros interfész rendszerrel kommunikál, és az alábbiakban további specifikációkat adunk meg
A DHT11 specifikációi:
- Páratartomány: 20 - 90% relatív páratartalom
- Hőmérsékleti tartomány: 0-50 fok Celsius
- Páratartalom pontossága: ± 5 % RH
- Hőmérséklet pontossága: ± 2 ℃
A DHT11 időzítési diagramja:
Az adatok kiolvasása a DHT11 érzékelőből viszonylag egyszerű a fenti időzítési diagram segítségével. Az eljárás hasonló minden vezérlőhöz, és ezt az érzékelőt már használtuk más fejlesztői platformokkal, például
- DHT11 érzékelő Raspberry Pi-vel
- DHT11 érzékelő PIC16F877A-val
- DHT11 érzékelő STM32F103C8-mal
- DHT11 érzékelő NodeMCU-val
A DHT11 hőmérséklet- és páratartalom-érzékelő és az nRF52 fejlesztőkészlet összekapcsolásához kövesse az alábbi kapcsolási rajzot.
Csatlakozómodul segítségével csatlakoztatom az érzékelőt az alaplapomhoz, így a végső beállításom így néz ki
Folyamatábra a DHT11-vel való kommunikációhoz:
Az alábbi folyamatábra elmagyarázza a program logikai folyamatát, amelyet az nRF52DK és a DHT11 közötti kommunikációhoz fogunk használni
Adatformátum:
Hogyan működik a Bluetooth Low Energy (BLE)?
A BLE szolgáltatás használatának megértéséhez meg kell értenünk néhány alapvető terminológiát, amelyeket az alábbiakban ismertetünk. Elolvashatja az ESP32 BLE cikkét is, hogy többet tudjon meg a BLE-ről
Általános hozzáférési profil (GAP)
Az Általános hozzáférési profil teljes felelőssége a BLE perifériás és központi eszközök közötti kommunikáció létrehozása. A GAP különféle eljárásokat is tartalmaz, ideértve az eszköz szkennelését / felderítését, a kapcsolati rétegű kapcsolat létrehozását, a kapcsolat megszüntetését, a biztonsági funkciók kézfogását és a teljes értékű eszközkonfigurációt. A GAP a következő eszközállapotokban működik
GAP-államok |
Leírás |
Készenlétben lévő |
Az eszköz kezdeti állapota visszaállításkor |
Hirdető |
Eszközhirdetések olyan adatokkal, amelyek segítenek az iniciátor szkennelésében |
Scanner |
Fogja és elküldi a szkennelési kérelmet a hirdetőnek |
Kezdeményező |
Kapcsolatkérést küld egy kapcsolat létrehozására |
Rabszolgatartó |
Csatlakozáskor eszközként szolga, ha hirdető, master, ha kezdeményező |
Általános attribútum profilréteg (GATT)
A GATT rövidítése a Generic Attribute Profile Layer rövidítése, két BLE eszköz (Peripheral & Central) közötti adatkommunikációért felel. Az adatkommunikációt jellemzők jellemzik, amelyek kommunikálják és tárolják az adatokat. A BLE eszköz két különböző szerepet játszik az alábbiakban megadott eszközkommunikációban:
- A GATT Server tartalmazza azokat a jellemző információkat, amelyek felhasználásra kerülnek az íráshoz és olvasáshoz. Oktatóanyagunkban a DHT11 érzékelő és a dev. a készlet a GATT szerverünk.
- A GATT kliens olvassa és írja az adatokat a / az GATT szerverről. Az okostelefon egy GATT kliens, amely beolvassa és beírja az adatokat az érzékelő táblánkba.
Bluetooth SIG
A Bluetooth Special Interest Group (SIG) a szabványügyi szervezet, amely figyelemmel kíséri a Bluetooth szabványok fejlődését és a Bluetooth technológiák licencelését. A SIG csoport nem gyárt vagy értékesít Bluetooth termékeket. Meghatározza a Bluetooth specifikációt és szabványosítást. Meghatározzák az alacsony energiafelhasználású Bluetooth profil egyedi azonosítóját és a hozzájuk tartozó jellemzőket. A GATT profil specifikációi az alábbi linken találhatók
GATT profil specifikációk
A fenti linken megadott GATT specifikáció alapján összegyűjtöttük a projektünkhöz szükséges egyedi azonosítókat, amelyek az alábbiakban vannak feltüntetve.
Profil / jellemzők |
UUID |
GAP (általános hozzáférés) |
0x1800 |
GATT (általános attribútum) |
0x1801 |
ESS (Környezetérzékelés) |
0x181A |
Hőfok |
0x2A6E |
páratartalom |
0x2A6F |
BLE szolgáltatás / jellemző diagram
BLE UUID-ok
UUID |
16 bites érték |
128 bites UUID |
ESS szolgáltatás |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Hőmérséklet Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Páratartalom Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Hőmérsékleti jellemzők
Ingatlan |
Leírás |
Mértékegység |
Celsius fok 0,01 fok felbontással |
Formátum |
sint16 |
UUID |
0x2A6E |
Tizedes kitevő |
2 |
Olvas |
Kötelező |
Páratartalom jellemzői
Ingatlan |
Leírás |
Mértékegység |
Százalék 0,01 százalékos felbontással |
Formátum |
uint16 |
UUID |
0x2A6F |
Tizedes kitevő |
2 |
Olvas |
Kötelező |
nRF52 BLE program magyarázat
Az nRF5 SDK- t fogjuk használni az nRF52 fejlesztőkészletünk programozásához. Az nRF5 SDK egy komplett szoftverfejlesztő készlet, amely számos Bluetooth Low Energy profillal, GATT Serializer és illesztőprogram-támogatással van integrálva az nRF5 sorozatú SoC összes perifériájához. Ez az SDK segít a fejlesztőknek teljes körű, megbízható és biztonságos alacsony energiafelhasználású Bluetooth-alkalmazások kiépítésében az nRF52 és nRF51 mikrovezérlőkkel. A teljes program innen tölthető le, a kód magyarázata a következő.
Konfigurálja a DHT11 DATA tűt bemenetként az nrf52-re a pull up engedélyezéssel. A PIN-kódnak magasnak kell lennie annak megerősítéséhez, hogy az nRF52 megfelelő PULLUP-ot biztosít a DHT11 adatcsap számára
/ * állítsa be a bemenetre, és ellenőrizze, hogy a jel felhúzódik-e * / Data_SetInput (); KésésUSec (50); if (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Generáljon START jelet az nRF52 mikrokontrollerből, és ellenőrizze a nyugtázó jelet.
/ * kezdőjel küldése * / Data_SetOutput (); Data_ClrVal (); Késleltetés MSec (20); / * tartsa alacsonyan a jelet legalább 18 ms * / Data_SetInput (); KésésUSec (50); / * ellenőrizze a nyugtázó jelet * / if (Data_GetVal ()! = 0) {/ * jelet az érzékelőnek alacsonyra kell húznia * / return DHT11_NO_ACK_0; } / * várjon max 100 minket az érzékelőtől érkező ack jelre * / cntr = 18; while (Data_GetVal () == 0) {/ * várja meg, amíg a jel fel nem megy * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_1; A / * jelnek fent kell lennie az ACK számára az ACK számára * /}} / * várjon, amíg újra lemegy, az ack sorozat vége * / cntr = 18; while (Data_GetVal ()! = 0) {/ * várja meg, amíg a jel lemegy * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_0; / * itt ismét nullának kell lennie a jelnek * /}}
Most olvassa el a 40 bites adatot, amely 2 bájt hőmérsékletet, 2 bájt nedvességet és 1 bájt ellenőrző összeget tartalmaz.
/ * most olvassa el a 40 bites adatot * / i = 0; adatok = 0; loopBits = 40; csináld {cntr = 11; / * várjon maximum 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * várjon max 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_1; }} adatok << = 1; / * következő adatbit * / if (cntr <10) {/ * magas adatjel> 30 us ==> 1 adatbit * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * következő bájt * / puffer = adat; i ++; adatok = 0; }} while (- loopBits! = 0);
Ellenőrizze az adatokat a Checksum segítségével.
/ * teszt CRC * / if ((uint8_t) (puffer + puffer + puffer + puffer)! = puffer) {return DHT11_BAD_CRC; }
Manipulálja és tárolja a hőmérsékletet és a páratartalmat
/ * tárolja a hívó adatértékeit * / páratartalom = ((int) puffer) * 100 + puffer; hőmérséklet = ((int) puffer) * 100 + puffer;
Inicializálja az nRF5 SDK Logger szolgáltatást. Az nRF52 SDK az nrf_log nevű naplózási vezérlő felülettel rendelkezik, és az alapértelmezett háttérprogramot használja az információk naplózásához. Az alapértelmezett háttérrendszer egy soros port lesz. Itt inicializáljuk az nrf_log vezérlő felületet és az nrf_log alapértelmezett háttérprogramokat is.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (hibakód); NRF_LOG_DEFAULT_BACKENDS_INIT ();
Az nRF52 SDK alkalmazás időzítő funkcióval rendelkezik. Az alkalmazás időzítő modulja lehetővé teszi több időzítő példány létrehozását az RTC1 periféria alapján. Itt inicializáljuk az nRF5 alkalmazás időzítő modulját. Ebben a megoldásban két alkalmazásidőzítőt és adatfrissítési intervallumot használnak.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (hibakód);
Az nRF52 SDK rendelkezik a teljes funkcionalitású energiagazdálkodási modullal, mivel a BLE eszközöknek több hónapig kell működniük egy érmeelemen. Az energiagazdálkodás létfontosságú szerepet játszik a BLE alkalmazásokban. Az nRF52 energiagazdálkodási modul teljesen ugyanezt kezeli. Itt inicializáljuk az nRF5 SDK Energiagazdálkodási modulját
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (hibakód);
Az nRF52 SDK beépített Nordic Soft Device firmware hex fájllal rendelkezik, amely alacsony energiafogyasztású Bluetooth központi és perifériás veremmel rendelkezik. Ez a magasan képzett protokollköteg magában foglalja a GATT, GAP, ATT, SM, L2CAP és Link Layer elemeket. Itt követjük az inicializálási sorrendet, amely inicializálta az nRF5 BLE rádióhalmot (Nordic Soft Device)
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (hibakód); // A BLE verem konfigurálása az alapértelmezett beállítások használatával. // Az alkalmazás RAM kezdőcímének lekérése. uint32_t ram_start = 0; err_code = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG, & ram_start); APP_ERROR_CHECK (hibakód); // BLE verem engedélyezése. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (hibakód); // Kezelő regisztrálása a BLE eseményekhez. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
A GAP felelős az eszközök szkenneléséért / felderítéséért, a linkek létrehozásáért, a linkek megszüntetéséért, a biztonsági funkciók elindításáért és a konfigurációért. A GAP kulcsfontosságú kapcsolati paraméterekkel, például csatlakozási intervallummal, szolga késleltetéssel, felügyeleti időtúllépéssel stb. Rendelkezik, ezzel inicializálva az Általános hozzáférési profil kapcsolati paramétereket
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 (hibakód); 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 (hibakód);
A GATT felelős a BLE perifériás és központi eszközök közötti adatkommunikációért. Az nRF52 GATT modul segít tárgyalni és nyomon követni a maximális ATT_MTU méretet. Itt inicializáljuk az nRF52 SDK Generic Attribute Modult, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (hibakód);
A GATT adatkommunikációt végez szolgáltatások és jellemzők formájában. Itt inicializáljuk a GATT környezetérzékelési szolgáltatásokat, amelyek magukban foglalják a hőmérséklet és páratartalom jellemzőinek inicializálását.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // A sorban álló írási modul inicializálása. qwr_init.error_handler = nrf_qwr_error_handler; err_code = nrf_ble_qwr_init (& m_qwr, & qwr_init); APP_ERROR_CHECK (hibakód); m_ess.notif_write_handler = ble_ess_notif_write_handler; err_code = ble_ess_init (& m_ess); APP_ERROR_CHECK (hibakód);
A reklám létfontosságú szerepet játszik a BLE alkalmazási környezetben. a csomagok tartalmazzák a cím típusát, a reklám típusát, a hirdetési adatokat, az eszköz gyártójának specifikus adatait és a szkennelési válasz adatait. Az nRF52 SDK hirdetési modullal rendelkezik. Itt inicializáljuk a hirdetési modult a paraméterekkel.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Reklámadatok összeállítása és beállítása. memset (& advdata, 0, sizeof (advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_earearance = 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 (hibakód); err_code = ble_advdata_encode (& srdata, m_adv_data.scan_rsp_data.p_data, & m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK (hibakód); ble_gap_adv_params_t adv_params; // Hirdetési paraméterek beállítása. 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 (hibakód);
A BLE kapcsolatot különféle kapcsolati paraméterekkel kezeljük és figyeljük, például az első csatlakozás paramétereinek frissítési késleltetésével, a következő egymást követő késésekkel, a frissítések számával, a csatlakozási eseménykezelő visszahívási funkciójával és a csatlakozási hiba visszahívási eseménykezelőjével. Itt inicializáljuk a BLE kapcsolat létrehozásának paramétereit és a visszahívási esemény kezelőt a kapcsolati eseményekhez és a hiba eseményekhez.
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 = hamis; 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 (hibakód);
A rendszer inicializálásának befejezése után itt kezdjük a BLE eszköznév és a képességinformációk hirdetésével. Innentől kezdve ez a periféria az okostelefon Ble scan listáján látható.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (hibakód);
A fő hurok 2 másodpercen keresztül fut, olvassa le a hőmérsékletet és a páratartalmat, és frissítse a csatlakoztatott intelligens eszközt olvasás vagy értesítés segítségével
a (;;) { uint16_t hőmérsékletre, páratartalomra; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); if (updtmrexp) { dhtErrCode = DHTxx_Read (& hőmérséklet, & páratartalom); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Hőmérséklet:% d Páratartalom:% d \ n", hőmérséklet, páratartalom); if (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, hőmérséklet); } else { ble_ess_update_temp (& m_ess, hőmérséklet); } if (nedves_jegyzet_engedélyezett) { ble_ess_notify_humid (m_conn_handle, & m_ess, páratartalom); } else { ble_ess_update_humid (& m_ess, páratartalom); } } updtmrexp = hamis; } }
Programunk tesztelése az nRF Connect használatával
Az nRF Connect egy hatékony, alacsony energiafelhasználású Bluetooth eszköz, amely lehetővé teszi a BLE-képes perifériák beolvasását és feltárását. Az nRF Connect for mobile a Bluetooth SIG által elfogadott szabványos profilok széles skáláját támogatja. Ennek használatával ellenőrizhetjük programunkat, az alkalmazás telepítése után párosíthatjuk az nRF52 alaplapot a telefonunkkal, az alkalmazás BLE eszközeinek keresésével. A Környezetérzékelés attribútumon belül észrevehetjük, hogy a hőmérséklet és páratartalom értékei frissülnek, amint az az alábbi képeken látható.
Hariharan Veerappan független tanácsadó, több mint 15 éves tapasztalattal rendelkezik a beágyazott termékek fejlesztésében. Tanácsadást nyújt beágyazott firmware / Linux fejlesztésben, vállalati és online képzést is nyújt. Hariharan mérnöki diplomát szerzett az elektronikai és kommunikációs mérnöki tudományágban, cikkei és oktatóanyagai révén tapasztalatait és gondolatait megosztja a Circuit Digest olvasóival.