Sisukord:
- 1. samm: BoM - materjali arve
- Samm: analoog -UV -andur
- Samm: ekraani paigaldamine: OLED
- Samm: kohalik UV -arvesti
- Samm: DHT22 paigaldamine õhutemperatuuri ja niiskuse mõõtmiseks
- Samm: andmete saatmine saidile ThingSpeak.com
- Samm 7: Järeldus
Video: IoT tehtud lihtsaks: Kaug -ilmaandmete jäädvustamine: UV ja õhutemperatuur ning niiskus: 7 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-02-01 14:40
Selles õpetuses jäädvustame kaugandmeid UV (ultraviolettkiirgus), õhutemperatuuri ja niiskuse kujul. Need andmed on väga olulised ja neid kasutatakse tulevases täielikus ilmajaamas.
Plokiskeem näitab, mida me lõpuks saame.
1. samm: BoM - materjali arve
NodeMCU (ESP8266-12E) - 9,00 USD
Niiskus- ja temperatuuriandur (DHT22) - 10 USD
UV -andur - 4,00 USD
OLED 12 USD
Leivalaud - 1,00 USD
Samm: analoog -UV -andur
See UV-andur genereerib analoogväljundi, mis on proportsionaalne valgustundliku spektri ultraviolettkiirgusega. See kasutab UV-fotodioodi (põhineb galliumnitriidil), mis suudab tuvastada 240–370 nm valguse vahemikku (mis katab UVB ja suurema osa UVA spektrist). Fotodioodi signaali tase on nano-ampritasemel väga väike, nii et moodul on integreerinud operatsioonivõimendi, mis võimendab signaali loetavamale volt-tasemele (0 kuni 1 V).
Andurit ja op-võimendit saab toita, ühendades VCC 3.3VDC (või 5VDC) ja GND maandusega. Analoogsignaali saab kätte OUT -pistikust.
Selle väljund on millivoltides ja seda loeb meie NodeMCU analoogsisend. Kui oleme lugenud, peaksime selle "teisendama" (või "kaardistama"), et kood saaks väärtustega paremini hakkama. Seda saame teha funktsiooni readSensorUV () abil:
/ * Lugege UV -andurit mV -s ja helistage UV -indeksi arvutamiseks */
void readSensorUV () {bait numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); viivitus (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023,0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); }
Kui oleme saanud UV -andmed, saame UV -indeksi hõlpsalt arvutada, nagu on määratletud ülaltoodud tabelis. Funktsioon indexCalculate () teeb seda meie jaoks:
/ * UV -indeksi arvutamine */
void indexCalculate () {if (dataSensorUV <227) indexUV = 0; muidu kui (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; muidu kui (318 <= dataSensorUV && dataSensorUV <408) indeksUV = 2; else if (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; muidu kui (503 <= dataSensorUV && dataSensorUV <606) indeksUV = 4; muidu kui (606 <= dataSensorUV && dataSensorUV <696) indeksUV = 5; muidu kui (696 <= dataSensorUV && dataSensorUV <795) indeksUV = 6; muidu kui (795 <= dataSensorUV && dataSensorUV <881) indeksUV = 7; muidu kui (881 <= dataSensorUV && dataSensorUV <976) indeksUV = 8; muidu kui (976 <= dataSensorUV && dataSensorUV <1079) indeksUV = 9; else if (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; muidu indeksUV = 11; }
Samm: ekraani paigaldamine: OLED
Katse eesmärgil lisame oma UV -meetrile OLED -i (see samm on täiesti valikuline).
Testide ajal on lubatud kasutada jadamonitori, kuid mis juhtub, kui kasutate oma prototüüpe arvutist kaugel eraldiseisvas režiimis? Selleks paigaldame OLED -ekraani SSD1306, mille peamised omadused on järgmised:
- Ekraani suurus: 0,96"
- I2C IIC SPI seeria
- 128X64
- Valge OLED LCD LED
Järgige elektriskeemi ja ühendage meie OLED -i 4 tihvti:
- VCC läheb 3,3 V pingele
- GND läheb maapinnale
- SCL läheb NodeMCU -le (GPIO 2) ==> D4
- SDA läheb NodeMCU -le (GPIO 0) ==> D3
Kui oleme ekraani ühendanud, laadime alla ja installime selle kogu meie Arduino IDE -sse: "ESP8266 OLED Driver for SSD1306 display", mille on välja töötanud Daniel Eichhorn (veenduge, et kasutate versiooni 3.0.0 või uuemat!).
Installige raamatukogu oma Arduino IDE -sse, mille leiate saidilt SSD1306Wire.h
Kui olete IDE taaskäivitanud, peaks teek olema juba installitud.
Raamatukogu toetab I2C protokolli, et pääseda sisse OLED-ekraanile sisseehitatud Wire.h raamatukogu abil:
/ * OLED */
#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Juhtmeekraan (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN);
Loetleme mõned olulised API -d, mida meie OLED -ekraaniga kasutatakse. Täieliku loendi leiate ülaltoodud GITHubist.
A. Ekraani juhtimine:
tühine init (); // Vormindage ekraan
void displayOn (tühine); // Lülita kuvar tühjale kuvale Väljas (tühine); // Lülita ekraan välja void clear (void); // Kustuta kohaliku pikslipuhvri void flipScreenVertically (); // Pöörake ekraan tagurpidi
B. Tekstitoimingud:
void drawString (int16_t x, int16_t y, stringi tekst); // (xpos, ypos, "Tekst")
tühine setFont (const char* fontData); // Määrab praeguse fondi.
Saadaolevad vaikefondid:
- ArialMT_Plain_10,
-
ArialMT_Plain_16,
- ArialMT_Plain_24
Kui OLED ise ja selle raamatukogu on installitud, kirjutame selle testimiseks lihtsa programmi. Sisestage IDE -le allolev kood, tulemuseks peaks olema ekraan, nagu on näidatud ülaltoodud fotol:
* OLED */
#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Juhtmeekraan (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {} / * Seadistusandmete käivitamine ja kuvamine OLED -il * / void displaySetup () {display.init (); // kuva kuva initsialiseerimine.clear (); // Kustuta ekraani kuva.flipScreenVertically (); // Pööra kuvar tagurpidi.display (); // Pane andmed ekraanile Serial.println ("Ekraanikatse algatamine"); display.setFont (ArialMT_Plain_24); display.drawString (30, 0, "OLED"); // (xpos, ypos, "Tekst") display.setFont (ArialMT_Plain_16); display.drawString (18, 29, "Test algatatud"); display.setFont (ArialMT_Plain_10); display.drawString (10, 52, "Serial BaudRate:"); display.drawString (90, 52, string (11500)); display.display (); // Pane andmed kuvamise viivitusele (3000); }
Ülaltoodud programmi saab alla laadida minu GitHubist:
SõlmMCU_OLED_Test
Samm: kohalik UV -arvesti
Nüüd, kui OLED -ekraan on paigaldatud, saame ühendada aku ja teha mõned kaugkatsed, kasutades oma "UV -meetrit"
#define SW_VERSION "UV_Sensor_V.1"
/ * UV -andur */ #define sensorUVPin A0 int dataSensorUV = 0; int indeksUV = 0; / * OLED */ #include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Juhtmeekraan (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {readSensorUV (); displayUV (); viivitus (1000); } / * Seadistusandmete käivitamine ja kuvamine OLED -il * / void displaySetup () {display.init (); // kuva kuva initsialiseerimine.clear (); // Kustuta ekraani kuva.flipScreenVertically (); // Pööra kuvar tagurpidi.display (); // Pane andmed ekraanile Serial.println ("UV -anduritesti algatamine"); display.setFont (ArialMT_Plain_24); display.drawString (10, 0, "MJRoBot"); display.setFont (ArialMT_Plain_16); display.drawString (0, 29, "UV -anduri test"); display.setFont (ArialMT_Plain_10); display.drawString (0, 52, "SW Ver.:"); display.drawString (45, 52, SW_VERSION); display.display (); viivitus (3000); } / * UV -anduri lugemine mV ja UV -indeksi arvutamine * / void readSensorUV () {bait numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); viivitus (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023,0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); } / * UV -indeksi arvutamine * / void indexCalculate () {if (dataSensorUV <227) indexUV = 0; muidu kui (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; muidu kui (318 <= dataSensorUV && dataSensorUV <408) indeksUV = 2; else if (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; muidu kui (503 <= dataSensorUV && dataSensorUV <606) indeksUV = 4; muidu kui (606 <= dataSensorUV && dataSensorUV <696) indeksUV = 5; muidu kui (696 <= dataSensorUV && dataSensorUV <795) indeksUV = 6; muidu kui (795 <= dataSensorUV && dataSensorUV <881) indeksUV = 7; muidu kui (881 <= dataSensorUV && dataSensorUV <976) indeksUV = 8; muidu kui (976 <= dataSensorUV && dataSensorUV <1079) indeksUV = 9; else if (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; muidu indeksUV = 11; } /* Kuva UV -väärtused kohalikul OLED -il* / void displayUV () {display.clear (); display.setFont (ArialMT_Plain_16); display.drawString (20, 0, "UV -andur"); display.drawString (0, 23, "UV (mV):"); display.drawString (80, 23, string (dataSensorUV)); display.drawString (0, 48, "UV -indeks:"); display.setFont (ArialMT_Plain_24); display.drawString (82, 42, String (indexUV)); display.display (); }
Ülaltoodud koodi saab alla laadida saidilt GitHun: NodeMCU_UV_Sensor_OLED.ino
Samm: DHT22 paigaldamine õhutemperatuuri ja niiskuse mõõtmiseks
Üks ilmastikuandmete hõivamiseks kõige enam kasutatavaid andureid on digitaalne suhtelise niiskuse ja temperatuuri andur DHT22 (või see on vend DHT11). See kasutab ümbritseva õhu mõõtmiseks mahtuvuslikku niiskusandurit ja termistorit ning sülitab andmestiku digitaalse signaali (analoogsisendit pole vaja).
Anduri toide peaks olema vahemikus 3,3 V kuni 5 V ja see töötab temperatuuril -40 oC kuni +80 oC täpsusega +/- 0,5 oC temperatuuril ja +/- 2% suhtelise õhuniiskuse korral. Samuti on oluline meeles pidada, et selle tuvastusperiood on keskmiselt 2 sekundit (minimaalne aeg näitude vahel). Adafruit'i sait pakub palju teavet nii DHT22 kui ka selle venna DHT11 kohta. Lisateabe saamiseks külastage DHT22/11 juhendaja lehte.
DHT22 -l on 4 tihvti (anduri poole, tihvt 1 on kõige rohkem vasakul):
- VCC (ühendame NodeMCU -st 3.3V -ga);
- Andmed välja;
- Pole ühendatud ja
- Maa.
Kui tavaliselt kasutate andurit vähem kui 20 m kaugusel, tuleks andmete ja VCC kontaktide vahele ühendada 10K takisti. Väljundnõel ühendatakse NodeMCU tihvtiga D3 (vt ülaltoodud skeemi). Kui andur on meie moodulisse installitud, laadige DHT -teek alla Adafruit GitHubi hoidlast ja installige see oma Arduino raamatukogu faili. Kui olete Arduino IDE uuesti laadinud, tuleks installida "DHT -andurite kogu".
Koodi alguses peame lisama järgmised read:
/* DHT22*/
#sisalda "DHT.h" #define DHTPIN D2 #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); float hum = 0; ujuki temp = 0;
Anduri lugemiseks luuakse uus funktsioon:
/ * Hangi DHT andmed */
tühine getDhtData (tühine) {float tempIni = temp; float humIni = hum; temp = dht.readTemperature (); hum = dht.readHumidity (); if (isnan (hum) || isnan (temp)) // Kontrollige, kas mõni lugemine ebaõnnestus, ja väljuge varakult (uuesti proovimiseks). {Serial.println ("DHT -andurilt ei õnnestunud lugeda!"); temp = tempIni; hum = humIni; tagasipöördumine; }}
Kogu koodi, sealhulgas UV- ja DHT -andurid, saate alla laadida minu GitHubist: NodeMCU_UV_DHT_Sensor_OLED
Samm: andmete saatmine saidile ThingSpeak.com
Siiani oleme kasutanud NodeMCU ESP12-E ainult tavalise ja tavalise Arduino plaadina. Loomulikult oleme selle suurejoonelise väikese kiibi tegelikku potentsiaali "kriimustanud" ja nüüd on aeg taevasse tõusta! Või parem tähtedele! Ehh … pilve!;-)
Alustagem!
- Esiteks peab teil olema konto aadressil ThinkSpeak.com
- Järgige juhiseid kanali loomiseks ning pange tähele oma kanali ID ja Write API võti
- Värskendage allolevat koodi oma WiFi -võrgu ja Thinkspeaki mandaadiga
- Käivitage programm IDE -s
Kommenteerime koodi kõige olulisemaid osi:
Esiteks helistame ESP8266 teeki, määratleme WiFi -kliendi ja määratleme teie kohaliku ruuteri ja Thinkspeaki mandaadi:
/* ESP12-E & Thinkspeak*/
#kaasake WiFi -kliendi klient; const char* MY_SSID = "SINU SSD -ID SIIN"; const char* MY_PWD = "SINU PAROOL SIIN"; const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "SINU KANALI KIRJUTAMISE API VÕTI";
Teiseks lisagem asjade Interneti projektide jaoks väga oluline raamatukogu: SimpleTimer.h:
/ * TIMER */
#kaasa SimpleTimer taimer;
Kolmandaks, seadistamise () ajal alustame jadaühendust, kutsume funktsiooni connectWiFi () ja määrame taimerid. Pange tähele, et koodirida: timer.setInterval (60000L, sendDataTS); helistab funktsiooni sendDataTS () iga 60 sekundi järel, et andmed ThinkSpeaki kanalile üles laadida.
tühine seadistus ()
{… Serial.begin (115200); viivitus (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}
Lõpetuseks, kuid mitte vähemtähtis, tsükli () ajal on ainus vajalik käsk käivitada taimer ja ongi kõik!
tühine tsükkel ()
{… Timer.run (); // Alustab SimpleTimer}
Allpool näete kahte olulist funktsiooni, mida kasutatakse Thinkspeaki suhtluse haldamiseks:
ESP12-E ühendus teie WiFi-võrguga:
/***************************************************
*WiFi ühendamine *********************************************** ***/ void connectWifi () {Serial.print ("Ühendamine"+*MY_SSID); WiFi.binin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {delay (1000); Seeria.print ("."); } Serial.println (""); Serial.println ("WiFi ühendatud"); Serial.println (""); }
ESP12-E saadab andmeid ThinkSpeaki:
/***************************************************
*Andmete saatmine Thinkspeak kanalile ******************************************* ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& väli1 ="; postStr += String (dataSensorUV); postStr += "& väli2 ="; postStr += String (indexUV); postStr += "& väli3 ="; postStr += String (temp); postStr += "& field4 ="; postStr += String (hum); postStr += "\ r / n / r / n"; client.print ("POST /uuenda HTTP /1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Ühendus: sulge / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Content-Type: application/x-www-form-urlencoded / n"); client.print ("Sisu-pikkus:"); klient.print (postStr.length ()); klient.print ("\ n / n"); klient.print (postStr); viivitus (1000); } saadetud ++; klient.peatus (); }
Kogu koodi leiate minu GitHubist: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Kui olete koodi oma NodeMCU -sse üles laadinud. Ühendame välise aku ja teeme mõningaid mõõtmisi päikese all. Panen kaugjaama katusele ja hakkan ThingSpeak.com -is andmeid jäädvustama, nagu ülaltoodud fotodel näidatud.
Samm 7: Järeldus
Nagu alati, loodan, et see projekt aitab teistel leida tee põnevasse elektroonikamaailma!
Üksikasjade ja lõpliku koodi saamiseks külastage minu GitHubi hoidlat: RPi-NodeMCU-Weather-Station
Rohkemate projektide jaoks külastage palun minu ajaveebi: MJRoBot.org
Püsige lainel! Järgmine õpetus saadame Raspberry Pi veebiserveril põhinevad andmed kaugest ilmajaamast kesksesse:
Tervitused maailma lõunaosast!
Kohtumiseni minu järgmises juhendis!
Aitäh, Marcelo
Soovitan:
Video jäädvustamine ESP32-CAM-plaadi abil: 4 sammu
Videosalvestus ESP32-CAM-plaadi abil: Vaatame väga huvitavat GitHubi hoidlat, mis võimaldab videosalvestust ESP32-CAM-plaadil. Video pole midagi muud kui hoolikalt ajastatud piltide seeria ja see visand põhineb sellel. Meeskond on lisanud ka FTP funktsioone
Kasvuhoone automatiseerimine LoRa abil! (1. osa) -- Andurid (temperatuur, niiskus, mulla niiskus): 5 sammu
Kasvuhoone automatiseerimine LoRa abil! (1. osa) || Andurid (temperatuur, niiskus, mulla niiskus): Selles projektis näitan teile, kuidas ma kasvuhoonet automatiseerisin. See tähendab, et näitan teile, kuidas ma kasvuhoone ehitasin ja kuidas toite- ja automaatikaelektroonika ühendasin. Samuti näitan teile, kuidas programmeerida Arduino tahvlit, mis kasutab L
Esp32-Ubidots-traadita kaug-temperatuur ja niiskus: 6 sammu
Esp32-Ubidots-Wireless-kaug-temperatuur ja niiskus: Selles õpetuses mõõdame temperatuuri ja niiskuse anduri abil erinevaid temperatuuri ja niiskuse andmeid. Samuti saate teada, kuidas neid andmeid Ubidotsile saata. Et saaksite seda erinevate rakenduste jaoks kõikjalt analüüsida
Kraken Jr. IoT rakenduse õpetus 2. osa - Cidi ja autentimiskoodi jäädvustamine: 4 sammu
Kraken Jr. IoT rakenduse õpetus 2. osa - Cidi ja autentimiskoodi jäädvustamine: õpetus 1. osa (e -posti registreerimine ja aktiveerimine) 2. õpetus (Cidi ja autentimiskoodi hõivamine) 3. osa (Arduino registreerimine) Uue kontrolleri registreerimine Kraken Jr. Rakendus on lihtne. Sellega tegelemiseks on aga vaja teha paar sammu
ESP8266 NodeMCU pääsupunkt (AP) veebiserverile, millel on DT11 temperatuuriandur ning printimise temperatuur ja niiskus brauseris: 5 sammu
ESP8266 NodeMCU pääsupunkt (AP) veebiserverile, millel on DT11 temperatuuriandur ning printimise temperatuur ja niiskus brauseris: Tere kutid, enamikus projektides kasutame ESP8266 ja enamikus projektides kasutame veebiserverina ESP8266, et andmetele juurde pääseda kõik seadmed, mis kasutavad WiFi -ühendust, pääsesid juurde ESP8266 hostitud veebiserverile, kuid ainus probleem on see, et vajame töötavat ruuterit