Naučite se kako narediti preprosto spletno vremensko postajo s pomočjo senzorja DHT11, priključenega na ploščo, ki temelji na ESP8266 in Arduino platformi.
Zgodba
V enem od svojih člankov [1] sem svojo NodeMCU ploščo, ki temelji na ESP8266, povezal s storitvijo Cloud4RPi. Zdaj je čas za pravi projekt!
Zahteve glede hardverske opreme
• Vsaka plošča, ki temelji na čipu ESP8266 (na primer NodeMCU)
• Senzor DHT11 ali DHT22
Ta vsebina je samo za naročnike
Programska oprema in storitve
•Knjižnica za DHT senzor Adafruit — v1.3.7
•Adafruit Unified Senzor — v1.0.3
•cloud4rpi-esp-arduino — v0.1.0
•Cloud4RPI — nadzorna plošča v oblaku za IoT naprave
•PlatformIO IDE za VSCode
Cilj: Izmeriti temperaturo in vlago
Senzor DHT11 sem že imel, zato sem se odločil, da ga uporabim za meritve temperature in vlažnosti. Izberimo knjižnico Arduino za branje senzorjev.
Arduino register vsebuje več knjižnic, med katerimi sem izbral najbolj priljubljeno.
Glede na njihovo GitHub shrambo moramo dodati tudi Adafruit Unified Sensor paket.
1. korak: ustvarite in konfigurirajte projekt
V prvem delu sem že opisal, kako ustvariti PlatformIO projekt in namestiti knjižnice. Moj projekt se imenuje “MyNodeMCU”. Struktura je prikazana na sliki 1:
Ta projekt je nekoliko spremenjen primer Cloud4RPi.
Odločil sem se, da namesto kode v konfiguracijsko datoteko shranim žeton naprave in poverilnice Wi-Fi.
Datoteka platform.io je videti tako:
[platformio] default_envs = nodemcuv2 [env:nodemcuv2] platform = espressif8266 framework = arduino board = nodemcuv2
2. korak: namestite knjižnice
Namestitev knjižnic je zelo preprosta. To lahko storite v grafičnem vmesniku IDE ali tako, da v odsek lib_deps datoteke platform.io dodate potrebna imena knjižnic:
; Library options lib_deps = cloud4rpi-esp-arduino Adafruit Unified Sensor DHT sensor library build_flags = -D MQTT_MAX_PACKET_SIZE=1024 -D MQTT_MAX_TRANSFER_SIZE=128 -D CLOUD4RPI_DEBUG=0 -D SSID_NAME="__YOUR_WIFI__" -D SSID_PASSWORD="__YOUR_WIFI_PASS__" -D CLOUD4RPI_TOKEN="__YOUR_DEVICE_TOKEN__"
Dodane knjižnice bodo samodejno nameščene v podmapo projekta (slika 2).
Zaglavje main.cpp je videti tako:
#include <Arduino.h> #include <ESP8266WiFi.h> #include <Cloud4RPi.h> #include "DHT.h"
3. korak: povežite DHT11 senzor
Adafruit ponuja DHTtester.ino primer povezave senzorja.
Ta koda inicializira senzor in definira strukturo za shranjevanje merilnih rezultatov (v primeru, da je bila uspešna):
#define DHTPIN 2 // Digital pin connected to the DHT sensor#define DHTTYPE DHT11 // DHT 11 // ... DHT dht(DHTPIN, DHTTYPE); dht.begin(); // ... struct DHT_Result { float h; float t; }; DHT_Result dhtResult;
Naslednja funkcija prikazuje, kako prebrati podatke senzorja in jih shraniti v zgoraj opisano strukturo podatkov.
void readSensors() { float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Check if any reads failed and exit if (isnan(h) || isnan(t)) { Serial.println(F("Failed to read from DHT sensor!")); return; } dhtResult.h = h; dhtResult.t = t; }
4. korak: pošljite podatke v oblak
Ko imamo te podatke, je naslednji korak ta, da jih pošljemo storitvi Cloud4RPi.
Stran Cloud4RPi za Arduino opisuje API knjižnice, ki je nabor metod, ki se uporabljajo za:
-ustvari, preberi in posodobi spremenljivke,
-pošlji vrednosti spremenljivk v oblak s pomočjo protokola MQTT.
Knjižnica podpira tri vrste spremenljivk: Bool, Numeric in String.
Potek dela knjižnice se začne z ustvarjanjem primerka API-ja z uporabo žetona naprave s spletnega mesta cloud4rpi.io (za podrobnosti glejte 1. del članka [1]).
#if defined(CLOUD4RPI_TOKEN) Cloud4RPi c4r(CLOUD4RPI_TOKEN); #else Cloud4RPi c4r("!!!_NO_DEVICE_TOKEN_!!!"); #endif
Nato deklarirajte spremenljivke za odčitke DHT11:
c4r.declareNumericVariable("DHT11_Temp"); c4r.declareNumericVariable("DHT11_Hum");
Nato pridobite podatke s senzorja, jih shranite v spremenljivke in jih objavite v Cloud4RPi:
c4r.setVariable("DHT11_Temp", dhtResult.t); c4r.setVariable("DHT11_Hum", dhtResult.h); c4r.publishData();
Temperatura in vlažnost se ne spreminjata hitro, zato pošiljanje več kot ene vrednosti na 5 minut ni potrebno.
5. korak: diagnostika
Cloud4RPi podpira diagnostične podatke skupaj s spremenljivkami. Kot diagnostične podatke sem uporabil uptime, moč Wi-Fi signala in IP naslov:
c4r.declareDiagVariable("IP_Address"); c4r.declareDiagVariable("RSSI"); // WiFi signal strength c4r.declareDiagVariable("Uptime");
Opomba: Milisova funkcija, ki jo uporabljam za ponastavitev uptime, se ponastavi na nič vsakih ~ 50 dni. Kar je več kot dovolj za moj projekt.
Naslednja koda nastavi vrednosti diagnostičnih spremenljivk:
c4r.setDiagVariable("RSSI", (String)WiFi.RSSI() + " dBm"); c4r.setDiagVariable("IP_Address", WiFi.localIP().toString()); c4r.setDiagVariable("Uptime", uptimeHumanReadable(currentMillis)); c4r.publishDiag();
Funkcija uptimeHumanReadable pretvori milisekunde v priročno obliko:
String uptimeHumanReadable(unsigned long milliseconds){ static char uptimeStr[32]; unsigned long secs = milliseconds / 1000; unsigned long mins = secs / 60; unsigned int hours = mins / 60; unsigned int days = hours / 24; secs -= mins * 60; mins -= hours * 60; hours -= days * 24; sprintf(uptimeStr,"%d days %2.2d:%2.2d:%2.2d", (byte)days, (byte)hours, (byte)mins, (byte)secs); return String(uptimeStr); }
Funkcija prikaže niz, kot je ta, 5 dni 10:23:14 namesto čudnega velikega števila.
6. korak: razhroščevanje in zagon
Po prevajanju ustvarjene kode in ko smo jo naložili v NodeMCU se naprava poveže s storitvijo v oblaku in začne pošiljati podatke.
Razširjenost beleženja lahko povečate tako, da spremenljivko predprocesorja CLOUD4RPI_DEBUG nastavite na 1 (dodajte -D CLOUD4RPI_DEBUG = 1 v razdelek build_flags v datoteki platform.io).
Nato odprite spletno mesto cloud4rpi.io in v spletu opazite novo napravo (slika 3). Odprite ga, da vidite vse spremenljive vrednosti, ki jih prejme naprava: senzor in diagnostika.
7. korak: konfiguracija nadzorne plošče
V tem koraku podatkovna povezava z oblakom deluje. Zdaj pa nastavimo vizualno predstavitev podatkov.
Z uporabniškim vmesnikom za konfiguracijo nadzorne plošče sem ustvaril naslednjo nadzorno ploščo (slika 4)
Nadzorna plošča je dostopna za skupno rabo, zato jo takoj dam v skupno rabo s prijateljem.
Zaključek
Celotna koda projekta je na voljo v gist [2].
To je vse za zdaj!
Vprašanja in predlogi so dobrodošli v komentarjih.
Povzeto po: https://bit.ly/3dd0oIa
Viri:
1: https://bit.ly/2Q1o2if
2: https://bit.ly/3sdrSSr