Sisukord:

IoT tehtud lihtsaks: Kaug -ilmaandmete jäädvustamine: UV ja õhutemperatuur ning niiskus: 7 sammu
IoT tehtud lihtsaks: Kaug -ilmaandmete jäädvustamine: UV ja õhutemperatuur ning niiskus: 7 sammu

Video: IoT tehtud lihtsaks: Kaug -ilmaandmete jäädvustamine: UV ja õhutemperatuur ning niiskus: 7 sammu

Video: IoT tehtud lihtsaks: Kaug -ilmaandmete jäädvustamine: UV ja õhutemperatuur ning niiskus: 7 sammu
Video: Заработать на Кронавирусе Covid. Сделать маску, маска защитная, усиленная, многоразовая, без шитья 2024, Juuli
Anonim
IoT Made Easy: Kaug -ilmaandmete jäädvustamine: UV ja õhutemperatuur ning niiskus
IoT Made Easy: Kaug -ilmaandmete jäädvustamine: UV ja õhutemperatuur ning niiskus

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.

Pilt
Pilt

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

Analoog UV -andur
Analoog UV -andur
Analoog UV -andur
Analoog UV -andur
Analoog UV -andur
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

Ekraani paigaldamine: OLED
Ekraani paigaldamine: OLED
Ekraani paigaldamine: OLED
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

Kohalik UV -arvesti
Kohalik UV -arvesti
Kohalik UV -arvesti
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

DHT22 paigaldamine õhutemperatuuri ja niiskuse mõõtmiseks
DHT22 paigaldamine õhutemperatuuri ja niiskuse mõõtmiseks
DHT22 paigaldamine õhutemperatuuri ja niiskuse mõõtmiseks
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):

  1. VCC (ühendame NodeMCU -st 3.3V -ga);
  2. Andmed välja;
  3. Pole ühendatud ja
  4. 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

Andmete saatmine saidile ThingSpeak.com
Andmete saatmine saidile ThingSpeak.com
Andmete saatmine saidile ThingSpeak.com
Andmete saatmine saidile ThingSpeak.com
Andmete saatmine saidile ThingSpeak.com
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!

  1. Esiteks peab teil olema konto aadressil ThinkSpeak.com
  2. Järgige juhiseid kanali loomiseks ning pange tähele oma kanali ID ja Write API võti
  3. Värskendage allolevat koodi oma WiFi -võrgu ja Thinkspeaki mandaadiga
  4. 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

Järeldus
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:

Pilt
Pilt

Tervitused maailma lõunaosast!

Kohtumiseni minu järgmises juhendis!

Aitäh, Marcelo

Soovitan: