Tartalomjegyzék:

IoT meteorológiai állomás RPi és ESP8266 segítségével: 10 lépés
IoT meteorológiai állomás RPi és ESP8266 segítségével: 10 lépés

Videó: IoT meteorológiai állomás RPi és ESP8266 segítségével: 10 lépés

Videó: IoT meteorológiai állomás RPi és ESP8266 segítségével: 10 lépés
Videó: Időjárás előrejelzés: könnyen megépíthető IoT kütyü. WiFi képes és sok örömöd lesz benne. 2024, November
Anonim
IoT meteorológiai állomás RPi -vel és ESP8266 -tal
IoT meteorológiai állomás RPi -vel és ESP8266 -tal

A korábbi oktatóanyagokban a NodeMCU -val, az érzékelőkkel játszottunk, és megtanultuk, hogyan lehet adatokat rögzíteni és naplózni a ThingSpeak -en (a dolgok internete (IoT) platform, amely lehetővé teszi az érzékelők adatainak összegyűjtését és tárolását a felhőben, valamint IoT -alkalmazások fejlesztését):

KÖNNYEN Könnyű: TÁVOLI IDŐS ADATOK FELVÉTELE: UV- ÉS LÉGHŐMÉRSÉKLET és PÁRÁS

Ezzel az új oktatóanyaggal megtanuljuk, hogyan kell csinálni ugyanezt, de ezúttal egy Raspberry Pi segítségével rögzíthetünk adatokat különböző érzékelőkről, és megvizsgálhatjuk az eszközök és az internet közötti kommunikáció különböző módjait:

Érzékelők és kompozíció típusa:

  • DHT22 (hőmérséklet és páratartalom) ==> Digitális kommunikáció
  • BMP180 (hőmérséklet és nyomás) ==> I2C protokoll
  • DS18B20 (hőmérséklet) ==> 1 vezetékes protokoll

A blokkdiagram megmutatja, hogy mit kapunk a projekt végén:

Kép
Kép

1. lépés: BoM - Anyagjegyzék

  1. Raspberry Pi V3 - 32,00 USD
  2. DHT22 hőmérséklet- és relatív páratartalom -érzékelő - 9,95 USD
  3. Ellenállás 4K7 ohm
  4. DS18B20 vízálló hőmérséklet -érzékelő - 5,95 USD
  5. Ellenállás 4K7 ohm
  6. BMP180 Barometrikus nyomás-, hőmérséklet- és magasságérzékelő - 6,99 USD

2. lépés: A hőmérséklet- és páratartalom -érzékelő felszerelése

A hőmérséklet- és páratartalom -érzékelő felszerelése
A hőmérséklet- és páratartalom -érzékelő felszerelése

Az első telepítendő érzékelő a DHT22 lesz, amely rögzíti a levegő hőmérsékletét és a relatív páratartalmat. Az ADAFRUIT webhely nagyszerű információkat tartalmaz ezekről az érzékelőkről. Íme, néhány információ innen lekérve:

Áttekintés

Az olcsó DHT hőmérséklet- és páratartalom-érzékelők nagyon egyszerűek és lassúak, de nagyszerűek azoknak a hobbistáknak, akik alapvető adatnaplózást szeretnének végezni. A DHT érzékelők két részből állnak, egy kapacitív páratartalom -érzékelőből és egy termisztorból. Van benne egy nagyon egyszerű chip is, amely analóg -digitális átalakítást végez, és a hőmérséklet és a páratartalom mellett digitális jelet bocsát ki. A digitális jel meglehetősen könnyen olvasható bármilyen mikrokontroller segítségével.

DHT22 Főbb jellemzők:

  • Alacsony költségű
  • 3-5 V tápellátás és I/O
  • 2,5 mA maximális áramfelhasználás a konverzió során (adatok kérése közben)
  • 0-100% -os páratartalom-mérésre alkalmas, 2-5% -os pontossággal
  • Jó -40 és 125 ° C közötti hőmérséklet ± 0,5 ° C pontossághoz
  • Legfeljebb 0,5 Hz mintavételi frekvencia (2 másodpercenként)
  • A test mérete 15,1 mm x 25 mm x 7,7 mm
  • 4 csap 0,1 "távolsággal

Ha általában az érzékelőt 20 m -nél kisebb távolságon használja, akkor egy 4K7 ohmos ellenállást kell csatlakoztatni az adat- és a VCC -tűk közé. A DHT22 kimeneti adatcsap a Raspberry GPIO 16 -hoz lesz csatlakoztatva. Ellenőrizze a fenti elektromos diagramot, és csatlakoztassa az érzékelőt az RPi csapokhoz az alábbiak szerint:

  1. 1. tű - Vcc ==> 3.3V
  2. 2. tű - Adatok ==> GPIO 16
  3. 3. tű - Nem csatlakozik
  4. 4. tű - Gnd ==> Gnd

Ne felejtse el telepíteni a 4K7 ohmos ellenállást a Vcc és az adatcsapok közé

Ha az érzékelő csatlakoztatva van, telepítenünk kell a könyvtárát az RPi -re.

A DHT Library telepítése:

A Raspberry készüléken a /home kezdve lépjen a /Dokumentumok oldalra

cd dokumentumok

Hozzon létre egy könyvtárat a könyvtár telepítéséhez, és lépjen oda:

mkdir DHT22_Sensor

cd DHT22_Sensor

Nyissa meg böngészőjében az Adafruit GitHub webhelyet:

github.com/adafruit/Adafruit_Python_DHT

Töltse le a könyvtárat a jobb oldali letöltési linkre kattintva, és bontsa ki az archívumot a Raspberry Pi nemrég létrehozott mappájában. Ezután lépjen a könyvtár könyvtárába (almappába, amely automatikusan létrejön a fájl kicsomagolásakor), és hajtsa végre a következő parancsot:

sudo python3 setup.py install

Nyisson meg egy tesztprogramot (DHT22_test.py) a GITHUB -ból

import Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 páratartalom, hőmérséklet = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), ha a páratartalom nincs Nincs és a hőmérséklet nincs: print ('Temp = {0: 0.1f}*C Páratartalom = {1: 0,1 f}%'. formátum (hőmérséklet, páratartalom)) else: print (' Nem sikerült olvasni. Próbálja újra! ')

Futtassa a programot a következő paranccsal:

python3 DHT22_test.py

Az alábbi Terminál nyomtatási képernyő az eredményt mutatja.

Kép
Kép

3. lépés: A DS18B20 - hőmérséklet -érzékelő felszerelése

A DS18B20 - hőmérséklet -érzékelő felszerelése
A DS18B20 - hőmérséklet -érzékelő felszerelése
A DS18B20 - hőmérséklet -érzékelő felszerelése
A DS18B20 - hőmérséklet -érzékelő felszerelése

Érzékelő áttekintés:

Ebben az oktatóanyagban a DS18B20 érzékelő vízálló változatát fogjuk használni. Nagyon hasznos távoli hőmérsékleten nedves körülmények között, például nedves talajon. Az érzékelő elszigetelt, és 125oC -ig végezhet méréseket (az Adafrut nem javasolja 100oC feletti hőmérsékleten történő használatát a kábel PVC burkolata miatt).

A DS18B20 egy digitális érzékelő, ami jóvá teszi használatát még nagy távolságokon is! Ezek az 1 vezetékes digitális hőmérséklet-érzékelők meglehetősen pontosak (± 0,5 ° C a tartomány nagy részén), és akár 12 bit pontosságot tudnak nyújtani a fedélzeti digitális-analóg átalakítóval. Kiválóan működnek a NodeMCU-val egyetlen digitális tű használatával, és akár több is csatlakoztatható ugyanahhoz a tűhöz, mindegyik egyedi 64 bites azonosítóval rendelkezik a gyárban, hogy megkülönböztesse őket.

Az érzékelő 3,0 és 5,0 V között működik, ami azt jelenti, hogy közvetlenül a 3,3 V feszültségről táplálható a Raspberry egyik tűjével (1 vagy 17).

Az érzékelőnek 3 vezetéke van:

  • Fekete: GND
  • Piros: VCC
  • Sárga: 1 vezetékes adat

Itt megtalálja a teljes adatot: DS18B20 Adatlap

Érzékelő telepítése:

Kövesse a fenti ábrát és kösse össze a csatlakozásokat:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Adatok ==> GPIO 4 (alapértelmezett a könyvtárhoz)

A Python könyvtár telepítése:

Ezután telepítsük a Python könyvtárat, amely kezeli az érzékelőt:

sudo pip3 telepítse a w1thermsensor programot

Mielőtt futtatná a szkriptet az érzékelő teszteléséhez, ellenőrizze, hogy engedélyezett-e az "1-vezetékes" interfész az RPi-ben (lásd a fenti nyomtatási képernyőt)

Ne felejtse el újraindítani az RPi -t, miután megváltoztatta annak konfigurációját

Az érzékelő tesztelése:

Az érzékelő teszteléséhez egyszerű python -szkript használható:

importálási idő

from w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () while True: temperature = ds18b20Sensor.get_temperature () print ("A hőmérséklet % s Celsius" % hőmérséklet) time.sleep (1)

4. lépés: A BMP180 telepítése

A BMP180 telepítése
A BMP180 telepítése
A BMP180 telepítése
A BMP180 telepítése
A BMP180 telepítése
A BMP180 telepítése

Érzékelő áttekintés:

A BMP180 a BMP085 utódja, a nagy pontosságú digitális nyomásérzékelők új generációja a fogyasztói alkalmazásokhoz. A BMP180 ultra-kis teljesítményű, kisfeszültségű elektronikája mobiltelefonokban, PDA-kban, GPS-navigációs készülékekben és kültéri berendezésekben való használatra lett optimalizálva. A BMP180 alacsony magasságú, mindössze 0,25 m -es zajjal és gyors átalakítási idővel kiváló teljesítményt nyújt. Az I2C interfész lehetővé teszi a rendszer egyszerű integrálását mikrokontrollerrel. A BMP180 piezo-rezisztív technológián alapul az EMC robusztussága, nagy pontossága és linearitása, valamint hosszú távú stabilitása érdekében.

A teljes BMP adatlap itt található: BMP180 - Digitális nyomásérzékelő

Érzékelő telepítése: Kövesse a fenti ábrát, és végezze el a csatlakoztatásokat:

  • Vin ==> 3.3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Az I2C interfész engedélyezése

Lépjen az RPi konfigurációba, és győződjön meg arról, hogy az I2C interfész engedélyezve van. Ha nem, akkor engedélyezze és indítsa újra az RPi -t.

A BMP180 használata

Ha mindent rendben telepített, és minden rendben van, akkor készen áll arra, hogy bekapcsolja a Pi -t, és elkezdje látni, mit mond a BMP180 a körülötted lévő világról.

Az első dolog, amit meg kell tennie, ellenőrizze, hogy a Pi látja -e a BMP180 -at. Próbálja ki a következőt a terminál ablakában:

sudo i2cdetect -y 1

Ha a parancs működött, akkor valami hasonlót kell látnia a fenti terminál nyomtatási képernyőn, amely azt mutatja, hogy a BMP180 a '77' csatornán van.

A BMP180 könyvtár telepítése:

Hozzon létre egy könyvtárat a könyvtár telepítéséhez:

mkdir BMP180_Sensorcd BMP180_Sensor

Nyissa meg böngészőjében az Adafruit GITHub webhelyét:

github.com/adafruit/Adafruit_Python_BMP

Töltse le a könyvtárat a jobb oldali letöltési linkre kattintva, és bontsa ki az archívumot a Raspberry Pi létrehozott mappájában. Ezután lépjen a létrehozott almappába, és hajtsa végre a következő parancsot a könyvtár könyvtárában:

sudo python3 setup.py install

Nyissa meg a Python IDE -t, és hozzon létre egy tesztprogramot, és nevezze el, például BMP180Test.py

import Adafruit_BMP. BMP085 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 ()))

Végezze el a tesztprogramot:

python3 BMP180Test.py

A fenti terminál nyomtatási képernyő mutatja az eredményt.

Vegye figyelembe, hogy ezt a nyomást Pa -ban (Pascals) adjuk meg. Lásd a következő lépést, hogy jobban megértse ezt az egységet.

5. lépés: Az időjárás és a magasság mérése BMP180 segítségével

Időjárás és magasság mérése BMP180 -mal
Időjárás és magasság mérése BMP180 -mal

Szánjunk egy kis időt arra, hogy egy kicsit jobban megértsük, mit fogunk kapni a BMP -értékekkel. Kihagyhatja az oktatóanyag ezen részét, vagy később visszatérhet.

Ha többet szeretne megtudni az érzékelő leolvasásáról, keresse fel ezt a nagyszerű oktatóanyagot:

A BMP180 -at úgy tervezték, hogy pontosan mérje a légköri nyomást. A légköri nyomás az időjárástól és a magasságtól függően változik.

Mi az a légköri nyomás?

A légköri nyomás meghatározása olyan erő, amelyet a körülötted lévő levegő mindenre kifejt. A légkörben lévő gázok súlya légköri nyomást hoz létre. A nyomás általános mértékegysége a "font per square inch" vagy psi. Itt a nemzetközi jelölést használjuk, vagyis a newtonokat négyzetméterenként, amelyeket paszkálnak (Pa) nevezünk.

Ha 1 cm széles levegőoszlopot vesz, körülbelül 1 kg súlyú lesz

Ez a súly, lenyomva az oszlop lábnyomát, létrehozza a légköri nyomást, amelyet olyan érzékelőkkel mérhetünk, mint a BMP180. Mivel ez a cm széles légoszlop súlya körülbelül 1 kg, ebből következik, hogy az átlagos tengerszint -nyomás körülbelül 101325 pascal, vagy jobb, 1013,25 hPa (1 hPa más néven milibar - mbar). Ez körülbelül 4% -kal csökken minden 300 méteren, amikor emelkedik. Minél magasabbra emelkedik, annál kisebb nyomást fog látni, mert a légkör tetejére eső oszlop sokkal rövidebb, és ezért kisebb súlyú. Ezt hasznos tudni, mert a nyomás mérésével és némi matekozással meghatározhatja magasságát.

A légnyomás 3, 810 méteren csak fele a tenger szintjének.

A BMP180 abszolút nyomást paszkálban (Pa) ad ki. Egy pascal nagyon kicsi nyomás, körülbelül annyi, amennyit egy papírlap az asztalon nyugtat. Gyakrabban láthat méréseket hektopaszkálban (1 hPa = 100 Pa). Az itt használt könyvtár lebegőpontos értékeket ad ki hPa-ban, ami szintén egy millibár (mbar).

Íme néhány átalakítás más nyomásegységekre:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (font / négyzethüvelyk)
  • 1 hPa = 0,02953337 inHg (higany hüvelyk)
  • 1 hpa = 0,00098692 atm (normál légkör)

Hőmérséklet hatások

Mivel a hőmérséklet befolyásolja a gáz sűrűségét, a sűrűség pedig a gáz tömegét, a tömeg pedig a nyomást (wow), a légköri nyomás drámaian megváltozik a hőmérséklettel. A pilóták ezt „sűrűségmagasságnak” nevezik, ami megkönnyíti a felszállást egy hideg napon, mint egy forró napon, mert a levegő sűrűbb és nagyobb az aerodinamikai hatása. A hőmérséklet kompenzálása érdekében a BMP180 meglehetősen jó hőmérséklet -érzékelőt és nyomásérzékelőt tartalmaz.

A nyomás leolvasásához először hőmérsékleti leolvasást kell végezni, majd ezt kombinálni kell egy nyersnyomás-leolvasással, hogy végső hőmérséklet-kompenzált nyomásmérést kapjunk. (A könyvtár mindezt nagyon megkönnyíti.)

Abszolút nyomás mérése

Ha az alkalmazás megköveteli az abszolút nyomás mérését, akkor csak le kell olvasnia a hőmérsékletet, majd végre kell hajtania a nyomás leolvasását (a részleteket lásd a példavázlaton). A végső nyomásérték hPa = mbar. Ha szeretné, ezt a fenti konverziós tényezők segítségével átalakíthatja egy másik egységgé.

Ne feledje, hogy a légkör abszolút nyomása a magasságától és az aktuális időjárási szokásoktól függően változik, mindkettő hasznos dolog mérni.

Időjárási megfigyelések

A légköri nyomás a föld bármely helyén (vagy bárhol, ahol légkör van) nem állandó. A Föld forgása, tengelyének dőlése és sok más tényező közötti összetett kölcsönhatás eredményeként egyre nagyobb és alacsonyabb nyomású területek mozognak, ami viszont a mindennap tapasztalható időjárási változásokat okozza. A nyomásváltozások figyelésével előre jelezheti az időjárás rövid távú változásait. Például a nyomáscsökkenés általában nedves időjárást vagy vihar közeledtét jelenti (alacsony nyomású rendszer mozog). A növekvő nyomás általában azt jelenti, hogy tiszta idő közeledik (nagynyomású rendszer halad át). De ne feledje, hogy a légköri nyomás magasságtól függően is változik. Az abszolút nyomás a házamban, a Lo Barnechea -ban Chilében (950 m tengerszint feletti magasság) mindig alacsonyabb lesz, mint például San Franciscóban (2 méternél kevesebb, majdnem tengerszint). Ha az időjárás-állomások csak jelentenék abszolút nyomásukat, nehéz lenne közvetlenül összehasonlítani a nyomásméréseket egyik helyről a másikra (és a nagyszabású időjárás-előrejelzések a lehető legtöbb állomás méréseitől függenek).

Ennek a problémának a megoldására az időjárás -állomások mindig eltávolítják a magasság hatásait a jelentett nyomásleolvasásaikból, matematikailag hozzáadva az egyenértékű rögzített nyomást, hogy úgy tűnjön, mintha a leolvasást tengerszinten végezték volna. Amikor ezt megteszi, San Francisco -ban a Lo Barnechea -nál magasabb érték mindig az időjárási viszonyok miatt lesz, és nem a magasság miatt.

Ehhez van egy függvény a könyvtárban, amelyet tengerszintnek (P, A) neveznek. Ez kiszámítja az abszolút nyomást (P) hPa -ban, és az állomás aktuális magasságát (A) méterben, és eltávolítja a nyomásból a magasság hatásait. Ennek a funkciónak a kimenetével közvetlenül összehasonlíthatja időjárási adatait a világ többi állomásával.

A magasság meghatározása

Mivel a nyomás a tengerszint feletti magasságtól függően változik, nyomásérzékelővel mérheti a magasságot (néhány figyelmeztetés mellett). A légkör átlagos nyomása tengerszinten 1013,25 hPa (vagy mbar). Ez nullára csökken, ahogy az űr vákuuma felé mászik. Mivel ennek a csökkenésnek a görbéje jól érthető, két egyenlet segítségével kiszámíthatja a két nyomásmérés (p és p0) közötti magasságkülönbséget.

Ha a tengerszinti nyomást (1013,25 hPa) használja alapnyomásként (p0), akkor az egyenlet kimenete az aktuális tengerszint feletti magassága lesz. A könyvtárban van egy magasság (P, P0) nevű funkció, amely lehetővé teszi a "számított magasság" lekérését.

A fenti magyarázat a BMP 180 Sparkfun oktatóanyagából származik.

6. lépés: A teljes HW

A teljes HW
A teljes HW

7. lépés: Adatok küldése a ThingSpeak szolgáltatásba

Adatok küldése a ThingSpeak szolgáltatásba
Adatok küldése a ThingSpeak szolgáltatásba

Ezen a ponton megtanultuk, hogyan kell előkészíteni az RPi -t, hogy mindhárom érzékelőből rögzítse az adatokat, és kinyomtassa őket a terminálon. Itt az ideje, hogy lássuk, hogyan lehet ezeket az adatokat elküldeni az IoT platformra, a ThingSpeak -re.

Kezdjük!

Először is rendelkeznie kell fiókkal a ThinkSpeak.com webhelyen

Kövesse az utasításokat a csatorna létrehozásához, és vegye figyelembe a csatornaazonosítót és az írási API -kulcsot

Töltse le a Python -szkriptet a GitHub -ból: localData ToTS_v1_EXT.py

Írjuk meg a kód legfontosabb részeit:

Először importáljuk a ThingSpeak könyvtárat, határozzuk meg a WiFi klienst, és határozzuk meg a helyi útválasztó és Thinkspeak hitelesítő adatait:

importáld a beszédet

Számos módja van a ThingSpeak kommunikációjának, a legegyszerűbb módja a Mikolaj Chwaliz és Keith Ellis által kifejlesztett thingspeak.com API ügyfélkönyvtárának használata.

A könyvtár letölthető a https://github.com/mchwalisz/thingspeak webhelyről, vagy a PIP használatával a terminálon:

sudo pip3 telepítse a thingspeak -et

Ezután a szkriptben frissítse a ThingSpeak csatorna hitelesítő adatait

chId = 9999999 # Lépjen be a csatornaazonosítóval

tsKey = 'BELÉPÉS A CSATORNA ÍRÓKULCSÁVAL' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Most inicializáljuk a 3 érzékelőt:

# DS18B20 1-vezetékes könyvtár

from w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () # Alapértelmezés szerint a GPIO 4 -et a könyvtár használja Az "altReal" globális változó frissítésével meg kell határoznia a meteorológiai állomás valódi magasságát. Esetemben az állomásom 950 méterrel a tengerszint felett található

globális altReal

altReal = 950

Miután megadta az állomás valós magasságát bemenetként, megkaphatjuk az abszolút nyomást, a tengerszint nyomását, a hőmérsékletet és a magasságot a bmp180GetData (magasság) függvénnyel:

def bmp180GetData (magasság):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - magasság/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100, 2) # abszolút nyomás hPa -ban (vagy mbar)

A getLocalData () függvény visszaad minden állomásunk által rögzített helyi adatot:

def getLocalData ():

globális timeString globális humLab globális tempExt globális tempLab globális presSL globális altLab globális presAbs # Olvassa el az olvasási időt most = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Olvasás külső hőmérséklet (1 méter távolság) tempExt = kerek (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin a tempDHT pedig nincs: humLab = kerek (humDHT

Miután a fenti funkciókkal rögzített minden adatot, el kell küldenie őket a ThingSpeak -hez. Ezt a sendDataTs () függvénnyel fogja megtenni:

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] 5 mezőre vonatkozó adatok elküldve: ", tempLab, tempExt, humLab, presSL, altLab)

A csatornaadatok frissítésével mentse el a szkriptet, és hajtsa végre a terminálon:

sudo Python3 localData_ToTs_v1_EXT.py

A kommunikációs protokollokról

Ne feledje, hogy a "thingspeak könyvtár" használatával importálja a "kéréskönyvtárat", azaz egy Apache2 licencelt HTTP -könyvtárat, amely Python nyelven íródott. A hivatalos kérési telepítési dokumentáció itt található:

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

Ha szükséges, a szkript futtatása előtt ellenőrizheti, hogy a kérési könyvtár telepítve van -e:

sudo pip3 telepítési kérések

Opcionálisan az MTTQ -t használhatja adatküldési módszerként a ThingSpeak számára. Az MQTT különbözik a HTTP -től, ha egyszer kifejezetten könnyűnek tervezték, és olyan beágyazott eszközökhöz készült, amelyek alacsony RAM- és CPU -teljesítményűek. Ezenkívül a legtöbb esetben az MQTT kevesebb sávszélességet használ.

Tekintse meg ezt az oktatóanyagot: További részletekért frissítse a ThingSpeak csatornát az MQTT használatával Raspberry Pi -n.

8. lépés: Távoli adatok küldése a ThingSpeak -re az ESP8266 használatával

Távoli adatok küldése a ThingSpeak -re az ESP8266 használatával
Távoli adatok küldése a ThingSpeak -re az ESP8266 használatával
Távoli adatok küldése a ThingSpeak -re az ESP8266 használatával
Távoli adatok küldése a ThingSpeak -re az ESP8266 használatával

Ebben a lépésben ugyanazt a HW -t fogjuk használni, amelyet a muy tutorialban ismertettünk:

KÖNNYEN Könnyű: TÁVOLI IDŐS ADATOK FELVÉTELE: UV- ÉS LÉGHŐMÉRSÉKLET és PÁRÁS

Az itt használt kód alapvetően ugyanaz, mint az oktatóanyagban. Írjuk meg a kód legfontosabb részeit:

Először hívjuk fel az ESP8266 könyvtárat, határozzuk meg a WiFi klienst, és határozzuk meg a helyi útválasztó és Thinkspeak hitelesítő adatait:

/ * NodeMCU ESP12-E */

#include WiFiClient client; const char* MY_SSID = "BELÉPÉS Az SSDID -vel"; const char* MY_PWD = "BELÉPÉS A JELSZÓVAL"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "BELÉPÉS ÍRÓKULCSÁVAL";

Másodszor, tegyünk bele egy nagyon fontos könyvtárat az IoT projektekhez: SimpleTimer.h:

/ * IDŐZÍTŐ */

#tartalmazza a SimpleTimer időzítőt;

Harmadszor, a setup () során soros kommunikációt kezdeményezünk, meghívjuk a connectWiFi () függvényt és meghatározzuk az időzítéseket. Ne feledje, hogy a kód sora: timer.setInterval (60000L, sendDataTS); 60 másodpercenként meghívja a sendDataTS () függvényt, hogy adatokat töltsön fel a ThinkSpeak csatornára.

üres beállítás ()

{… Serial.begin (115200); késleltetés (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Végül, de nem utolsósorban, a ciklus () alatt az egyetlen szükséges parancs az időzítő elindítása és kész!

üres hurok ()

{… Timer.run (); // SimpleTimer kezdeményezése}

Az alábbiakban láthatja a Thinkspeak kommunikáció kezeléséhez használt két fontos funkciót:

ESP12-E kapcsolat a WiFi hálózattal:

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

*WiFi csatlakoztatása *********************************************** ***/ void connectWifi () {Serial.print ("Csatlakozás"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {delay (1000); Soros.nyomtatás ("."); } Soros.println (""); Serial.println ("WiFi csatlakozás"); Serial.println (""); }

Az ESP12-E adatokat küld a ThinkSpeak-hez:

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

*Adatok küldése a Thinkspeak csatornára ******************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field6 ="; postStr += Karakterlánc (temp); postStr += "& field7 ="; postStr += Karakterlánc (hum); postStr += "& field8 ="; postStr += Karakterlánc (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /frissítés HTTP /1.1 / n"); client.print ("Gazdagép: api.thingspeak.com / n"); client.print ("Kapcsolat: bezár / 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); késleltetés (1000); } elküldve ++; client.stop (); }

A teljes kód megtalálható a GitHub -on: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Miután feltöltötte a kódot a NodeMCU -ba. Csatlakoztassunk egy külső akkumulátort, és végezzünk méréseket a nap alatt. Felteszem a távoli állomást a tetőre, és elkezdem rögzíteni az adatokat a ThingSpeak.com webhelyen, ahogy a fenti képeken látható.

9. lépés: Záró megjegyzések

Záró megjegyzések
Záró megjegyzések

Ennek az oktatóanyagnak a fő célja az volt, hogy bemutassa, hogyan csatlakoztatható a Raspberry Pi a ThingSpeakhez. Ez nagyszerű az adatok rögzítéséhez és naplózásához IoT platformon.

A lehetőséget kihasználva adatokat is küldtünk az adott csatornára, és egy távoli állomásról rögzítettük őket egy ESP8266 segítségével. Ez a megközelítés rendben van, de nem a legjobb. Mivel "aszinkron" műveletünk van, néha mind az RPi, mind az ESP8266 egyszerre (vagy kis időközönként) próbál naplózni azt, amit a ThingSpeak cáfol. Az ideális az lenne, ha az ESP8266 helyben küldene adatokat a Raspberry Pi -nek, és az utolsó lenne felelős az összes adat kezeléséért. Ezzel a "főállomás" (Raspberry Pi) három dolgot tehet:

  • Naplózzon be minden adatot egy helyi adatbázisba
  • Jelenítse meg az összes adatot egy helyi weboldalon (a Flask használatával, a fenti képen látható módon)
  • Az összes adat egyidejű küldése a ThingSpeak szolgáltatásba.

Egy későbbi oktatóanyagban megvizsgáljuk ezeket a lehetőségeket.

10. lépés: Következtetés

Következtetés
Következtetés

Mint mindig, remélem, hogy ez a projekt segíthet másoknak is eligazodni az elektronika izgalmas világában!

A részletekért és a végső kódért keresse fel a GitHub letéteményemet: RPi-NodeMCU-Weather-Station

További projektekért látogasson el a blogomra: MJRoBot.org

Maradjon velünk! A következő oktatóanyag adatokat küld egy távoli időjárás -állomásról egy központira egy Raspberry Pi webszerver alapján:

Kép
Kép

Üdvözlet a világ déli részéről!

Találkozunk a következő tanításomban!

Köszönöm, Marcelo

Ajánlott: