Vremenska postaja IoT z RPi in ESP8266: 10 korakov
Vremenska postaja IoT z RPi in ESP8266: 10 korakov

Video: Vremenska postaja IoT z RPi in ESP8266: 10 korakov

Video: Vremenska postaja IoT z RPi in ESP8266: 10 korakov
Video: Weather station,❄️🌫️⛈️🌨️🌨️🌤️#arduino #nodemcu #electronics 2025, Januar
Anonim
Vremenska postaja IoT z RPi in ESP8266
Vremenska postaja IoT z RPi in ESP8266

V prejšnjih vadnicah smo se igrali z NodeMCU, senzorji in se učili, kako zajeti in zapisati podatke na ThingSpeak (platforma interneta stvari (IoT), ki vam omogoča zbiranje in shranjevanje podatkov senzorjev v oblaku in razvoj aplikacij IoT):

IOT MADE EASY: ZAPISANJE DALJINSKIH PODATKOV O VREMENU: UV in ZRAČNA TEMPERATURA & VLAGNOST

S to novo vadnico se bomo naučili, kako to storiti, vendar tokrat, z uporabo Raspberry Pi za zajem podatkov iz več različnih senzorjev in tudi raziskovanje različnih načinov komunikacije med napravami in spletom:

Senzorji in vrsta komunikacije:

  • DHT22 (temperatura in vlažnost) ==> Digitalna komunikacija
  • BMP180 (temperatura in tlak) ==> protokol I2C
  • DS18B20 (temperatura) ==> 1-žični protokol

Blok diagram prikazuje, kaj bomo na koncu dobili s tem projektom:

1. korak: BoM - kosovnica materialov

  1. Raspberry Pi V3 - 32,00 USD
  2. Senzor temperature in relativne vlažnosti DHT22 - 9,95 USD
  3. Upor 4K7 ohm
  4. DS18B20 Vodotesni temperaturni senzor - 5,95 USD
  5. Upor 4K7 ohm
  6. Senzor barometričnega tlaka, temperature in nadmorske višine BMP180 - 6,99 USD

2. korak: Namestitev senzorja temperature in vlažnosti

Namestitev senzorja temperature in vlažnosti
Namestitev senzorja temperature in vlažnosti

Prvi senzor, ki bo nameščen, bo DHT22 za zajemanje podatkov o temperaturi zraka in relativni vlažnosti. Spletno mesto ADAFRUIT ponuja odlične informacije o teh senzorjih. Spodaj je nekaj informacij, pridobljenih od tam:

Pregled

Poceni senzorji temperature in vlažnosti DHT so zelo osnovni in počasni, vendar so odlični za ljubitelje, ki želijo narediti nekaj osnovnih beleženja podatkov. Tipala DHT so sestavljena iz dveh delov, kapacitivnega senzorja vlažnosti in termistorja. V notranjosti je tudi zelo preprost čip, ki izvaja analogno -digitalno pretvorbo in izpljune digitalni signal s temperaturo in vlažnostjo. Digitalni signal je precej enostavno prebrati s katerim koli mikrokrmilnikom.

DHT22 Glavne značilnosti:

  • Poceni
  • Napajanje 3 do 5V in V/I
  • 2,5 mA max trenutna poraba med pretvorbo (pri zahtevanju podatkov)
  • Dobro za odčitke 0-100% vlažnosti z natančnostjo 2-5%
  • Dobro za odčitke temperature od -40 do 125 ° C ± 0,5 ° C natančnost
  • Največja frekvenca vzorčenja 0,5 Hz (enkrat na 2 sekundi)
  • Velikost telesa 15,1 mm x 25 mm x 7,7 mm
  • 4 zatiči z razmikom 0,1"

Ko boste običajno uporabljali senzor na razdaljah, manjših od 20 m, je treba med zatiči Data in VCC priključiti 4K7 ohmski upor. Izhodni podatkovni zatič DHT22 bo povezan z Raspberry GPIO 16. Preverite zgornji električni diagram in senzor povežite z zatiči RPi, kot je prikazano spodaj:

  1. Pin 1 - Vcc ==> 3.3V
  2. Pin 2 - Podatki ==> GPIO 16
  3. Pin 3 - Ni povezava
  4. Pin 4 - Gnd ==> Gnd

Ne pozabite namestiti 4K7 ohmskega upora med Vcc in Data pin

Ko je senzor priključen, moramo na naš RPi namestiti tudi njegovo knjižnico.

Namestitev knjižnice DHT:

Na napravi Raspberry, začenši z /home, pojdite na /Documents

cd dokumenti

Ustvarite imenik za namestitev knjižnice in se premaknite tja:

mkdir DHT22_Sensor

cd DHT22_Senzor

V brskalniku pojdite na Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Knjižnico prenesite s klikom na povezavo za prenos na desni in razpakirajte arhiv v nedavno ustvarjeni mapi Raspberry Pi. Nato pojdite v imenik knjižnice (podmapa, ki se samodejno ustvari, ko ste datoteko razpakirali), in izvedite ukaz:

sudo python3 setup.py install

Odprite preskusni program (DHT22_test.py) iz mojega GITHUB -a

uvoz Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 vlažnost, temperatura = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), če vlažnost ni Nobena in temperatura ni Nič: print ('Temp = {0: 0,1f}*C Vlažnost = {1: 0,1 f}%'. format (temperatura, vlažnost)) else: print (' Branje ni uspelo. Poskusite znova! ')

Zaženite program z ukazom:

python3 DHT22_test.py

Spodnji zaslon za tiskanje terminala prikazuje rezultat.

Slika
Slika

3. korak: Namestitev DS18B20 - temperaturnega senzorja

Namestitev DS18B20 - temperaturnega senzorja
Namestitev DS18B20 - temperaturnega senzorja
Namestitev DS18B20 - temperaturnega senzorja
Namestitev DS18B20 - temperaturnega senzorja

Pregled senzorja:

V tem vodiču bomo uporabili vodotesno različico senzorja DS18B20. Je zelo uporaben za daljinsko temperaturo v mokrih razmerah, na primer na vlažnih tleh. Senzor je izoliran in lahko izvaja meritve do 125 ° C (Adafrut zaradi kabelskega PVC plašča ne priporoča uporabe nad 100 ° C).

DS18B20 je digitalni senzor, zaradi česar je primeren za uporabo tudi na dolge razdalje! Ti 1-žični digitalni temperaturni senzorji so dokaj natančni (± 0,5 ° C v večjem delu območja) in lahko dajo do 12 bitov natančnosti iz vgrajenega digitalno-analognega pretvornika. Odlično delujejo z NodeMCU z enim samim digitalnim zatičem in na isti pin lahko celo povežete več, vsak ima tovarniško vžgan edinstven 64-bitni ID, ki jih razlikuje.

Senzor deluje od 3,0 do 5,0 V, kar pomeni, da ga je mogoče napajati neposredno iz napetosti 3,3 V z enim od malinovih zatičev (1 ali 17).

Senzor ima 3 žice:

  • Črna: GND
  • Rdeča: VCC
  • Rumena: 1-žilni podatki

Tu lahko najdete celotne podatke: Tehnični list DS18B20

Namestitev senzorja:

Sledite zgornjemu diagramu in vzpostavite povezave:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Podatki ==> GPIO 4 (privzeto za knjižnico)

Namestitev knjižnice Python:

Nato namestimo knjižnico Python, ki bo upravljala senzor:

sudo pip3 namestite w1thermsensor

Preden zaženete skript za testiranje senzorja, preverite, ali je vmesnik "1-Wire" v vašem RPi omogočen (glejte zgornji zaslon za tiskanje)

Po spremembi konfiguracije ne pozabite znova zagnati RPi

Testiranje senzorja:

Za testiranje senzorja lahko uporabite preprost python skript:

čas uvoza

iz w1thermsensor uvoza W1ThermSensor ds18b20Sensor = W1ThermSensor () medtem ko je True: temperatura = ds18b20Sensor.get_temperature () tiskanje ("Temperatura je % s celzija" % temperatura) time.sleep (1)

4. korak: Namestitev BMP180

Namestitev BMP180
Namestitev BMP180
Namestitev BMP180
Namestitev BMP180
Namestitev BMP180
Namestitev BMP180

Pregled senzorja:

BMP180 je naslednik BMP085, nove generacije visoko natančnih digitalnih senzorjev tlaka za potrošniške aplikacije. Elektronika BMP180 z zelo nizko porabo energije in nizko napetostjo je optimizirana za uporabo v mobilnih telefonih, dlančnikih, navigacijskih napravah GPS in zunanji opremi. Z nizko nadmorsko višino hrupa, ki znaša le 0,25 m v kratkem času pretvorbe, BMP180 ponuja vrhunske zmogljivosti. Vmesnik I2C omogoča enostavno integracijo sistema z mikrokrmilnikom. BMP180 temelji na piezo-uporni tehnologiji za EMC robustnost, visoko natančnost in linearnost ter dolgotrajno stabilnost.

Celoten podatkovni list BMP lahko najdete tukaj: BMP180 - digitalni senzor tlaka

Namestitev senzorja: Sledite zgornjemu diagramu in povežite:

  • Vin ==> 3,3 V.
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Omogočanje vmesnika I2C

Pojdite na Konfiguracija RPi in potrdite, da je vmesnik I2C omogočen. Če ne, ga omogočite in znova zaženite RPi.

Z uporabo BMP180

Če je bilo vse v redu in je bilo vse v redu, ste pripravljeni vklopiti svoj Pi in začeti videti, kaj vam BMP180 govori o svetu okoli vas.

Najprej morate preveriti, ali Pi vidi vaš BMP180. V terminalskem oknu poskusite naslednje:

sudo i2cdetect -y 1

Če je ukaz deloval, bi morali videti nekaj podobnega na zgornjem zaslonu za tiskanje terminalov, ki kaže, da je BMP180 na kanalu '77'.

Namestitev knjižnice BMP180:

Ustvarite imenik za namestitev knjižnice:

mkdir BMP180_Sensorcd BMP180_Sensor

V brskalniku pojdite na Adafruit GITHub:

github.com/adafruit/Adafruit_Python_BMP

Knjižnico prenesite s klikom na povezavo za prenos na desni in razpakirajte arhiv v mapi, ustvarjeni z Raspberry Pi. Nato pojdite v ustvarjeno podmapo in v imeniku knjižnice izvedite naslednji ukaz:

sudo python3 setup.py install

Odprite Python IDE in ustvarite preskusni program ter ga poimenujte, na primer BMP180Test.py

uvozite Adafruit_BMP. BMP085 kot BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) print (' Pressure = {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 ()))

Izvedite preskusni program:

python3 BMP180Test.py

Zgornji zaslon za tiskanje terminala prikazuje rezultat.

Upoštevajte, da je ta tlak predstavljen v Pa (Paskali). Oglejte si naslednji korak, če želite bolje razumeti to enoto.

5. korak: Merjenje vremena in nadmorske višine z BMP180

Merjenje vremena in nadmorske višine z BMP180
Merjenje vremena in nadmorske višine z BMP180

Vzemimo si čas, da malo bolje razumemo, kaj bomo dobili z odčitki BMP. Ta del vadnice lahko preskočite ali se vrnete pozneje.

Če želite izvedeti več o odčitkih senzorjev, obiščite to odlično vadnico:

BMP180 je bil zasnovan za natančno merjenje atmosferskega tlaka. Atmosferski tlak se spreminja glede na vreme in nadmorsko višino.

Kaj je atmosferski tlak?

Opredelitev atmosferskega tlaka je sila, ki jo zrak okoli vas izvaja na vse. Teža plinov v ozračju ustvarja atmosferski tlak. Skupna enota tlaka je "funt na kvadratni palec" ali psi. Tu bomo uporabili mednarodno oznako, to je newtonov na kvadratni meter, ki se imenujejo paskali (Pa).

Če vzamete 1 cm širok stolpec zraka, bi tehtal približno 1 kg

Ta teža s pritiskom na odtis tega stolpca ustvari atmosferski tlak, ki ga lahko merimo s senzorji, kot je BMP180. Ker ta zračni stolp širine cm tehta približno 1 kg, izhaja, da je povprečni tlak na ravni morja približno 101325 paskalov ali bolje 1013,25 hPa (1 hPa je znan tudi kot milibar - mbar). To se bo zmanjšalo za približno 4% na vsakih 300 metrov, ko se povzpnete. Višji kot ste, manjši pritisk boste videli, ker je stolpec na vrhu ozračja toliko krajši in zato tehta manj. To je koristno vedeti, saj lahko z merjenjem tlaka in matematiko določite svojo nadmorsko višino.

Zračni tlak na 3 810 metrih je le polovica tega na morski gladini.

BMP180 oddaja absolutni tlak v paskalih (Pa). En pascal je zelo majhen pritisk, približno toliko, kolikor bo list papirja položil na mizo. Pogosteje boste videli meritve v hektopaskalih (1 hPa = 100 Pa). Knjižnica, ki se uporablja tukaj, daje vrednosti s plavajočo vejico v hPa, kar je enako tudi enemu milibarju (mbar).

Tu je nekaj pretvorb v druge tlačne enote:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (funtov na kvadratni palec)
  • 1 hPa = 0,02953337 inHg (palci živega srebra)
  • 1 hpa = 0,00098692 atm (standardne atmosfere)

Temperaturni učinki

Ker temperatura vpliva na gostoto plina in gostota vpliva na maso plina, masa pa vpliva na tlak (wow), se bo atmosferski tlak s temperaturo dramatično spremenil. Piloti to poznajo kot "višino gostote", zaradi česar je lažje vzleteti v hladnem dnevu kot v vročem, ker je zrak gostejši in ima večji aerodinamični učinek. Za kompenzacijo temperature ima BMP180 precej dober temperaturni senzor in senzor tlaka.

Če želite izvesti odčitavanje tlaka, najprej izmerite temperaturo, nato jo združite s surovim odčitkom tlaka, da dobite končno merjenje tlaka, kompenzirano s temperaturo. (Knjižnica vse to zelo olajša.)

Merjenje absolutnega tlaka

Če vaša aplikacija zahteva merjenje absolutnega tlaka, morate le odčitati temperaturo in nato izmeriti tlak (za podrobnosti glejte primer skice). Končni odčitek tlaka bo v hPa = mbar. Če želite, lahko to pretvorite v drugo enoto z uporabo zgornjih faktorjev pretvorbe.

Upoštevajte, da se bo absolutni atmosferski tlak spreminjal glede na vašo nadmorsko višino in trenutne vremenske vzorce, kar je koristno za merjenje.

Opazovanja vremena

Atmosferski tlak na kateri koli lokaciji na zemlji (ali kjer koli z atmosfero) ni stalen. Kompleksna interakcija med zemeljskim vrtenjem, nagibom osi in številnimi drugimi dejavniki povzroči premikanje področij višjega in nižjega tlaka, kar posledično povzroči vremenske spremembe, ki jih vidimo vsak dan. Z opazovanjem sprememb tlaka lahko napovedujete kratkoročne spremembe vremena. Na primer, padec tlaka običajno pomeni mokro vreme ali se bliža nevihta (vstopa nizkotlačni sistem). Zvišanje tlaka običajno pomeni, da se bliža jasno vreme (skozi se premika visokotlačni sistem). Vendar ne pozabite, da se atmosferski tlak spreminja tudi z nadmorsko višino. Absolutni tlak v moji hiši, Lo Barnechea v Čilu (nadmorska višina 950 m) bo vedno nižji od absolutnega tlaka na primer v San Franciscu (manj kot 2 metra, skoraj nadmorska višina). Če bi vremenske postaje pravkar poročale o svojem absolutnem tlaku, bi bilo težko neposredno primerjati meritve tlaka z ene lokacije na drugo (in obsežne vremenske napovedi so odvisne od meritev s čim več postaj).

Da bi rešili ta problem, vremenske postaje vedno odstranijo učinke nadmorske višine iz poročanih odčitkov tlaka z matematičnim dodajanjem enakovrednega fiksnega tlaka, da bi bilo videti, kot da je bil odčitek opravljen na morski gladini. Ko to storite, bo višje branje v San Franciscu kot Lo Barnechea vedno posledica vremenskih vzorcev in ne zaradi nadmorske višine.

Če želite to narediti, v knjižnici obstaja funkcija, imenovana morska gladina (P, A). Ta vzame absolutni tlak (P) v hPa in trenutno nadmorsko višino postaje (A) v metrih ter odstrani učinke višine iz tlaka. Izhod te funkcije lahko uporabite za neposredno primerjavo vremenskih meritev z drugimi postajami po vsem svetu.

Določanje nadmorske višine

Ker se tlak spreminja glede na nadmorsko višino, lahko za merjenje nadmorske višine uporabite nekaj senzorja tlaka (z nekaj opozorili). Povprečni tlak ozračja na morski gladini je 1013,25 hPa (ali mbar). Ko se povzpnete proti vakuumu vesolja, to pade na nič. Ker je krivulja tega padca dobro razumljena, lahko z uporabo posebne enačbe izračunate višinsko razliko med dvema meritvama tlaka (p in p0).

Če za izhodiščni tlak uporabite pritisk morske gladine (1013,25 hPa), bo rezultat enačbe vaša trenutna nadmorska višina. V knjižnici je funkcija, imenovana višina (P, P0), ki vam omogoča, da dobite "izračunano višino".

Zgornja razlaga je povzeta iz BMP 180 Sparkfun vadnice.

Korak 6: Celoten HW

Popolni HW
Popolni HW

7. korak: Pošiljanje podatkov v ThingSpeak

Pošiljanje podatkov v ThingSpeak
Pošiljanje podatkov v ThingSpeak

Na tej točki smo se naučili, kako pripraviti RPi, da zajame podatke iz vseh treh senzorjev in jih natisne na terminalu. Zdaj je čas, da vidimo, kako te podatke poslati na platformo IoT, ThingSpeak.

Začnimo!

Najprej morate imeti račun na ThinkSpeak.com

Sledite navodilom za ustvarjanje kanala in upoštevajte svoj ID kanala in napis API -ja

Prenesite skript Python z mojega GitHub -a: localData ToTS_v1_EXT.py

Komentirajmo najpomembnejše dele kode:

Najprej uvozimo knjižnico ThingSpeak, opredelimo odjemalca WiFi in določimo lokalne poverilnice usmerjevalnika in Thinkspeak:

import thingspeak

S ThingSpeakom lahko komunicirate na več načinov, najpreprostejša pa bi bila uporaba odjemalčeve knjižnice za API Thingspeak.com, ki sta ga razvila Mikolaj Chwaliz in Keith Ellis.

Knjižnico lahko prenesete s spletnega mesta https://github.com/mchwalisz/thingspeak ali uporabite PIP na terminalu:

sudo pip3 namestite thingspeak

Nato v skriptu posodobite poverilnice kanala ThingSpeak

chId = 9999999 # Vnesite svoj ID kanala

tsKey = 'VNESI S KLJUČEM ZA PISANJE KANALA' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Zdaj pa inicializiramo 3 senzorje:

# DS18B20 1-Wire knjižnica

iz w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () # Knjižnica privzeto uporablja GPIO 4 # DHT22 uvoz knjižnice Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 knjižnica uvoz Adafruit_BMP8BP0BP8 Določiti morate dejansko nadmorsko višino, na kateri se nahaja vaša vremenska postaja, in posodobiti globalno spremenljivko "altReal". V mojem primeru se moja postaja nahaja na 950 m nad morjem

globalni altReal

altReal = 950

Ko enkrat vnesete realno višino postaje kot vhodno vrednost, lahko s funkcijo bmp180GetData (višina) dobimo absolutni tlak, tlak nadmorske višine, temperaturo in nadmorsko višino:

def bmp180GetData (nadmorska višina):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - nadmorska višina/44330.0, 5.255) temp = okrogla (temp, 1) pres = okrogla (pres/100, 2) # absolutni tlak v hPa (ali mbar) alt=okrogel (alt) presSeaLevel = okrogel (presSeaLevel/100, 2) # absolutni tlak v hPa (ali mbar) povratna temperatura, pres, alt, presSeaLevel

Funkcija getLocalData () bo vrnila vse lokalne podatke, ki jih zajame naša postaja:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Pridobite čas branja zdaj = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Preberi zunanjo temperaturo (razdalja 1 meter) tempExt = okroglo (ds18b20Sensor.get_temperature (), 1) tempLab, predAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT) in tempDHT ni nič: humLab = okroglo (humDHT

Ko vse zgornje funkcije zajamejo vse podatke, jih morate poslati v ThingSpeak. To boste storili s funkcijo sendDataTs ():

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Podatki poslani za 5 polj: ", tempLab, tempExt, humLab, presSL, altLab)

Ko so podatki o kanalu posodobljeni, shranite skript in ga izvedite na svojem terminalu:

sudo Python3 localData_ToTs_v1_EXT.py

O komunikacijskih protokolih

Upoštevajte, da se z uporabo "knjižnice stvari" uvozi "knjižnica zahtev", to je knjižnica HTTP z licenco Apache2, napisana v Pythonu. Uradno dokumentacijo o zahtevi za namestitev najdete tukaj:

docs.python-requests.org/en/latest/user/install/

Če je potrebno, lahko pred zagonom skripta preverite, ali je knjižnica zahtev nameščena:

sudo pip3 zahteve za namestitev

Po želji lahko uporabite MTTQ kot metodo za pošiljanje podatkov v ThingSpeak. MQTT se razlikuje od HTTP, nekoč je posebej zasnovan tako, da je lahek in je namenjen vgrajenim napravam z nizko zmogljivostjo RAM -a in procesorja. Prav tako v večini primerov MQTT uporablja manj pasovne širine.

Oglejte si to vadnico: za več podrobnosti posodobite kanal ThingSpeak z uporabo MQTT na Raspberry Pi.

8. korak: Pošiljanje oddaljenih podatkov v ThingSpeak z uporabo ESP8266

Pošiljanje oddaljenih podatkov v ThingSpeak z uporabo ESP8266
Pošiljanje oddaljenih podatkov v ThingSpeak z uporabo ESP8266
Pošiljanje oddaljenih podatkov v ThingSpeak z uporabo ESP8266
Pošiljanje oddaljenih podatkov v ThingSpeak z uporabo ESP8266

Za ta korak bomo uporabili isti HW, ki je bil razložen v vadnici muy:

IOT MADE EASY: ZAPISANJE DALJINSKIH PODATKOV O VREMENU: UV in ZRAČNA TEMPERATURA & VLAGNOST

Koda, ki jo bomo uporabili tukaj, je v bistvu enaka kot v tej vadnici. Komentirajmo najpomembnejše dele kode:

Najprej pokličimo knjižnico ESP8266, opredelimo odjemalca WiFi in določimo lokalne poverilnice usmerjevalnika in Thinkspeak:

/ * NodeMCU ESP12-E */

#include odjemalca WiFiClient; const char* MY_SSID = "VNESI S SVOJIM SSDID"; const char* MY_PWD = "VNESI S SVOJO GESO"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "VNESI S KLJUČEM ZA PISANJE";

Drugič, vključimo zelo pomembno knjižnico za projekte IoT: SimpleTimer.h:

/ * TIMER */

#include časovnik SimpleTimer;

Tretjič, med nastavitvijo () bomo sprožili serijsko komunikacijo, poklicali funkcijo connectWiFi () in določili časovnike. Upoštevajte, da vrstica kode: timer.setInterval (60000L, sendDataTS); bo vsakih 60 sekund poklical funkcijo sendDataTS (), da bo naložil podatke v kanal ThinkSpeak.

void setup ()

{… Serial.begin (115200); zamuda (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Nenazadnje je med zanko () potreben samo ukaz, da sproži časovnik in to je to!

void loop ()

{… Timer.run (); // Zažene SimpleTimer}

Spodaj si lahko ogledate dve pomembni funkciji, ki se uporabljata za komunikacijo Thinkspeak:

Povezava ESP12-E z vašim omrežjem WiFi:

/***************************************************

*Povezovanje WiFi *********************************************** ***/ void connectWifi () {Serial.print ("Povezovanje z"+*MY_SSID); WiFi.začetek (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {zakasnitev (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi povezan"); Serial.println (""); }

ESP12-E pošilja podatke v ThinkSpeak:

***************************************************

*Pošiljanje podatkov kanalu Thinkspeak ****************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& polje6 ="; postStr += niz (temp); postStr += "& polje7 ="; postStr += String (hum); postStr += "& field8 ="; postStr += niz (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /posodobi HTTP /1.1 / n"); client.print ("Gostitelj: api.thingspeak.com / n"); client.print ("Povezava: zaprta / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Vrsta vsebine: aplikacija/x-www-form-urlencoded / n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); zamuda (1000); } poslano ++; client.stop (); }

Celotno kodo najdete na mojem GitHubu: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Ko naložite kodo v svoj NodeMCU. Priključimo zunanjo baterijo in naredimo nekaj meritev pod soncem. Oddaljeno postajo postavim na streho in začnem zajemati podatke na ThingSpeak.com, kot je prikazano na zgornjih fotografijah.

9. korak: Končne opombe

Končne opombe
Končne opombe

Glavni namen te vadnice je bil pokazati, kako povezati Raspberry Pi s ThingSpeakom. To je odlično za zajemanje podatkov in njihovo beleženje na platformi IoT.

Ob priložnosti smo na ta posebni kanal poslali tudi podatke, ki jih zajemamo z oddaljene postaje z uporabo ESP8266. Ta pristop je v redu, vendar ni najboljši. Ker imamo "asinhrono" operacijo, se včasih oba RPi in ESP8266 poskušata prijaviti hkrati (ali z majhnim intervalom), kar ThingSpeak ovrže. Idealno bi bilo, če bi ESP8266 lokalno pošiljal podatke v Raspberry Pi, zadnji pa bi bil odgovoren za obdelavo vseh podatkov. S tem bi "glavna postaja" (Raspberry Pi) lahko naredila 3 stvari:

  • Zapišite vse podatke v lokalno bazo podatkov
  • Vse podatke predstavite na lokalni spletni strani (z uporabo bučke, kot je prikazano na zgornji fotografiji)
  • Pošiljanje vseh podatkov v ThingSpeak hkrati.

V prihodnji vadnici bomo raziskali te možnosti.

10. korak: Zaključek

Zaključek
Zaključek

Kot vedno upam, da lahko ta projekt pomaga drugim najti pot v razburljiv svet elektronike!

Za podrobnosti in končno kodo obiščite moj skladišče GitHub: RPi-NodeMCU-Weather-Station

Za več projektov obiščite moj blog: MJRoBot.org

Ostani na vezi! V naslednji vadnici bomo podatke iz oddaljene vremenske postaje poslali na osrednjo na podlagi spletnega strežnika Raspberry Pi:

Saludos z juga sveta!

Se vidimo v mojem naslednjem navodilu!

Hvala vam, Marcelo