Sadržaj:
- Korak 1: BoM - Bill of Materials
- Korak 2: Instaliranje senzora temperature i vlažnosti
- Korak 3: Instaliranje DS18B20 - temperaturnog senzora
- Korak 4: Instaliranje BMP180
- Korak 5: Mjerenje vremena i nadmorske visine pomoću BMP180
- Korak 6: Potpuni HW
- Korak 7: Slanje podataka na ThingSpeak
- Korak 8: Slanje udaljenih podataka na ThingSpeak pomoću ESP8266
- Korak 9: Završne napomene
- Korak 10: Zaključak
Video: IoT meteorološka stanica s RPi i ESP8266: 10 koraka
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Na prethodnim vodičima igrali smo se sa NodeMCU -om, senzorima i učili kako hvatati i evidentirati podatke na ThingSpeak -u (Internet stvari) (IoT) platformi koja vam omogućava prikupljanje i pohranjivanje podataka senzora u oblaku i razvoj IoT aplikacija):
IOT UČINJENO LAKO: HVATANJE DALJINSKIH VREMENSKIH PODATAKA: UV I ZRAK TEMPERATURA I VLAŽNOST
S ovim novim vodičem naučit ćemo kako to učiniti, ali ovaj put, koristeći Raspberry Pi za hvatanje podataka s nekoliko različitih senzora, te istražujući različite načine komunikacije između uređaja i weba:
Senzori i vrsta komunikacije:
- DHT22 (temperatura i vlažnost) ==> Digitalna komunikacija
- BMP180 (temperatura i pritisak) ==> I2C protokol
- DS18B20 (temperatura) ==> 1-Wire protokol
Blok dijagram pokazuje šta ćemo na kraju dobiti ovim projektom:
Korak 1: BoM - Bill of Materials
- Raspberry Pi V3 - 32,00 US $
- DHT22 Senzor temperature i relativne vlažnosti - 9,95 USD
- Otpornik 4K7 ohm
- DS18B20 Vodonepropusni senzor temperature - 5,95 USD
- Otpornik 4K7 ohm
- BMP180 Barometrijski senzor pritiska, temperature i nadmorske visine - 6,99 USD
Korak 2: Instaliranje senzora temperature i vlažnosti
Prvi senzor koji će se instalirati bit će DHT22 za snimanje podataka o temperaturi zraka i relativnoj vlažnosti. Stranica ADAFRUIT pruža sjajne informacije o tim senzorima. Ispod su neke informacije preuzete odatle:
Pregled
Jeftini senzori temperature i vlažnosti DHT-a vrlo su jednostavni i spori, ali su odlični za ljubitelje koji žele zapisati neke osnovne podatke. DHT senzori se sastoje od dva dijela, kapacitivnog senzora vlažnosti i termistora. Unutra se nalazi i vrlo osnovni čip koji radi neku analogno -digitalnu konverziju i izbacuje digitalni signal s temperaturom i vlažnošću. Digitalni signal se prilično lako čita pomoću bilo kojeg mikrokontrolera.
DHT22 Glavne karakteristike:
- Jeftino
- Napajanje od 3 do 5V i U/I
- 2,5 mA max trenutna upotreba tokom konverzije (dok se traže podaci)
- Dobro za očitanje vlažnosti od 0-100% s točnošću od 2-5%
- Dobro za tačnost očitavanja temperature od -40 do 125 ° C ± 0,5 ° C
- Ne više od 0,5 Hz brzina uzorkovanja (jednom u 2 sekunde)
- Veličina tela 15,1 mm x 25 mm x 7,7 mm
- 4 pina sa razmakom od 0,1"
Kada ćete obično koristiti senzor na udaljenostima manjim od 20 m, otpornik od 4K7 ohma trebao bi biti spojen između Data i VCC pinova. Izlazni podatkovni pin DHT22 bit će spojen na Raspberry GPIO 16. Provjerite gornji električni dijagram, povezujući senzor na RPi pinove kao što je dolje:
- Pin 1 - Vcc ==> 3.3V
- Pin 2 - Podaci ==> GPIO 16
- Pin 3 - Nije povezano
- Pin 4 - Gnd ==> Gnd
Ne zaboravite instalirati otpornik 4K7 ohma između Vcc i Data pinova
Nakon što je senzor spojen, moramo instalirati i njegovu biblioteku na naš RPi.
Instaliranje DHT biblioteke:
Na vašem Raspberryju, počevši od /home, idite na /Documents
cd dokumenti
Napravite direktorij za instaliranje biblioteke i prijeđite tamo:
mkdir DHT22_Sensor
cd DHT22_Senzor
U svom pregledniku idite na Adafruit GitHub:
github.com/adafruit/Adafruit_Python_DHT
Preuzmite biblioteku klikom na zip vezu za preuzimanje s desne strane i raspakirajte arhivu u nedavno stvorenoj mapi Raspberry Pi. Zatim idite u direktorij biblioteke (podmapa koja se automatski stvara kada raspakirate datoteku) i izvršite naredbu:
sudo python3 setup.py install
Otvorite testni program (DHT22_test.py) sa mog GITHUB -a
uvoz Adafruit_DHT
DHT22Senzor = Adafruit_DHT. DHT22 DHTpin = 16 vlažnost, temperatura = Adafruit_DHT.čitaj_ponovo (DHT22Sensor, DHTpin) ako vlažnost nije Nema i temperatura nije Ništa: print ('Temp = {0: 0.1f}*C Vlažnost = {1: 0.1 f}%'. format (temperatura, vlažnost)) else: print (' Čitanje nije uspjelo. Pokušajte ponovo! ')
Izvršite program naredbom:
python3 DHT22_test.py
Na donjem ekranu ispisa terminala prikazan je rezultat.
Korak 3: Instaliranje DS18B20 - temperaturnog senzora
Pregled senzora:
U ovom ćemo vodiču koristiti vodonepropusnu verziju senzora DS18B20. Vrlo je korisno za daljinsku temperaturu u vlažnim uvjetima, na primjer na vlažnom tlu. Senzor je izoliran i može mjeriti do 125oC (Adafrut ne preporučuje upotrebu preko 100oC zbog kabla od PVC omotača).
DS18B20 je digitalni senzor što ga čini dobrim za upotrebu čak i na velikim udaljenostima! Ovi 1-žični digitalni temperaturni senzori su prilično precizni (± 0,5 ° C u velikom dijelu raspona) i mogu dati do 12 bita preciznosti sa ugrađenog digitalno-analognog pretvarača. Odlično rade s NodeMCU-om koristeći jedan digitalni pin, a možete čak i povezati više njih na isti pin, svaki ima jedinstveni 64-bitni ID koji je tvornički ugrađen da ih razlikuje.
Senzor radi od 3,0 do 5,0 V, što znači da se može napajati direktno sa 3,3 V koje osigurava jedan od malinovih pinova (1 ili 17).
Senzor ima 3 žice:
- Crna: GND
- Crvena: VCC
- Žuta: 1-žični podaci
Ovdje možete pronaći potpune podatke: Tehnički list DS18B20
Ugradnja senzora:
Slijedite gornji dijagram i uspostavite veze:
- Vcc ==> 3.3V
- Gnd ==> Gnd
- Podaci ==> GPIO 4 (zadano za biblioteku)
Instaliranje Python biblioteke:
Zatim instalirajmo Python biblioteku koja će rukovati senzorom:
sudo pip3 instalirajte w1thermsensor
Prije pokretanja skripte za testiranje senzora, provjerite je li "1-Wire" sučelje omogućeno u vašem RPi (pogledajte gornji ekran za ispis)
Ne zaboravite ponovo pokrenuti RPi, nakon promjene njegove konfiguracije
Testiranje senzora:
Za testiranje senzora može se koristiti jednostavna python skripta:
vreme uvoza
iz uvoza w1thermsensor W1ThermSensor ds18b20Sensor = W1ThermSensor () dok je True: temperatura = ds18b20Sensor.get_temperature () ispis ("Temperatura je % s celzijusa" % temperatura) time.sleep (1)
Korak 4: Instaliranje BMP180
Pregled senzora:
BMP180 je nasljednik BMP085, nove generacije visokopreciznih digitalnih senzora pritiska za potrošačke aplikacije. Elektronika niskog napona ultra niske snage BMP180 optimizirana je za upotrebu u mobilnim telefonima, PDA uređajima, GPS navigacionim uređajima i vanjskoj opremi. Uz nisku buku od samo 0,25 m pri velikom vremenu konverzije, BMP180 nudi vrhunske performanse. I2C interfejs omogućava laku integraciju sistema sa mikrokontrolerom. BMP180 je zasnovan na piezootpornoj tehnologiji za EMC robusnost, visoku preciznost i linearnost, kao i dugoročnu stabilnost.
Kompletan BMP podatkovni list možete pronaći ovdje: BMP180 - Digitalni senzor pritiska
Ugradnja senzora: Slijedite gornji dijagram i spojite:
- Vin ==> 3.3V
- GND ==> GND
- SCL ==> GPIO 3
- SDA ==> GPIO 2
Omogućavanje I2C sučelja
Idite na RPi konfiguraciju i potvrdite da je I2C sučelje omogućeno. Ako nije, omogućite ga i ponovo pokrenite RPi.
Korišćenjem BMP180
Ako je sve dobro instalirano i sve je dobro povezano, sada ste spremni uključiti svoj Pi i početi vidjeti šta vam BMP180 govori o svijetu oko vas.
Prvo što trebate učiniti je provjeriti vidi li Pi vaš BMP180. Pokušajte sljedeće u prozoru terminala:
sudo i2cdetect -y 1
Ako je naredba uspjela, trebali biste vidjeti nešto slično na gornjem ekranu ispisa terminala, koji pokazuje da je BMP180 na kanalu '77'.
Instaliranje biblioteke BMP180:
Kreirajte direktorij za instaliranje biblioteke:
mkdir BMP180_Sensorcd BMP180_Sensor
U svom pregledniku idite na Adafruit GITHub:
github.com/adafruit/Adafruit_Python_BMP
Preuzmite biblioteku klikom na zip vezu za preuzimanje s desne strane i raspakirajte arhivu u mapi koju ste stvorili na Raspberry Pi -u. Zatim idite na kreiranu podmapu i izvršite sljedeću naredbu u direktoriju biblioteke:
sudo python3 setup.py install
Otvorite svoj Python IDE i kreirajte testni program i dajte mu ime, na primjer BMP180Test.py
uvesti Adafruit_BMP. BMP085 kao BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) print (' Pritisak = {0: 0.2f} Pa '. format (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) print (' Sealevel Pressure = {0: 0.2f} Pa'.format (sensor.read_sealevel_pressure ()))
Izvršite testni program:
python3 BMP180Test.py
Gornji ekran za ispis terminala prikazuje rezultat.
Imajte na umu da je taj pritisak predstavljen u Pa (Paskali). Pogledajte sljedeći korak da biste bolje razumjeli ovu jedinicu.
Korak 5: Mjerenje vremena i nadmorske visine pomoću BMP180
Odvojimo malo vremena da shvatimo nešto više o tome šta ćemo dobiti s očitanjima BMP -a. Ovaj dio vodiča možete preskočiti ili se kasnije vratiti.
Ako želite saznati više o očitanjima senzora, posjetite ovaj sjajni vodič:
BMP180 je dizajniran za precizno mjerenje atmosferskog pritiska. Atmosferski tlak varira ovisno o vremenu i nadmorskoj visini.
Šta je atmosferski pritisak?
Definicija atmosferskog pritiska je sila koju zrak oko vas vrši na sve. Težina plinova u atmosferi stvara atmosferski tlak. Uobičajena jedinica pritiska je "funti po kvadratnom inču" ili psi. Ovdje ćemo koristiti međunarodnu notaciju, to jest njutna po kvadratnom metru, koji se nazivaju paskali (Pa).
Ako biste uzeli stupac zraka širine 1 cm, težio bi oko 1 kg
Ova težina, pritiskom na otisak te kolone, stvara atmosferski pritisak koji možemo mjeriti senzorima poput BMP180. Budući da taj stub zraka širine cm teži oko 1 kg, slijedi da je prosječni tlak na razini mora oko 101325 paskala, ili bolje, 1013,25 hPa (1 hPa poznat je i kao milibar - mbar). Ovo će pasti za oko 4% na svakih 300 metara koliko se uspnete. Što se više penjete, manji ćete pritisak vidjeti, jer je stupac do vrha atmosfere toliko kraći i stoga ima manju težinu. Ovo je korisno znati jer mjerenjem pritiska i matematikom možete odrediti svoju visinu.
Vazdušni pritisak na 3 810 metara samo je polovina tog pritiska na nivou mora.
BMP180 daje apsolutni pritisak u paskalima (Pa). Jedan paskal je vrlo mala količina pritiska, otprilike količina koju će list papira djelovati počivajući na stolu. Češće ćete vidjeti mjerenja u hektopaskalima (1 hPa = 100 Pa). Biblioteka koja se ovdje koristi daje izlazne vrijednosti s pomičnim zarezom u hPa, što je također jednako jednom milibaru (mbar).
Evo nekih konverzija u druge jedinice pritiska:
- 1 hPa = 100 Pa = 1 mbar = 0,001 bar
- 1 hPa = 0,75006168 Torr
- 1 hPa = 0,01450377 psi (funti po kvadratnom inču)
- 1 hPa = 0,02953337 inHg (inči žive)
- 1 hpa = 0,00098692 atm (standardne atmosfere)
Temperaturni efekti
Budući da temperatura utječe na gustoću plina, a gustoća utječe na masu plina, a masa utječe na tlak (wow), atmosferski tlak će se dramatično promijeniti s temperaturom. Piloti to znaju kao "visinu po gustoći", što olakšava poletanje po hladnom danu nego po vrućem jer je zrak gušći i ima veći aerodinamički učinak. Kako bi kompenzirao temperaturu, BMP180 uključuje prilično dobar temperaturni senzor kao i senzor pritiska.
Da biste izvršili očitavanje pritiska, prvo očitavate temperaturu, zatim je kombinirate sa sirovim očitanjem tlaka kako biste došli do konačnog mjerenja tlaka kompenziranog temperaturom. (Biblioteka sve ovo čini vrlo lakim.)
Mjerenje apsolutnog pritiska
Ako vaša aplikacija zahtijeva mjerenje apsolutnog tlaka, sve što trebate učiniti je dobiti očitanje temperature, a zatim izvršiti očitanje pritiska (za detalje pogledajte primjer skice). Konačno očitavanje tlaka bit će u hPa = mbar. Ako želite, ovo možete pretvoriti u drugu jedinicu pomoću gore navedenih faktora konverzije.
Imajte na umu da će apsolutni pritisak atmosfere varirati i s vašom nadmorskom visinom i sa trenutnim vremenskim obrascima, što je korisno za mjerenje.
Vremenske prognoze
Atmosferski tlak na bilo kojoj lokaciji na zemlji (ili bilo gdje s atmosferom) nije konstantan. Složena interakcija između Zemljine rotacije, nagiba osi i mnogih drugih faktora rezultira pomicanjem područja većeg i nižeg pritiska, što zauzvrat uzrokuje varijacije u vremenu koje vidimo svaki dan. Prateći promjene tlaka, možete predvidjeti kratkotrajne promjene vremena. Na primjer, pad pritiska obično znači vlažno vrijeme ili se približava oluja (sistem niskog pritiska se useljava). Porast pritiska obično znači da se približava vedro vrijeme (sistem visokog pritiska se kreće). Ali zapamtite da atmosferski tlak također varira s nadmorskom visinom. Apsolutni pritisak u mojoj kući, Lo Barnechea u Čileu (nadmorska visina 950m) uvijek će biti niži od apsolutnog pritiska u San Franciscu, na primjer (manje od 2 metra, gotovo razina mora). Da su meteorološke stanice samo prijavile svoj apsolutni pritisak, bilo bi teško izravno usporediti mjerenje pritiska s jedne lokacije na drugu (a velika vremenska predviđanja ovise o mjerenjima sa što je moguće više stanica).
Da bi riješile ovaj problem, meteorološke stanice uvijek uklanjaju utjecaje visine s prijavljenih očitanja tlaka matematičkim dodavanjem ekvivalentnog fiksnog tlaka kako bi izgledalo kao da je očitanje snimljeno na razini mora. Kad to učinite, veće čitanje u San Franciscu od Lo Barnechee uvijek će biti zbog vremenskih obrazaca, a ne zbog nadmorske visine.
Da biste to učinili, u biblioteci postoji funkcija koja se zove razina mora (P, A). Time se uzima apsolutni tlak (P) u hPa, i trenutna nadmorska visina stanice (A) u metrima, te se uklanjaju utjecaji visine s tlaka. Izlaz ove funkcije možete upotrijebiti za direktno upoređivanje očitanja vremena s drugim postajama širom svijeta.
Određivanje visine
Budući da tlak varira s nadmorskom visinom, možete koristiti senzor pritiska za mjerenje nadmorske visine (uz nekoliko upozorenja). Prosječni tlak atmosfere na razini mora je 1013,25 hPa (ili mbar). Ovo pada na nulu dok se penjete prema vakuumu svemira. Budući da je krivulja ovog pada dobro razumljiva, možete izračunati visinsku razliku između dva mjerenja tlaka (p i p0) koristeći specifičnu jednadžbu.
Ako kao osnovni tlak koristite pritisak na razini mora (1013,25 hPa), izlaz jednadžbe bit će vaša trenutna nadmorska visina. U biblioteci postoji funkcija koja se zove visina (P, P0) koja vam omogućava da dobijete "izračunatu visinu".
Gornje objašnjenje je izvučeno iz BMP 180 Sparkfun tutorijala.
Korak 6: Potpuni HW
Korak 7: Slanje podataka na ThingSpeak
U ovom smo trenutku naučili kako pripremiti RPi za hvatanje podataka sa sva 3 senzora, ispisujući ih na terminalu. Sada je vrijeme da vidimo kako poslati te podatke na IoT platformu, ThingSpeak.
Počnimo!
Prvo morate imati račun na ThinkSpeak.com
Slijedite upute za kreiranje kanala i zapišite svoj ID kanala i API API ključ
Preuzmite Python Script sa mog GitHub -a: localData ToTS_v1_EXT.py
Komentirajmo najvažnije dijelove koda:
Prvo, uvezimo biblioteku ThingSpeak, definirajmo WiFi klijenta i definirajmo svoje lokalne usmjerivače i Thinkspeak vjerodajnice:
import thingspeak
Postoji nekoliko načina komunikacije s ThingSpeakom, a najjednostavniji način bi bio korištenje klijentske biblioteke za API Thingspeak.com koji su razvili Mikolaj Chwaliz i Keith Ellis.
Biblioteka se može preuzeti sa https://github.com/mchwalisz/thingspeak ili koristiti PIP na terminalu:
sudo pip3 instalirajte thingspeak
Zatim unutar skripte ažurirajte vjerodajnice kanala ThingSpeak
chId = 9999999 # Unesite sa svojim ID -om kanala
tsKey = 'UNOSITE KLJUČ ZA PISANJE KANALA' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)
Pokrenimo sada tri senzora:
# DS18B20 1-Wire knjižnica
iz w1thermsensor -a uvoz W1ThermSensor ds18b20Sensor = W1ThermSensor () # Prema zadanim postavkama biblioteku koristi GPIO 4 # DHT22 Uvoz biblioteke Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 knjižnica import Adafruit_BP8 Trebali biste definirati stvarnu nadmorsku visinu na kojoj se nalazi vaša meteorološka stanica, ažurirajući globalnu varijablu "altReal". U mom slučaju, moja stanica se nalazi na 950m nadmorske visine
globalni altReal
altReal = 950
Jednom kada unesete stvarnu visinu stanice kao ulaz, možemo dobiti apsolutni tlak, pritisak na razini mora, temperaturu i nadmorsku visinu pomoću funkcije bmp180GetData (nadmorska visina):
def bmp180GetData (nadmorska visina):
temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - nadmorska visina/44330.0, 5.255) temp = okrugla (temp, 1) pres = okrugla (pres/100, 2) # apsolutni pritisak u hPa (ili mbar) alt=okrugli (alt) presSeaLevel = okrugli (presSeaLevel/100, 2) # apsolutni pritisak u hPa (ili mbar) povratna temp., Pres, alt, presSeaLevel
Funkcija getLocalData () će vratiti sve lokalne podatke koje naša stanica uhvati:
def getLocalData ():
global timeString globalni humLab globalni tempExt globalni tempLab globalni presSL globalni altLab globalni predAbs # Dobijte vrijeme čitanja sada = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Pročitajte vanjsku temperaturu (udaljenost od 1 metra) tempExt = okruglo (ds18b20Sensor.get_temperature (), 1) tempLab, predAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT) nije DHT i tempDHT nije Ništa: humLab = okruglo (humDHT
Nakon što sve gore navedene funkcije uhvate sve podatke, morate ih poslati u ThingSpeak. To ćete učiniti pomoću funkcije sendDataTs ():
def sendDataTs ():
data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Podaci su poslati za 5 polja: ", tempLab, tempExt, humLab, presSL, altLab)
S ažuriranjem podataka o kanalu, spremite skriptu i izvedite je na svom terminalu:
sudo Python3 localData_ToTs_v1_EXT.py
O komunikacijskim protokolima
Imajte na umu da se pomoću "thingspeak biblioteke" uvozi "biblioteka zahtjeva", to jest licencirana HTTP biblioteka Apache2, napisana na Pythonu. Službenu dokumentaciju o zahtjevu za instalaciju možete pronaći ovdje:
docs.python-requests.org/en/latest/user/install/
Ako je potrebno, prije pokretanja skripte možete provjeriti je li biblioteka zahtjeva instalirana:
sudo pip3 zahtjevi za instalaciju
Opcionalno, možete koristiti MTTQ kao metodu za slanje podataka u ThingSpeak. MQTT se nekada razlikuje od HTTP -a. Posebno je dizajniran da bude lagan i namijenjen za ugrađene uređaje sa niskim performansama RAM -a i CPU -a. Također, u većini slučajeva MQTT koristi manju propusnost.
Pogledajte ovaj vodič: Ažurirajte ThingSpeak kanal koristeći MQTT na Raspberry Pi -u za više detalja.
Korak 8: Slanje udaljenih podataka na ThingSpeak pomoću ESP8266
Za ovaj korak koristit ćemo isti HW koji je objašnjen u muy tutorialu:
IOT UČINJENO LAKO: HVATANJE DALJINSKIH VREMENSKIH PODATAKA: UV I ZRAK TEMPERATURA I VLAŽNOST
Kôd koji ćemo ovdje koristiti u osnovi je isti koji se koristi u tom vodiču. Komentirajmo najvažnije dijelove koda:
Prvo, nazovimo biblioteku ESP8266, definirajmo WiFi klijenta i definirajmo lokalne vjerodajnice za usmjerivač i Thinkspeak:
/ * NodeMCU ESP12-E */
#include WiFiClient klijent; const char* MY_SSID = "ULAZITE SA SVOJIM SSDID -om"; const char* MY_PWD = "ULAZITE SA SVOJOM LOZINKOM"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ENTER SA VAŠIM KLJUČEM ZA PISANJE";
Drugo, uključimo vrlo važnu biblioteku za IoT projekte: SimpleTimer.h:
/ * TIMER */
#include SimpleTimer timer;
Treće, tijekom setup (), inicirat ćemo serijsku komunikaciju, pozvati funkciju connectWiFi () i definirati tajmere. Imajte na umu da red koda: timer.setInterval (60000L, sendDataTS); će pozvati funkciju sendDataTS () svakih 60 sekundi, kako bi otpremili podatke na ThinkSpeak kanal.
void setup ()
{… Serial.begin (115200); kašnjenje (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}
Najzad, ali ne i najmanje važno, tokom loop (), potrebna je samo naredba da se pokrene tajmer i to je to!
void loop ()
{… Timer.run (); // Pokreće SimpleTimer}
U nastavku možete vidjeti dvije važne funkcije koje se koriste za rukovanje Thinkspeak komunikacijom:
ESP12-E veza s vašom WiFi mrežom:
/***************************************************
*Povezivanje WiFi *********************************************** ***/ void connectWifi () {Serial.print ("Povezivanje sa"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {kašnjenje (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi povezan"); Serial.println (""); }
ESP12-E šalje podatke u ThinkSpeak:
***************************************************
*Slanje podataka na kanal Thinkspeak ****************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& polje6 ="; postStr += String (temp); postStr += "& polje7 ="; postStr += String (hum); postStr += "& field8 ="; postStr += String (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /ažuriraj HTTP /1.1 / n"); client.print ("Domaćin: api.thingspeak.com / n"); client.print ("Veza: zatvori / 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); kašnjenje (1000); } poslano ++; client.stop (); }
Kompletan kod možete pronaći na mom GitHub -u: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Nakon što ste kod učitali na svoj NodeMCU. Spojimo vanjsku bateriju i izvršimo neka mjerenja pod suncem. Stavio sam Remote Station na krov i počeo snimati podatke na ThingSpeak.com kao što je prikazano na gornjim fotografijama.
Korak 9: Završne napomene
Glavna svrha ovog vodiča bila je pokazati kako spojiti Raspberry Pi na ThingSpeak. Ovo je sjajno za snimanje podataka i njihovo bilježenje na IoT platformi.
Koristeći priliku, poslali smo i podatke na taj određeni kanal, snimajući ih s udaljene stanice pomoću ESP8266. Ovaj pristup je u redu, ali nije najbolji. Budući da imamo "asinhronu" operaciju, ponekad i RPi i ESP8266 pokušavaju prijaviti u isto vrijeme (ili s malim intervalom) ono što ThingSpeak opovrgava. Idealno bi bilo kada bi ESP8266 slao podatke lokalno na Raspberry Pi, a zadnji bi bio odgovoran za rukovanje svim podacima. Na taj način "glavna stanica" (Raspberry Pi) mogla bi učiniti 3 stvari:
- Zapišite sve podatke u lokalnu bazu podataka
- Prikažite sve podatke na lokalnoj web stranici (koristeći Flask kao što je prikazano na gornjoj fotografiji)
- Slanje svih podataka u ThingSpeak istovremeno.
Na jednom od budućih vodiča istražit ćemo te opcije.
Korak 10: Zaključak
Kao i uvijek, nadam se da će ovaj projekt pomoći drugima da pronađu svoj put u uzbudljivi svijet elektronike!
Za detalje i konačni kod posjetite moje skladište GitHub: RPi-NodeMCU-Weather-Station
Za više projekata posjetite moj blog: MJRoBot.org
Ostanite s nama! Sljedeći vodič ćemo poslati podatke s udaljene meteorološke stanice na centralnu, na temelju Raspberry Pi web servera:
Saludos sa juga svijeta!
Vidimo se u mom sljedećem uputstvu!
Hvala ti, Marcelo