Sisällysluettelo:

IoT -sääasema RPi: llä ja ESP8266: 10 askelta
IoT -sääasema RPi: llä ja ESP8266: 10 askelta

Video: IoT -sääasema RPi: llä ja ESP8266: 10 askelta

Video: IoT -sääasema RPi: llä ja ESP8266: 10 askelta
Video: Как создать свой собственный сервер принтеров Canon с помощью Raspberry Pi 2024, Marraskuu
Anonim
IoT -sääasema, jossa RPi ja ESP8266
IoT -sääasema, jossa RPi ja ESP8266

Aiemmissa opetusohjelmissa olemme leikkineet NodeMCU: n, antureiden kanssa ja oppineet keräämään ja kirjaamaan tietoja ThingSpeakilla (esineiden internet (IoT) -alusta, jonka avulla voit kerätä ja tallentaa anturitietoja pilveen ja kehittää IoT -sovelluksia):

IOT MADE HELPPO: KAUKOSÄÄN TIETOJEN VALVONTA: UV- JA ILMALÄMPÖTILA & KOSTEUS

Tämän uuden opetusohjelman avulla opimme tekemään saman, mutta tällä kertaa käyttämällä Raspberry Pi -laitetta tietojen keräämiseen useista eri antureista ja tutkimalla myös erilaisia tapoja kommunikoida laitteiden ja verkon välillä:

Anturit ja Cominication -tyyppi:

  • DHT22 (lämpötila ja kosteus) ==> Digitaalinen viestintä
  • BMP180 (lämpötila ja paine) ==> I2C -protokolla
  • DS18B20 (lämpötila) ==> 1-johtiminen protokolla

Lohkokaavio näyttää, mitä saamme tämän projektin lopussa:

Kuva
Kuva

Vaihe 1: BoM - materiaaliluettelo

  1. Raspberry Pi V3 - 32,00 dollaria
  2. DHT22 lämpötila- ja suhteellisen kosteuden anturi - 9,95 USD
  3. Vastus 4K7 ohmia
  4. Vedenpitävä lämpötila -anturi DS18B20 - 5,95 USD
  5. Vastus 4K7 ohmia
  6. BMP180 Barometrinen paine-, lämpötila- ja korkeusanturi - 6,99 USD

Vaihe 2: Lämpötila- ja kosteusanturin asennus

Lämpötila- ja kosteusanturin asentaminen
Lämpötila- ja kosteusanturin asentaminen

Ensimmäinen asennettava anturi on DHT22 ilman lämpötilan ja suhteellisen kosteuden mittaamiseen. ADAFRUIT -sivusto tarjoaa paljon tietoa näistä antureista. Alla, joitakin tietoja on haettu sieltä:

Yleiskatsaus

Edulliset DHT-lämpötila- ja kosteusanturit ovat hyvin yksinkertaisia ja hitaita, mutta ne ovat loistavia harrastajille, jotka haluavat tehdä perustietoja. DHT -anturit koostuvat kahdesta osasta, kapasitiivisesta kosteusanturista ja termistorista. Sisällä on myös hyvin yksinkertainen siru, joka tekee jonkin verran analogista digitaalista muunnosta ja sylkee digitaalisen signaalin lämpötilan ja kosteuden kanssa. Digitaalinen signaali on melko helppo lukea millä tahansa mikro -ohjaimella.

DHT22 Tärkeimmät ominaisuudet:

  • Halpa
  • 3-5 V: n virta ja I/O
  • Enintään 2,5 mA nykyinen käyttö muuntamisen aikana (tietoja pyydettäessä)
  • Sopii 0-100% kosteuslukemiin 2-5% tarkkuudella
  • Sopii -40 -125 ° C: n lämpötilalukemille ± 0,5 ° C: n tarkkuudella
  • Näytteenottotaajuus enintään 0,5 Hz (2 sekunnin välein)
  • Rungon koko 15,1 mm x 25 mm x 7,7 mm
  • 4 nastaa 0,1 "välein

Kun tavallisesti käytät anturia alle 20 metrin etäisyyksillä, 4K7 ohmin vastus on kytkettävä Data- ja VCC -nastojen väliin. DHT22 -lähtötietotappi liitetään Raspberry GPIO 16 -laitteeseen. Tarkista yllä oleva sähkökaavio liittämällä anturi RPi -nastoihin seuraavasti:

  1. Nasta 1 - Vcc ==> 3.3V
  2. Nasta 2 - Data ==> GPIO 16
  3. Nasta 3 - Ei yhteyttä
  4. Nasta 4 - Gnd ==> Gnd

Älä unohda asentaa 4K7 ohmin vastusta Vcc- ja Data -nastojen väliin

Kun anturi on kytketty, meidän on myös asennettava sen kirjasto RPi -laitteeseemme.

DHT -kirjaston asentaminen:

Siirry Raspberry -laitteessasi /home -sivulta alkaen kohtaan /Documents

cd -asiakirjat

Luo hakemisto kirjaston asentamista varten ja siirry sinne:

mkdir DHT22_Sensor

cd DHT22_anturi

Siirry selaimellasi Adafruit GitHubiin:

github.com/adafruit/Adafruit_Python_DHT

Lataa kirjasto napsauttamalla lataus zip -linkkiä oikealla ja pura arkisto Raspberry Pi -kansiosta. Siirry sitten kirjaston hakemistoon (alikansio, joka luodaan automaattisesti, kun puret tiedoston) ja suorita komento:

sudo python3 setup.py install

Avaa testiohjelma (DHT22_test.py) GITHUB -laitteestani

Tuo Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 kosteus, lämpötila = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), jos kosteus ei ole Ei mitään ja lämpötila ei ole mitään: tulosta ('Temp = {0: 0,1f}*C Kosteus = {1: 0,1 f}%'. muoto (lämpötila, kosteus)) else: print (' Lukeminen epäonnistui. Yritä uudelleen! ')

Suorita ohjelma komennolla:

python3 DHT22_test.py

Alla oleva terminaalin tulostusnäyttö näyttää tuloksen.

Kuva
Kuva

Vaihe 3: Asenna DS18B20 - lämpötila -anturi

DS18B20 - lämpötila -anturin asennus
DS18B20 - lämpötila -anturin asennus
DS18B20 - lämpötila -anturin asennus
DS18B20 - lämpötila -anturin asennus

Anturin yleiskatsaus:

Käytämme tässä opetusohjelmassa vedenpitävää versiota DS18B20 -anturista. Se on erittäin hyödyllinen kauko -lämpötiloissa märissä olosuhteissa, esimerkiksi kosteassa maaperässä. Anturi on eristetty ja voi mitata 125 oC asti (Adafrut ei suosittele sen käyttöä yli 100 oC: n kaapeli -PVC -vaipan vuoksi).

DS18B20 on digitaalinen anturi, joka tekee siitä hyväksi käyttää pitkiäkin matkoja! Nämä 1-johtiminen digitaalinen lämpötila-anturi on melko tarkka (± 0,5 ° C suurella alueella) ja voi antaa jopa 12 bitin tarkkuuden sisäisestä digitaali-analogimuuntimesta. Ne toimivat loistavasti NodeMCU: n kanssa yhdellä digitaalisella nastalla, ja voit jopa liittää useita saman nastaan, jokaisella on ainutlaatuinen 64-bittinen tunnus, joka on poltettu tehtaalla niiden erottamiseksi.

Anturi toimii 3,0 - 5,0 V, mikä tarkoittaa, että sitä voidaan käyttää suoraan 3,3 V: n jännitteellä, joka on saatavana yhdestä Vadelma -nastasta (1 tai 17).

Anturissa on 3 johtoa:

  • Musta: GND
  • Punainen: VCC
  • Keltainen: 1-johtiminen data

Täältä löydät kaikki tiedot: DS18B20 tuotetiedot

Anturin asennus:

Noudata yllä olevaa kaaviota ja tee liitännät:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Data ==> GPIO 4 (oletus kirjasto)

Python -kirjaston asentaminen:

Asennetaan seuraavaksi Python -kirjasto, joka käsittelee anturia:

sudo pip3 asenna w1thermsensor

Ennen kuin suoritat komentosarjan testataksesi anturia, tarkista, onko 1-johtiminen liitäntä käytössä RPi-laitteessasi (katso yllä oleva tulostusnäyttö)

Muista käynnistää RPi uudelleen sen muuttuessa

Anturin testaus:

Anturin testaamiseen voidaan käyttää yksinkertaista python -komentosarjaa:

tuonnin aika

w1thermsensor -tuonnista W1ThermSensor ds18b20Sensor = W1ThermSensor () kun taas True: lämpötila = ds18b20Sensor.get_temperature () print ("Lämpötila on % s celsius" % lämpötila) time.sleep (1)

Vaihe 4: BMP180: n asennus

BMP180: n asennus
BMP180: n asennus
BMP180: n asennus
BMP180: n asennus
BMP180: n asennus
BMP180: n asennus

Anturin yleiskatsaus:

BMP180 on BMP085: n seuraaja, uuden sukupolven erittäin tarkat digitaaliset paineanturit kuluttajasovelluksiin. BMP180: n erittäin pienitehoinen pienjänniteelektroniikka on optimoitu käytettäväksi matkapuhelimissa, kämmentietokoneissa, GPS-navigointilaitteissa ja ulkoilulaitteissa. BMP180 tarjoaa erinomaisen suorituskyvyn matalalla korkeudella, vain 0,25 m kohinaa nopealla muuntamisajalla. I2C -käyttöliittymä mahdollistaa helpon järjestelmän integroinnin mikro -ohjaimen kanssa. BMP180 perustuu pietsoresistiiviseen tekniikkaan, joka takaa EMC-kestävyyden, suuren tarkkuuden ja lineaarisuuden sekä pitkän aikavälin vakauden.

Koko BMP -tietolomake löytyy täältä: BMP180 - Digitaalinen paineanturi

Anturin asennus: Noudata yllä olevaa kaaviota ja tee liitännät:

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

Otetaan käyttöön I2C -käyttöliittymä

Siirry kohtaan RPi Configuration ja vahvista, että I2C -liitäntä on käytössä. Jos ei, ota se käyttöön ja käynnistä RPi uudelleen.

BMP180: n käyttö

Jos kaikki on asennettu oikein ja kaikki on kytketty oikein, olet nyt valmis käynnistämään Pi -laitteen ja näkemään, mitä BMP180 kertoo sinulle ympäröivästä maailmasta.

Ensimmäinen asia on tarkistaa, näkeekö Pi BMP180: si. Kokeile seuraavaa pääteikkunassa:

sudo i2cdetect -y 1

Jos komento toimi, sinun pitäisi nähdä jotain vastaavaa edellä olevasta päätelaitteen tulostusnäytöstä, joka osoittaa, että BMP180 on kanavalla 77.

BMP180 -kirjaston asentaminen:

Luo hakemisto kirjaston asentamiseksi:

mkdir BMP180_Sensorcd BMP180_Sensor

Siirry selaimellasi Adafruit GITHubiin:

github.com/adafruit/Adafruit_Python_BMP

Lataa kirjasto napsauttamalla lataus zip -linkkiä oikealla ja pura arkisto Raspberry Pi -luodusta kansiosta. Siirry sitten luotuun alikansioon ja suorita seuraava komento kirjaston hakemistossa:

sudo python3 setup.py install

Avaa Python IDE ja luo testiohjelma ja nimeä se, esimerkiksi BMP180Test.py

Tuo Adafruit_BMP. BMP085 muodossa BMP085sensor = BMP085. format (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) print (' Sealevel Pressure = {0: 0.2f} Pa'.format (anturi.read_sealevel_pressure ()))

Suorita testiohjelma:

python3 BMP180Test.py

Yllä oleva terminaalin tulostusnäyttö näyttää tuloksen.

Huomaa, että paine esitetään Pa (Pascals). Katso seuraava vaihe ymmärtääksesi paremmin tätä laitetta.

Vaihe 5: Sään ja korkeuden mittaaminen BMP180: n avulla

Sään ja korkeuden mittaaminen BMP180: n avulla
Sään ja korkeuden mittaaminen BMP180: n avulla

Otetaan hetki aikaa ymmärtää hieman enemmän siitä, mitä saamme BMP -lukemien avulla. Voit ohittaa tämän osan opetusohjelmasta tai palata myöhemmin.

Jos haluat tietää enemmän anturin lukemista, siirry tähän hienoon opetusohjelmaan:

BMP180 on suunniteltu mittaamaan tarkasti ilmakehän paine. Ilmanpaine vaihtelee sekä sään että korkeuden mukaan.

Mikä on ilmakehän paine?

Ilmanpaineen määritelmä on voima, jonka ympärilläsi oleva ilma vaikuttaa kaikkeen. Kaasujen paino ilmakehässä luo ilmanpaineen. Yleinen paineyksikkö on "kiloa neliötuumaa" tai psi. Käytämme tässä kansainvälistä merkintää, joka on newtoneja neliömetriä kohti, joita kutsutaan pascaleiksi (Pa).

Jos ottaisit 1 cm leveän ilmakolonnin, se painaisi noin 1 kg

Tämä paino, joka painaa kyseisen sarakkeen jalanjälkeä, luo ilmakehän paineen, jonka voimme mitata BMP180: n kaltaisilla antureilla. Koska tuumaa cm leveä ilmakehä painaa noin 1 kg, tästä seuraa, että keskimääräinen merenpinnan paine on noin 101325 pascaalia tai parempi, 1013,25 hPa (1 hPa tunnetaan myös nimellä milibar - mbar). Tämä laskee noin 4% jokaista 300 metriä kohti. Mitä korkeammalle nouset, sitä vähemmän paineita näet, koska ilmakehän yläreunan sarake on paljon lyhyempi ja painaa siksi vähemmän. Tämä on hyödyllistä tietää, koska mittaamalla paineen ja laskemalla voit määrittää korkeutesi.

Ilmanpaine 3 810 metrissä on vain puolet merenpinnan paineesta.

BMP180 antaa absoluuttisen paineen paskalina (Pa). Yksi pascal on hyvin pieni paine, suunnilleen se määrä, jonka paperiarkki levittää pöydälle. Näet useammin hektopascalia (1 hPa = 100 Pa). Tässä käytetty kirjasto antaa ulos liukulukuarvoja hPa: ssa, joka myös sattuu olemaan yhtä millibaaria (mbar).

Tässä muutamia muunnoksia muihin paineyksiköihin:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0.75006168 Torr
  • 1 hPa = 0,01450377 psi (kiloa neliötuumaa kohti)
  • 1 hPa = 0,02953337 inHg (tuumaa elohopeaa)
  • 1 hpa = 0,00098692 atm (vakioilmakehä)

Lämpötilan vaikutukset

Koska lämpötila vaikuttaa kaasun tiheyteen ja tiheys vaikuttaa kaasun massaan ja massa vaikuttaa paineeseen (Whew), ilmanpaine muuttuu dramaattisesti lämpötilan myötä. Lentäjät tuntevat tämän "tiheyskorkeutena", mikä helpottaa nousua kylmänä päivänä kuin kuumana, koska ilma on tiheämpää ja sillä on suurempi aerodynaaminen vaikutus. Lämpötilan kompensoimiseksi BMP180 sisältää melko hyvän lämpötila -anturin sekä paineanturin.

Voit suorittaa paineen lukemisen ensin mittaamalla lämpötilan ja yhdistämällä sen sitten raakapaineen lukemaan, jotta saat lopullisen lämpötilakompensoidun paineenmittauksen. (Kirjasto tekee tästä kaikesta erittäin helppoa.)

Absoluuttisen paineen mittaaminen

Jos sovelluksesi vaatii absoluuttisen paineen mittaamista, sinun tarvitsee vain saada lämpötilalukema ja suorittaa sitten paineen lukeminen (katso lisätietoja esimerkkiluonnoksesta). Lopullinen paineen lukema on hPa = mbar. Halutessasi voit muuntaa tämän eri yksiköksi käyttämällä yllä olevia muuntokertoimia.

Huomaa, että ilmakehän absoluuttinen paine vaihtelee sekä korkeutesi että nykyisten sääolojen mukaan, jotka molemmat ovat hyödyllisiä mitattavia asioita.

Säähavainnot

Ilmanpaine missään maan päällä (tai missä tahansa ilmakehässä) ei ole vakio. Monimutkainen vuorovaikutus maan spinin, akselin kallistuksen ja monien muiden tekijöiden välillä johtaa liikkuviin alueisiin, joissa on korkeampi ja matalampi paine, mikä puolestaan aiheuttaa vaihteluja säässä, jota näemme päivittäin. Paineen muutoksia seuraamalla voit ennustaa lyhyen aikavälin säämuutoksia. Esimerkiksi paineen laskeminen tarkoittaa yleensä märkää säätä tai myrskyä (lähestyy matalapainejärjestelmää). Paineen nousu tarkoittaa yleensä selkeän sään lähestymistä (korkeapainejärjestelmä liikkuu läpi). Muista kuitenkin, että ilmanpaine vaihtelee myös korkeuden mukaan. Absoluuttinen paine talossani, Lo Barnecheassa Chilessä (korkeus 950 m) on aina alhaisempi kuin esimerkiksi San Franciscon absoluuttinen paine (alle 2 metriä, melkein merenpinta). Jos sääasemat ilmoittivat juuri absoluuttisen paineensa, paineen mittauksia paikasta toiseen olisi vaikea verrata suoraan (ja laajamittaiset sääennusteet riippuvat mahdollisimman monen aseman mittauksista).

Tämän ongelman ratkaisemiseksi sääasemat poistavat aina korkeuden vaikutukset ilmoitetuista painelukemistaan lisäämällä matemaattisesti vastaavan kiinteän paineen, jotta se näyttäisi siltä, että lukema otettaisiin merenpinnasta. Kun teet tämän, San Franciscossa korkeampi lukema kuin Lo Barnecheassa on aina sääolojen eikä korkeuden vuoksi.

Tätä varten kirjastossa on toiminto nimeltä merenpinta (P, A). Tämä mittaa absoluuttisen paineen (P) hPa: ssa ja aseman nykyisen korkeuden (A) metreinä ja poistaa korkeuden vaikutukset paineesta. Tämän toiminnon tuloksen avulla voit verrata säälukemiasi suoraan muihin asemiin ympäri maailmaa.

Korkeuden määrittäminen

Koska paine vaihtelee korkeuden mukaan, voit mitata korkeuden paineanturilla (muutamia varoituksia lukuun ottamatta). Ilmakehän keskimääräinen paine merenpinnalla on 1013,25 hPa (tai mbar). Tämä putoaa nollaan, kun nouset kohti avaruuden tyhjiötä. Koska tämän pudotuksen käyrä on hyvin ymmärretty, voit laskea korkeuseron kahden painemittauksen (p ja p0) välillä käyttämällä tiettyä yhtälöä.

Jos käytät peruspaineena (p0) merenpinnan painetta (1013,25 hPa), yhtälön tulos on nykyinen korkeutesi merenpinnan yläpuolella. Kirjastossa on toiminto nimeltä korkeus (P, P0), jonka avulla saat "lasketun korkeuden".

Yllä oleva selitys otettiin BMP 180 Sparkfun -opetusohjelmasta.

Vaihe 6: Täydellinen HW

Täydellinen HW
Täydellinen HW

Vaihe 7: Tietojen lähettäminen ThingSpeakiin

Tietojen lähettäminen ThingSpeakiin
Tietojen lähettäminen ThingSpeakiin

Tässä vaiheessa opimme valmistamaan RPi: n tallentamaan tiedot kaikista kolmesta anturista ja tulostamaan ne päätelaitteelle. Nyt on aika nähdä, kuinka lähettää nämä tiedot IoT -alustalle, ThingSpeakille.

Aloitetaanpa!

Ensinnäkin sinulla on oltava tili ThinkSpeak.com -sivustolla

Luo kanava noudattamalla ohjeita ja merkitse muistiin kanavatunnuksesi ja Write API -avaimesi

Lataa Python -skripti GitHubista: localData ToTS_v1_EXT.py

Kommentoidaan koodin tärkeimmät osat:

Tuodaan ensin ThingSpeak -kirjasto, määritetään WiFi -asiakas ja määritetään paikalliset reitittimen ja Thinkspeakin kirjautumistiedot:

tuoda asioita puhumaan

On olemassa useita tapoja kommunikoida ThingSpeakin kanssa, yksinkertaisin tapa olisi käyttää Mikolaj Chwalizin ja Keith Ellisin kehittämää thingspeak.com -sovellusliittymän asiakaskirjastoa.

Kirjasto voidaan ladata osoitteesta https://github.com/mchwalisz/thingspeak tai käyttää PIP: tä päätteessä:

sudo pip3 asenna thingspeak

Päivitä sitten komentosarjan sisällä ThingSpeak -kanavan tunnistetiedot

chId = 9999999 # Anna kanavatunnuksesi

tsKey = 'ENTER WAN CHANNEL WRITE KEY' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Alustetaan nyt kolme anturia:

# DS18B20 1-johtiminen kirjasto

w1thermsensor tuonti W1ThermSensor ds18b20Sensor = W1ThermSensor () # Kirjasto käyttää oletuksena GPIO 4: tä Määritä sääaseman todellinen korkeus päivittämällä globaali muuttuja "altReal". Minun tapauksessani asemani sijaitsee 950 m merenpinnan yläpuolella

maailmanlaajuinen altReal

altReal = 950

Kun olet syöttänyt aseman todellisen korkeuden tulona, voimme saada absoluuttisen paineen, merenpinnan paineen, lämpötilan ja korkeuden käyttämällä toimintoa bmp180GetData (korkeus):

def bmp180GetData (korkeus):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - korkeus/44330.0, 5.255) temp = pyöreä (temp, 1) pres = round (pres/100, 2) # absoluuttinen paine hPa (tai mbar) alt=pyöreä (alt) presSeaLevel = pyöreä (presSeaLevel/100, 2) # absoluuttinen paine hPa (tai mbar) paluulämpötila, pres, alt, presSeaLevel

Funktio getLocalData () palauttaa kaikki asemamme tallentamat paikalliset tiedot:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Hanki lukemisaika nyt = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Luku Ulkolämpötila (1 metrin etäisyys) ja tempDHT ei ole Ei mitään: humLab = pyöreä (humDHT

Kun olet tallentanut kaikki yllä olevien toimintojen tallentamat tiedot, sinun on lähetettävä ne ThingSpeakiin. Voit tehdä sen käyttämällä sendDataTs () -toimintoa:

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] 5 kentän tiedot lähetetty: ", tempLab, tempExt, humLab, presSL, altLab)

Kun kanavatiedot on päivitetty, tallenna komentosarja ja suorita se päätteessäsi:

sudo Python3 localData_ToTs_v1_EXT.py

Tietoja viestintäprotokollista

Huomaa, että "thingspeak -kirjastoa" käytettäessä "pyyntökirjasto" tuodaan eli Apache2 -lisensoitu HTTP -kirjasto, joka on kirjoitettu Pythonilla. Virallinen Request Installation -asiakirja löytyy täältä:

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

Tarvittaessa voit tarkistaa ennen komentosarjan suorittamista, onko pyyntökirjasto asennettu:

sudo pip3 -asennuspyynnöt

Vaihtoehtoisesti voit käyttää MTTQ -menetelmää tietojen lähettämiseen ThingSpeakiin. MQTT on erilainen kuin HTTP, kun se on suunniteltu kevyeksi ja tarkoitettu sulautetuille laitteille, joilla on alhainen RAM- ja suorittimen suorituskyky. Lisäksi useimmissa tapauksissa MQTT käyttää vähemmän kaistanleveyttä.

Katso tämä opetusohjelma: Päivitä ThingSpeak -kanava käyttämällä Raspberry Pi: n MQTT: tä saadaksesi lisätietoja.

Vaihe 8: Etädatan lähettäminen ThingSpeakiin ESP8266: n avulla

Etädatan lähettäminen ThingSpeakiin ESP8266: n avulla
Etädatan lähettäminen ThingSpeakiin ESP8266: n avulla
Etädatan lähettäminen ThingSpeakiin ESP8266: n avulla
Etädatan lähettäminen ThingSpeakiin ESP8266: n avulla

Tässä vaiheessa käytämme samaa HW: tä, joka selitettiin muy -opetusohjelmassa:

IOT MADE HELPPO: KAUKOSÄÄN TIETOJEN VALVONTA: UV- JA ILMALÄMPÖTILA & KOSTEUS

Tässä käyttämämme koodi on pohjimmiltaan sama kuin siinä opetusohjelmassa. Kommentoidaan koodin tärkeimmät osat:

Soitetaan ensin ESP8266 -kirjastoon, määritetään WiFi -asiakas ja määritetään paikalliset reitittimen ja Thinkspeakin kirjautumistiedot:

/ * SolmuMCU ESP12-E */

#Sisällytä WiFiClient -asiakas; const char* MY_SSID = "ANNA SSDID -TIEDOSI"; const char* MY_PWD = "ANNA SALASANASI"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "KIRJOITA KIRJOITETTU 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 += "& field6 ="; postStr += Merkkijono (lämpötila); postStr += "& field7 ="; postStr += Jono (hum); postStr += "& field8 ="; postStr += Jono (dataSensorUV); 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 9: Viimeiset huomautukset

Lopulliset muistiinpanot
Lopulliset muistiinpanot

Tämän opetusohjelman päätarkoitus oli näyttää, miten Raspberry Pi liitetään ThingSpeakiin. Tämä on hienoa kaapata tietoja ja kirjata ne IoT -alustalle.

Käytimme tilaisuutta hyväksemme myös lähettämällä tietoja kyseiselle kanavalle ja kaappaamalla ne etäasemalta ESP8266: n avulla. Tämä lähestymistapa on OK, mutta ei paras. Koska meillä on "asynkroninen" toiminto, joskus sekä RPi että ESP8266 yrittävät kirjata samaan aikaan (tai pienellä aikavälillä) sen, mitä ThingSpeak kumoaa. Ihannetapauksessa ESP8266 lähettää tiedot paikallisesti Raspberry Pi: lle ja viimeinen vastaa kaikkien tietojen käsittelystä. Tällöin pääasema (Raspberry Pi) voisi tehdä kolme asiaa:

  • Kirjaa kaikki tiedot paikalliseen tietokantaan
  • Esitä kaikki tiedot paikallisella verkkosivulla (käyttämällä pulloa yllä olevan kuvan mukaisesti)
  • Kaikki tiedot lähetetään ThingSpeakiin samaan aikaan.

Tulevassa opetusohjelmassa tutkimme näitä vaihtoehtoja.

Vaihe 10: Johtopäätös

Johtopäätös
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:

Kuva
Kuva

Terveisiä etelästä maailmasta!

Nähdään seuraavassa ohjeessani!

Kiitos, Marcelo

Suositeltava: