- nRF52 Development Kit:
- Segger Embedded Studio
- DHT11 mit nRF52DK
- Wie arbeite ich mit Bluetooth Low Energy (BLE)?
- BLE Service- / Charakteristikdiagramm
- Erklärung des nRF52-BLE-Programms
- Testen unseres Programms mit nRF Connect
Mit Fitnessbändern, Smartwatches und anderen tragbaren Geräten wird die Verwendung von Bluetooth 5 / Bluetooth Low Energy immer beliebterKommunikationsstandards werden weitgehend übernommen. BLE hilft uns, Daten über eine kurze Distanz mit sehr wenig Strom auszutauschen, was für batteriebetriebene Geräte wie Wearables sehr wichtig ist. Es hilft uns auch beim Einrichten von drahtlosen BLE-Mesh-Netzwerken. Diese Funktion ist praktisch für Heimautomationsgeräte, bei denen mehrere Geräte in einer geschlossenen Umgebung miteinander kommunizieren müssen. Wir haben bereits BLE mit Raspberry Pi und BLE mit ESP32 verwendet, um einige grundlegende BLE-Funktionen auszuführen. Ingenieure experimentieren mit BLE, um tragbare drahtlose Geräte zu entwickeln, die lange Zeit mit kleinen Batterien betrieben werden können. Für die Arbeit mit BLE stehen mehrere Entwicklungskits zur Verfügung. In unserem jüngsten Test über Arduino Nano 33 haben wir auch festgestellt, dass das Board über nRF52840 mit BLE-Funktionen verfügt.
In diesem Tutorial werden wir ein weiteres aufregendes und beliebtes Entwicklungsboard namens nRF52 DK untersuchen, um Temperatur und Luftfeuchtigkeit mit BLE zu messen. Standardmäßig unterstützt BLE Environment Sensing Profiles eine Vielzahl von Umgebungsparametern. Dieses Lernprogramm ist jedoch nur auf Temperatur- und Feuchtigkeitswerte beschränkt. Diese Lösung verbindet sich mit einem Smartphone über Bluetooth mit geringem Energieverbrauch und bietet eine häufige Aktualisierung der Umgebungsparameter, dh Temperatur, Luftfeuchtigkeit. Wir werden den DHT1-Sensor verwenden und die Temperaturmessung wird mit einer Auflösung von 0,01 Grad Celsius und die Feuchtemessung mit einer Auflösung von 0,01 Prozent durchgeführt.
nRF52 Development Kit:
nRF52DK ist eine komplette Prototyping-Plattform für die Anwendung Bluetooth Low Energy und 2,4 GHz Wireless Internet of Things. Das Entwicklungskit unterstützt verschiedene Standard-Nordic-Toolchains wie Open Source, GCC und kommerzielle integrierte Entwicklungsumgebungen wie Keil, IAR und Segger Embedded Studio usw. Nordic bietet auch ein vollwertiges Software-Entwicklungskit für nRF52, das vollständige Unterstützung für nRF52DK enthält.
nRF52DK wird mit dem ARM Cortex-M4F-Mikrocontroller nRF52832 betrieben, der 512 KB Flash Memor und 64 KB SRAM integriert. nRF52DK verfügt über einen integrierten Segger J-Link On Board-Debugger, der ein einfacheres und schnelleres Debuggen ohne externe / zusätzliche jtag-Debug-Geräte ermöglicht. Es enthält auch den Arduino Uno Rev3-kompatiblen AnschlussDies unterstützt die Schnittstelle der analogen und digitalen Eingänge mit dem Mikroprozessor und umfasst auch Standardkommunikationsprotokolle wie I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) und UART (Universal Asynchronous Receiver and Transmitter). Dieses Entwicklungskit ist mit einer integrierten PCB-Antenne ausgestattet, die eine drahtlose Nahbereichskommunikation mit Bluetooth Low Energy für die Verbindung mit Smartphones, Laptops und Tablets ermöglicht.
Segger Embedded Studio
Zum Programmieren des Entwicklungsboards verwenden wir das Segger Embedded Studio mit nRF52. Segger Embedded Studio ist eine leistungsstarke integrierte C / C ++ - Entwicklungsumgebung (IDE), die speziell für die Entwicklung eingebetteter Systeme entwickelt wurde. Dies bietet eine Komplettlösung, die alles enthält, was für die Programmierung, Entwicklung und das Debuggen von Embedded C erforderlich ist. Dies umfasst einen vollständigen Workflow für die Programmierung und Entwicklung eingebetteter Systeme mit Projektmanagement, Editor und Debugger, der ARM Cortex-Geräte unterstützt. Diese leistungsstarke und benutzerfreundliche IDE ist für nordische Kunden mit Volllizenz ohne Einschränkungen der Codegröße völlig kostenlos. Die IDE kann über den unten angegebenen Link heruntergeladen werden.
Laden Sie Segger Embedded Studio herunter
DHT11 mit nRF52DK
DHT11 ist ein voll ausgestatteter Temperatur- und Feuchtigkeitssensor mit einer resistiven Feuchtemesskomponente und einer NTC-Temperaturmesskomponente. Es bietet hervorragende Qualität, schnellere Reaktion und Kosteneffizienz. Standardmäßig werden alle DHT11-Sensoren im Labor kalibriert, was zu extremer Genauigkeit und Zuverlässigkeit führt. Die Kommunikation erfolgt über ein Single-Wire Serial Interface-System. Weitere technische Daten sind unten angegeben
Spezifikationen von DHT11:
- Feuchtigkeitsbereich: 20 - 90% rF
- Temperaturbereich: 0 - 50 Grad Celsius
- Feuchtigkeitsgenauigkeit: ± 5 % RH
- Temperaturgenauigkeit: ± 2 ℃
Zeitdiagramm von DHT11:
Das Lesen der Daten vom DHT11-Sensor ist mit dem oben gezeigten Zeitdiagramm relativ einfach. Das Verfahren ist ähnlich wie bei jedem Controller und wir haben diesen Sensor bereits mit anderen Entwicklungsplattformen wie verwendet
- DHT11 Sensor mit Raspberry Pi
- DHT11 Sensor mit PIC16F877A
- DHT11 Sensor mit STM32F103C8
- DHT11-Sensor mit NodeMCU
Befolgen Sie das unten angegebene Anschlussdiagramm, um den DHT11-Temperatur- und Feuchtigkeitssensor mit dem nRF52 Development Kit zu verbinden.
Ich verwende ein Anschlussmodul, um den Sensor an meine Platine anzuschließen, sodass meine endgültige Einrichtung so aussieht
Flussdiagramm für die Kommunikation mit DHT11:
Das folgende Flussdiagramm erläutert den logischen Programmablauf, den wir für die Kommunikation zwischen nRF52DK und DHT11 verwenden werden
Datei Format:
Wie arbeite ich mit Bluetooth Low Energy (BLE)?
Um zu verstehen, wie die BLE-Funktion verwendet wird, müssen wir einige grundlegende Terminologien verstehen, die im Folgenden erläutert werden. Sie können auch den ESP32-BLE-Artikel lesen, um mehr über BLE zu erfahren
Generisches Zugriffsprofil (GAP)
Generic Access Profile enthalten die vollständige Verantwortung für die Verbindung für die Kommunikation zwischen Gründung BLE peripheren und Zentralgeräten. GAP bietet auch verschiedene Verfahren, einschließlich Scannen / Erkennen von Geräten, Verbindungsaufbau auf Verbindungsebene, Verbindungsbeendigung, Handshake von Sicherheitsfunktionen und vollwertige Gerätekonfiguration. GAP funktioniert in den folgenden Gerätezuständen
GAP-Staaten |
Beschreibung |
Bereithalten |
Geräte-Ausgangszustand beim Zurücksetzen |
Inserent |
Gerätewerbung mit Daten, die beim Initiator-Scannen helfen |
Scanner |
Empfängt die und sendet eine Scananforderung an den Werbetreibenden |
Initiator |
Sendet eine Verbindungsanforderung, um eine Verbindung herzustellen |
Sklaventreiber |
Bei Verbindung Gerät als Slave, wenn Werbetreibender, Master als Initiator |
Generische Attributprofilebene (GATT)
GATT steht für Generic Attribute Profile Layer und ist für die Datenkommunikation zwischen zwei BLE-Geräten (Peripheral & Central) verantwortlich. Die Datenkommunikation ist in Form von Merkmalen gekennzeichnet, die die Daten kommunizieren und speichern. Das BLE-Gerät spielt zwei verschiedene Rollen für die unten angegebene Gerätekommunikation:
- Der GATT-Server enthält die Merkmalsinformationen, die zum Lesen und Schreiben verwendet werden. In unserem Tutorial werden der DHT11-Sensor und der Entwickler. Das Kit ist unser GATT-Server.
- Der GATT-Client liest und schreibt die Daten vom / zum GATT-Server. Das Smartphone ist ein GATT-Client, der die Daten liest und in unsere Sensorplatine schreibt.
Bluetooth SIG
Die Bluetooth Special Interest Group (SIG) ist die Standardorganisation, die die Entwicklung von Bluetooth-Standards und die Lizenzierung der Bluetooth-Technologien überwacht. Die SIG-Gruppe produziert oder verkauft keine Bluetooth-Produkte. Es definiert die Bluetooth-Spezifikation und Standardisierung. Sie definieren die eindeutige Kennung für das Bluetooth-Niedrigenergieprofil und die entsprechenden Eigenschaften. Die GATT-Profilspezifikationen finden Sie unter dem folgenden Link
GATT-Profilspezifikationen
Basierend auf der im obigen Link angegebenen GATT-Spezifikation haben wir die für unser Projekt erforderlichen eindeutigen Kennungen gesammelt, die unten aufgeführt sind.
Profil / Eigenschaften |
UUID |
GAP (Generic Access) |
0x1800 |
GATT (generisches Attribut) |
0x1801 |
ESS (Environment Sensing) |
0x181A |
Temperatur |
0x2A6E |
Feuchtigkeit |
0x2A6F |
BLE Service- / Charakteristikdiagramm
BLE-UUIDs
UUID |
16 Bit Wert |
128-Bit-UUID |
ESS-Dienst |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Luftfeuchtigkeit Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Temperaturmerkmale
Eigentum |
Beschreibung |
Einheit |
Grad Celsius mit einer Auflösung von 0,01 Grad |
Format |
sint16 |
UUID |
0x2A6E |
Dezimalexponent |
2 |
Lesen |
Verpflichtend |
Luftfeuchtigkeitseigenschaften
Eigentum |
Beschreibung |
Einheit |
Prozentsatz mit einer Auflösung von 0,01 Prozent |
Format |
uint16 |
UUID |
0x2A6F |
Dezimalexponent |
2 |
Lesen |
Verpflichtend |
Erklärung des nRF52-BLE-Programms
Wir werden das nRF5 SDK verwenden, um unser nRF52 Development Kit zu programmieren. Das nRF5 SDK ist ein komplettes Software-Entwicklungskit, das in zahlreiche Bluetooth Low Energy-Profile, GATT Serializer und Treiberunterstützung für alle Peripheriegeräte von SoCs der nRF5-Serie integriert ist. Mit diesem SDK können Entwickler mit den Mikrocontrollern der Serien nRF52 und nRF51 voll funktionsfähige, zuverlässige und sichere Bluetooth-Anwendungen mit geringem Energieverbrauch erstellen. Das komplette Programm kann hier heruntergeladen werden. Die Code-Erklärung lautet wie folgt.
Konfigurieren Sie den DHT11 DATA-Pin als Eingang bei nrf52 mit Pull-Up-Freigabe. Der Pin-Status sollte hoch sein, um zu bestätigen, dass nRF52 das richtige PULLUP für den DHT11-Daten-Pin bereitstellt
/ * auf Eingabe setzen und prüfen, ob das Signal hochgezogen wird * / Data_SetInput (); DelayUSec (50); if (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }}
Generieren Sie ein START-Signal vom nRF52-Mikrocontroller und prüfen Sie, ob ein Bestätigungssignal vorliegt.
/ * Startsignal senden * / Data_SetOutput (); Data_ClrVal (); DelayMSec (20); / * Signal mindestens 18 ms lang niedrig halten * / Data_SetInput (); DelayUSec (50); / * auf Bestätigungssignal prüfen * / if (Data_GetVal ()! = 0) {/ * Signal muss vom Sensor niedrig gezogen werden * / return DHT11_NO_ACK_0; } / * warte maximal 100 us auf das Bestätigungssignal vom Sensor * / cntr = 18; while (Data_GetVal () == 0) {/ * warte bis das Signal hoch geht * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_1; / * Signal sollte hier für die ACK aktiv sein * /}} / * warte bis es wieder abfällt, Ende der Bestätigungssequenz * / cntr = 18; while (Data_GetVal ()! = 0) {/ * warte bis das Signal ausfällt * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_0; / * Signal sollte hier wieder auf Null fallen * /}}
Lesen Sie nun die 40 Datenbits, die 2 Byte Temperatur, 2 Byte Luftfeuchtigkeit und 1 Byte einer Prüfsumme enthalten.
/ * lese jetzt die 40-Bit-Daten * / i = 0; Daten = 0; loopBits = 40; do {cntr = 11; / * warte maximal 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * warte maximal 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_1; }} Daten << = 1; / * nächstes Datenbit * / if (cntr <10) {/ * Datensignal hoch> 30 us ==> Datenbit 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * nächstes Byte * / buffer = data; i ++; Daten = 0; }} while (- loopBits! = 0);
Überprüfen Sie die Daten mit Hilfe von Checksum.
/ * CRC testen * / if ((uint8_t) (Puffer + Puffer + Puffer + Puffer)! = Puffer) {return DHT11_BAD_CRC; }}
Manipulieren und speichern Sie Temperatur und Luftfeuchtigkeit
/ * Datenwerte für Anrufer speichern * / Luftfeuchtigkeit = ((int) Puffer) * 100 + Puffer; Temperatur = ((int) Puffer) * 100 + Puffer;
Initialisieren Sie den nRF5 SDK Logger-Dienst. Das nRF52 SDK verfügt über eine Protokollierungssteuerungsschnittstelle namens nrf_log und verwendet das Standard-Backend zum Protokollieren der Informationen. Das Standard-Backend ist eine serielle Schnittstelle. Hier initialisieren wir sowohl nrf_log Steuerschnittstelle und nrf_log Standard - Backends auch.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
Das nRF52 SDK verfügt über eine Anwendungszeitgeberfunktion. Das Anwendungs-Timer-Modul ermöglicht das Erstellen mehrerer Timer-Instanzen basierend auf dem RTC1-Peripheriegerät. Hier initialisieren wir das nRF5-Anwendungs-Timer-Modul. In dieser Lösung werden zwei Anwendungszeitgeber für ein Datenaktualisierungsintervall verwendet.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
Das nRF52 SDK verfügt über das Power Management-Modul mit allen Funktionen , da BLE-Geräte mehrere Monate mit einer Knopfzellenbatterie arbeiten müssen. Energieverwaltung spielt in BLE-Anwendungen eine wichtige Rolle. Das Energieverwaltungsmodul nRF52 übernimmt das gleiche. Hier initialisieren wir das Power Management-Modul des nRF5 SDK
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
Das nRF52 SDK verfügt über eine integrierte Hex-Datei für die nordische Soft Device-Firmware, die über einen zentralen und peripheren Bluetooth-Stack mit niedrigem Energieverbrauch verfügt. Dieser hochqualifizierte Protokollstapel umfasst GATT, GAP, ATT, SM, L2CAP und Link Layer. Hier folgen wir der Initialisierungssequenz, die den nRF5 BLE Radio Stack (Nordic Soft Device) initialisiert hat.
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (err_code); // Konfigurieren Sie den BLE-Stack mit den Standardeinstellungen. // Die Startadresse des Anwendungs-RAM abrufen. 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); // BLE-Stack aktivieren. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Registriere einen Handler für BLE-Ereignisse. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP ist für das Scannen / Erkennen von Geräten, den Verbindungsaufbau, die Beendigung von Verbindungen, die Initiierung von Sicherheitsfunktionen und die Konfiguration verantwortlich. GAP verfügt über wichtige Verbindungsparameter wie Verbindungsintervall, Slave-Latenz, Überwachungszeitlimit usw. Hiermit werden die Verbindungsparameter für das generische Zugriffsprofil initialisiert
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);
Das GATT ist für die Datenkommunikation zwischen BLE-Peripheriegeräten und Zentralgeräten verantwortlich. Das nRF52-GATT-Modul ist hilfreich, um die maximale ATT_MTU-Größe auszuhandeln und zu verfolgen. Hier initialisieren wir das generische Attributmodul nRF52 SDK.
ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
Das GATT führt Datenkommunikation in Form von Diensten und Merkmalen durch. Hier initialisieren wir die GATT-Umgebungserfassungsdienste, einschließlich der Initialisierung von Eigenschaften wie Temperatur und Luftfeuchtigkeit.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Schreibmodul in Warteschlange initialisieren. 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);
Werbung spielt eine wichtige Rolle in der BLE-Anwendungsumgebung. Pakete enthalten Informationen zu Adresstyp, Werbetyp, Werbedaten, geräteherstellerspezifischen Daten und Scanantwortdaten. nRF52 SDK mit Werbemodul. Hier initialisieren wir das Werbemodul mit den Parametern.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Werbedaten erstellen und einstellen. 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; // Werbeparameter einstellen. 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);
Die BLE-Verbindung wird mit verschiedenen Verbindungsparametern wie der Aktualisierungsverzögerung der ersten Verbindungsparameter, den nächsten aufeinander folgenden Verzögerungen, der Aktualisierungsanzahl, der Rückruffunktion der Verbindungsereignishandler und der Rückruffunktion der Verbindungsfehler behandelt und überwacht. Hier initialisieren wir BLE-Verbindungsaufbauparameter und einen Callback-Ereignishandler für Verbindungsereignisse und Fehlerereignisse.
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);
Nach Abschluss der Initialisierung des Systems beginnen wir hier mit der Bekanntgabe des BLE-Gerätenamens und der Funktionsinformationen. Von hier aus kann dieses Peripheriegerät über die Ble-Scan-Liste des Smartphones angezeigt werden.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Die Hauptschleife läuft über einen Zeitraum von 2 Sekunden, liest die Temperatur und Luftfeuchtigkeit ab und aktualisiert sie entweder durch Lesen oder Benachrichtigen auf ein angeschlossenes Smart-Gerät
für (;;) { uint16_t Temperatur, Luftfeuchtigkeit; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); if (updtmrexp) { dhtErrCode = DHTxx_Read (& Temperatur & Luftfeuchtigkeit); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Temperatur:% d Luftfeuchtigkeit:% d \ n", Temperatur, Luftfeuchtigkeit); if (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, Temperatur); } else { ble_ess_update_temp (& m_ess, Temperatur); } if (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, Luftfeuchtigkeit); } else { ble_ess_update_humid (& m_ess, Luftfeuchtigkeit); } } updtmrexp = false; } }
Testen unseres Programms mit nRF Connect
nRF Connect ist ein leistungsstarkes Bluetooth-Tool mit geringem Energieverbrauch, mit dem Sie die BLE-fähigen Peripheriegeräte scannen und erkunden können. nRF Connect für Mobilgeräte unterstützt eine Vielzahl von Bluetooth SIG-Standardprofilen. Auf diese Weise können wir unser Programm überprüfen. Nach der Installation der App können wir die nRF52-Karte mit unserem Telefon koppeln, indem wir in der App nach BLE-Geräten suchen. Innerhalb des Attributs Umgebungserfassung können wir feststellen, dass die Temperatur- und Feuchtigkeitswerte wie in den folgenden Bildern gezeigt aktualisiert werden.
Hariharan Veerappan ist ein unabhängiger Berater mit mehr als 15 Jahren Erfahrung in der Entwicklung eingebetteter Produkte. Er bietet Beratungsdienste für die Entwicklung eingebetteter Firmware / Linux sowie Unternehmens- und Online-Schulungen an. Hariharan hat einen Bachelor of Engineering in der Disziplin Elektronik und Kommunikationstechnik. Durch seine Artikel und Tutorials teilt er seine Erfahrungen und Gedanken mit den Lesern von Circuit Digest.