Sisällysluettelo:
- Vaihe 1: BoM - Bill of Material
- Vaihe 2: Analoginen UV -anturi
- Vaihe 3: Näytön asentaminen: OLED
- Vaihe 4: Paikallinen UV -mittari
- Vaihe 5: DHT22 -laitteen asentaminen ilman lämpötilan ja kosteuden mittauksiin
- Vaihe 6: Tietojen lähettäminen ThingSpeak.com -sivustoon
- Vaihe 7: Johtopäätös
Video: IoT Helppo: Kauko -säätietojen tallentaminen: UV- ja ilman lämpötila ja kosteus: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-02-01 14:40
Tässä opetusohjelmassa keräämme etätietoja UV (ultraviolettisäteily), ilman lämpötila ja kosteus. Nämä tiedot ovat erittäin tärkeitä ja niitä käytetään tulevassa täydellisessä sääasemassa.
Lohkokaavio näyttää, mitä saamme lopussa.
Vaihe 1: BoM - Bill of Material
NodeMCU (ESP8266-12E) - 9,00 USD
Kosteus- ja lämpötila -anturi (DHT22) - USD10.00
UV -anturi - 4,00 USD
OLED USD 12.00
Leipälauta - 1,00 USD
Vaihe 2: Analoginen UV -anturi
Tämä UV-anturi tuottaa analogisen lähdön, joka on verrannollinen valoa tunnistavasta spektristä löytyvään ultraviolettisäteilyyn. Se käyttää UV-fotodiodia (perustuu galliumnitridiin), joka pystyy havaitsemaan 240-370 nm: n valon (joka kattaa UVB: n ja suurimman osan UVA-spektristä). Valodiodin signaalitaso on hyvin pieni, nano-ampeeritasolla, joten moduuli on sisällyttänyt operaatiovahvistimen vahvistamaan signaalin luettavammalle voltitasolle (0-1 V).
Anturiin ja op-vahvistimeen voidaan kytkeä virta kytkemällä VCC 3.3VDC (tai 5VDC) ja GND maadoitukseen. Analoginen signaali voidaan saada OUT -nastasta.
Sen lähtö on millivoltteja ja se luetaan NodeMCU: n analogisen tulon avulla. Kun se on luettu, se pitäisi "muuntaa" (tai "kartoittaa"), jotta koodi käsittelee arvot paremmin. Voimme tehdä sen funktiolla readSensorUV ():
/ * Lue UV -anturi mV ja soita UV -indeksilasku */
void readSensorUV () {tavu numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); viive (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); }
Kun meillä on UV -tiedot, voimme helposti laskea UV -indeksin yllä olevan taulukon mukaisesti. Funktio indexCalculate () tekee sen puolestamme:
/ * UV -indeksin laskeminen */
void indexCalculate () {if (dataSensorUV <227) indexUV = 0; muuten jos (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; muuten jos (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; muuten jos (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; muuten jos (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; muuten jos (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; muuten jos (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; muuten jos (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; muuten jos (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; muuten jos (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; else if (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; muuten indeksiUV = 11; }
Vaihe 3: Näytön asentaminen: OLED
Testaustarkoituksiin lisäämme OLED -valon UV -mittariin (tämä vaihe on täysin valinnainen).
Sarjamonitorin käyttö on OK testien aikana, mutta mitä tapahtuu, kun käytät prototyyppejä kaukana tietokoneesta erillisessä tilassa? Asennetaan sitä varten OLED -näyttö, SSD1306, jonka pääominaisuudet ovat:
- Näytön koko: 0,96"
- I2C IIC SPI -sarja
- 128 x 64
- Valkoinen OLED LCD LED
Noudata sähkökaaviota ja liitä OLEDin neljä nastaa:
- VCC menee 3,3 V.
- GND menee maahan
- SCL siirtyy NodeMCU: hon (GPIO 2) ==> D4
- SDA siirtyy NodeMCU: hon (GPIO 0) ==> D3
Kun olemme liittäneet näytön, lataa ja asenna sen kirjasto Arduino IDE -laitteeseemme: Daniel Eichhornin kehittämä "ESP8266 OLED Driver for SSD1306 -näyttö" (Varmista, että käytät versiota 3.0.0 tai uudempaa!).
Asenna kirjasto Arduino IDE -laitteeseesi, joka löytyy SSD1306Wire.h -sivustolta
Kun olet käynnistänyt IDE: n uudelleen, kirjaston pitäisi olla jo asennettu.
Kirjasto tukee I2C-protokollaa OLED-näytön käyttämiseen sisäänrakennetun Wire.h-kirjaston avulla:
/ * OLED */
#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Wire -näyttö (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN);
Luetellaan joitakin tärkeitä sovellusliittymiä, joita käytetään OLED -näytön kanssa. Täydellinen luettelo löytyy yllä olevasta GITHubista.
Näytön ohjaus:
mitätön init (); // Alusta näyttö
void displayOn (mitätön); // Kytke näyttö päälle tyhjä näyttöOff (void); // Kytke näyttö pois päältä void clear (void); // Tyhjennä paikallinen pikselipuskuri void flipScreenVertically (); // Käännä näyttö ylösalaisin
Tekstitoiminnot:
void drawString (int16_t x, int16_t y, merkkijonoteksti); // (xpos, ypos, "Teksti")
void setFont (const char* fontData); // Asettaa nykyisen fontin.
Käytettävissä olevat oletusfontit:
- ArialMT_Plain_10,
-
ArialMT_Plain_16,
- ArialMT_Plain_24
Kun sekä OLED että sen kirjasto on asennettu, kirjoitetaan yksinkertainen ohjelma sen testaamiseksi. Kirjoita IDE -laitteeseesi alla oleva koodi, tuloksen pitäisi olla yllä olevan kuvan mukainen näyttö:
* OLED */
#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Wire -näyttö (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {} / * Aloita ja näytä asetustiedot OLED -laitteella * / void displaySetup () {display.init (); // alustetaan näytön näyttö.clear (); // Tyhjennä näytön näyttö.flipScreenVertically (); // Käännä näyttö ylösalaisin.display (); // Laita tiedot näyttöön Serial.println ("Initiation Display Test"); display.setFont (ArialMT_Plain_24); display.drawString (30, 0, "OLED"); // (xpos, ypos, "Teksti") display.setFont (ArialMT_Plain_16); display.drawString (18, 29, "Testi aloitettu"); display.setFont (ArialMT_Plain_10); display.drawString (10, 52, "Serial BaudRate:"); display.drawString (90, 52, merkkijono (11500)); display.display (); // Laita tiedot näytön viiveeseen (3000); }
Yllä oleva ohjelma voidaan ladata GitHubista:
SolmuMCU_OLED_Testi
Vaihe 4: Paikallinen UV -mittari
Nyt kun OLED -näyttö on asennettu, voimme liittää akun ja tehdä joitain etätestejä käyttämällä "UV -mittaria"
#define SW_VERSION "UV_Sensor_V.1"
/ * UV -anturi */ #määrittele anturiUVPin A0 int dataSensorUV = 0; int -indeksiUV = 0; / * OLED */ #include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Wire -näyttö (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {readSensorUV (); displayUV (); viive (1000); } / * Aloita ja näytä asetustiedot OLED -laitteella * / void displaySetup () {display.init (); // alustetaan näytön näyttö.clear (); // Tyhjennä näytön näyttö.flipScreenVertically (); // Käännä näyttö ylösalaisin.display (); // Laita tiedot näyttöön Serial.println ("Initiation UV Sensor Test"); display.setFont (ArialMT_Plain_24); display.drawString (10, 0, "MJRoBot"); display.setFont (ArialMT_Plain_16); display.drawString (0, 29, "UV -anturitesti"); display.setFont (ArialMT_Plain_10); display.drawString (0, 52, "SW Ver.:"); display.drawString (45, 52, SW_VERSION); display.display (); viive (3000); } / * Lue UV -anturi mV: ssä ja kutsu UV -indeksilasku * / void readSensorUV () {tavu numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); viive (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); } / * UV -indeksin laskeminen * / void indexCalculate () {if (dataSensorUV <227) indexUV = 0; muuten jos (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; muuten jos (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; muuten jos (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; muuten jos (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; muuten jos (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; muuten jos (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; muuten jos (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; muuten jos (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; muuten jos (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; else if (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; muuten indeksiUV = 11; } /* Näytä UV -arvot paikallisessa OLED -näytössä* / void displayUV () {display.clear (); display.setFont (ArialMT_Plain_16); display.drawString (20, 0, "UV -anturi"); display.drawString (0, 23, "UV (mV):"); display.drawString (80, 23, merkkijono (dataSensorUV)); display.drawString (0, 48, "UV -indeksi:"); display.setFont (ArialMT_Plain_24); display.drawString (82, 42, merkkijono (indexUV)); display.display (); }
Yllä oleva koodi voidaan ladata GitHun -sivustoltani: NodeMCU_UV_Sensor_OLED.ino
Vaihe 5: DHT22 -laitteen asentaminen ilman lämpötilan ja kosteuden mittauksiin
Yksi yleisimmin käytetyistä antureista säätietojen tallentamiseen on DHT22 (tai sen veli DHT11), digitaalinen suhteellisen kosteuden ja lämpötilan anturi. Se käyttää kapasitiivista kosteusanturia ja termistoria ympäröivän ilman mittaamiseen ja sylkee digitaalisen signaalin datanapille (ei tarvita analogisia tulonappeja).
Anturin tulee olla 3,3 V: n ja 5 V: n välillä ja se toimii -40 oC- +80 oC tarkkuudella +/- 0,5 oC lämpötilassa ja +/- 2% suhteellisessa kosteudessa. On myös tärkeää pitää mielessä, että sen havaitsemisaika on keskimäärin 2 sekuntia (vähimmäisaika lukemien välillä). Adafruitin sivusto tarjoaa paljon tietoa sekä DHT22: sta että sen veljestä DHT11. Lisätietoja on DHT22/11 -opetusohjelman sivulla.
DHT22: ssa on 4 nastaa (anturia vasten, nasta 1 on eniten jäljellä):
- VCC (muodostamme yhteyden 3.3 V: iin NodeMCU: sta);
- Data ulos;
- Ei kytketty ja
- Maa.
Kun tavallisesti käytät anturia alle 20 metrin etäisyyksillä, 10K -vastus on kytkettävä Data- ja VCC -nastojen väliin. Lähtötappi liitetään NodeMCU -nastaan D3 (katso yllä oleva kaavio). Kun anturi on asennettu moduuliin, lataa DHT -kirjasto Adafruit GitHub -varastosta ja asenna se Arduinon kirjasto -tiedostoosi. Kun olet ladannut Arduino IDE: n uudelleen, "DHT -anturikirjasto" tulee asentaa.
Koodin alussa on oltava seuraavat rivit:
/* DHT22*/
#sisällytä "DHT.h" #define DHTPIN D2 #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); kelluva hum = 0; kellukkeen lämpötila = 0;
Anturin lukemiseen luodaan uusi toiminto:
/ * Hanki DHT -tiedot */
void getDhtData (void) {float tempIni = temp; float humIni = hum; lämpötila = dht.readTemperature (); hum = dht.readHumidity (); if (isnan (hum) || isnan (temp)) // Tarkista, onko jokin luku epäonnistunut, ja poistu aikaisin (yritä uudelleen). {Serial.println ("DHT -anturin lukeminen epäonnistui!"); lämpötila = tempIni; hum = humIni; palata; }}
Koko koodi, mukaan lukien UV- ja DHT -anturit, voidaan ladata GitHubista: NodeMCU_UV_DHT_Sensor_OLED
Vaihe 6: Tietojen lähettäminen ThingSpeak.com -sivustoon
Toistaiseksi olemme käyttäneet vain NodeMCU ESP12-E tavallisena ja tavallisena Arduino-korttina. Tietenkin olemme vain "raapineet" tämän upean pienen sirun todellisen potentiaalin ja nyt on aika nousta taivaaseen! Tai parempi tähdille! Eh… pilveen!;-)
Aloitetaanpa!
- Ensinnäkin sinulla on oltava tili ThinkSpeak.com -sivustolla
- Luo kanava noudattamalla ohjeita ja merkitse muistiin kanavatunnuksesi ja Write API -avaimesi
- Päivitä alla oleva koodi WiFi -verkkoosi ja Thinkspeakin kirjautumistietoihin
- Suorita ohjelma IDE: llä
Kommentoidaan koodin tärkeimmät osat:
Soitetaan ensin ESP8266 -kirjastoon, määritetään WiFi -asiakas ja määritetään paikalliset reitittimen ja Thinkspeakin kirjautumistiedot:
/* ESP12-E & Thinkspeak*/
#Sisällytä WiFiClient -asiakas; const char* MY_SSID = "SINUN SSD -TÄSTÄ"; const char* MY_PWD = "SALASANA TÄSTÄ"; const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "KANAVAN KIRJOITA API -AVAIN";
Toiseksi, sisällytetään erittäin tärkeä kirjasto IoT -projekteille: SimpleTimer.h:
/ * AJASTIN */
#sisältää SimpleTimer -ajastimen;
Kolmanneksi, asennuksen () aikana aloitamme sarjaliikenteen, kutsumme toiminnon connectWiFi () ja määritämme ajastimet. Huomaa, että koodirivi: timer.setInterval (60000L, sendDataTS); kutsuu funktiota sendDataTS () 60 sekunnin välein ladatakseen tietoja ThinkSpeak -kanavalle.
mitätön asennus ()
{… Sarja.alku (115200); viive (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}
Lopuksi, mutta ei vähäisimpänä, silmukan () aikana ainoa tarvittava komento on käynnistää ajastin ja se on siinä!
tyhjä silmukka ()
{… Timer.run (); // Käynnistää SimpleTimer}
Alla näet kaksi tärkeää toimintoa, joita käytetään Thinkspeak -viestinnän käsittelyyn:
ESP12-E-yhteys WiFi-verkkoon:
/***************************************************
*WiFi -yhteyden muodostaminen *********************************************** ***/ void connectWifi () {Serial.print ("Yhdistäminen"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {delay (1000); Serial.print ("."); } Sarja.println (""); Serial.println ("WiFi -yhteys"); Serial.println (""); }
ESP12-E lähettää tietoja ThinkSpeakiin:
/***************************************************
*Tietojen lähettäminen Thinkspeak -kanavalle ******************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field1 ="; postStr += Jono (dataSensorUV); postStr += "& field2 ="; postStr += Merkkijono (indexUV); postStr += "& field3 ="; postStr += Merkkijono (lämpötila); postStr += "& field4 ="; postStr += Jono (hum); postStr += "\ r / n / r / n"; client.print ("POST /päivitä HTTP /1.1 / n"); client.print ("Isäntä: api.thingspeak.com / n"); client.print ("Yhteys: sulje / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Content-Type: application/x-www-form-urlencoded / n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); viive (1000); } lähetetty ++; client.stop (); }
Koko koodi löytyy GitHubistani: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Kun olet ladannut koodin NodeMCU -laitteeseesi. Kytketään ulkoinen akku ja tehdään mittauksia auringon alla. Laitan etäaseman katolle ja aloitan tietojen tallentamisen ThingSpeak.com -sivustolla yllä olevien kuvien mukaisesti.
Vaihe 7: Johtopäätös
Kuten aina, toivon, että tämä projekti voi auttaa muita löytämään tiensä elektroniikan jännittävään maailmaan!
Lisätietoja ja lopullisen koodin löydät GitHub-varastostani: RPi-NodeMCU-Weather-Station
Lisää projekteja löydät blogistani: MJRoBot.org
Pysy kanavalla! Seuraava opetusohjelma lähetämme tietoja etäsääasemalta keskusasemalle Raspberry Pi -verkkopalvelimen perusteella:
Terveisiä etelästä maailmasta!
Nähdään seuraavassa ohjeessani!
Kiitos, Marcelo
Suositeltava:
Kasvihuoneen automatisointi LoRa! (Osa 1) -- Anturit (lämpötila, kosteus, maaperän kosteus): 5 vaihetta
Kasvihuoneen automatisointi LoRa! (Osa 1) || Anturit (lämpötila, kosteus, maaperän kosteus): Tässä projektissa näytän sinulle, kuinka automatisoin kasvihuoneen. Tämä tarkoittaa sitä, että näytän teille, kuinka rakensin kasvihuoneen ja miten kytkin virta- ja automaatioelektroniikan. Aion myös näyttää sinulle, kuinka ohjelmoida Arduino -levy, joka käyttää L
WEMOS D1 Lämpötila/kosteus IoT: 6 vaihetta
WEMOS D1 Lämpö/kosteus IoT: Tämä on yksinkertainen koota, yhdistää, koota projekti, jolla pääset alkuun IoT -lämpötila- ja kosteusanturilla, joka yhdistää WiFi -verkkoon ja raportoi tietosi Blynk IoT -alustalle. Valvonnan tekeminen helpoksi älypuhelimestasi
DIY MusiLED, musiikin synkronoidut LEDit yhdellä napsautuksella Windows- ja Linux-sovelluksella (32- ja 64-bittinen). Helppo luoda, helppo käyttää, helppo siirtää: 3 vaihetta
DIY MusiLED, musiikin synkronoidut LEDit yhdellä napsautuksella Windows- ja Linux-sovelluksella (32- ja 64-bittinen). Helppo luoda, Helppo käyttää, Helppo siirtää: Tämä projekti auttaa sinua liittämään 18 LEDiä (6 punaista + 6 sinistä + 6 keltaista) Arduino-korttiin ja analysoimaan tietokoneen äänikortin reaaliaikaisia signaaleja ja välittämään ne LEDit sytyttävät ne beat -tehosteiden mukaan (virveli, korkea hattu, potku)
Musiikin tallentaminen ilmaiseksi tai ilman mitään: 5 vaihetta
Kuinka nauhoittaa musiikkia ilmaiseksi tai ilman mitään: Olen pienessä bändissä ja olemme halunneet tallentaa musiikkia, mutta ilman paljon rahaa, joten keksin tämän
Kuvien tallentaminen Flickristä ilman Spaceball Gifin hankkimista Firefoxissa: 8 vaihetta
Kuvien tallentaminen Flickristä ilman Spaceball Gifin hankkimista Firefoxissa: Jos olet selannut http://www.flickr.com ja yrittänyt koskaan tallentaa kuvan, jonka avulla et voi valita kaikkia kokoja, olet todennäköisesti löytänyt että et tallenna kuvaa, vaan pieni gif -tiedosto nimeltä " spaceball. " Ohjeelliset esitykset