Turinys:

„IoT Weather Station“su RPi ir ESP8266: 10 žingsnių
„IoT Weather Station“su RPi ir ESP8266: 10 žingsnių

Video: „IoT Weather Station“su RPi ir ESP8266: 10 žingsnių

Video: „IoT Weather Station“su RPi ir ESP8266: 10 žingsnių
Video: ESP32 Based IoT Weather Station | How To Make | Complete Guide 2024, Lapkritis
Anonim
„IoT Weather Station“su RPi ir ESP8266
„IoT Weather Station“su RPi ir ESP8266

Ankstesnėse pamokose mes žaidėme su „NodeMCU“, jutikliais ir sužinojome, kaip fiksuoti ir registruoti duomenis „ThingSpeak“(daiktų interneto (daiktų interneto) platforma, leidžianti rinkti ir saugoti jutiklių duomenis debesyje ir kurti IoT programas):

IOT MADE LENGVAS: NUOTOLINIO ORO DUOMENŲ FIKAVIMAS: UV IR ORO TEMPERATŪRA IR DRĖGMĖ

Naudodamiesi šia nauja pamoka, mes išmoksime daryti tą patį, tačiau šį kartą, naudodami „Raspberry Pi“, norėdami užfiksuoti duomenis iš kelių skirtingų jutiklių, taip pat išnagrinėsime įvairius ryšio būdus tarp įrenginių ir žiniatinklio:

Jutikliai ir sudėties tipas:

  • DHT22 (temperatūra ir drėgmė) ==> Skaitmeninis ryšys
  • BMP180 (temperatūra ir slėgis) ==> I2C protokolas
  • DS18B20 (temperatūra) ==> 1 laidų protokolas

Blokinė schema parodo, ką gausime šio projekto pabaigoje:

Vaizdas
Vaizdas

1 žingsnis: BoM - medžiagų sąrašas

  1. „Raspberry Pi V3“- 32,00 USD
  2. DHT22 temperatūros ir santykinio drėgmės jutiklis - 9,95 USD
  3. Rezistorius 4K7 omai
  4. Atsparus vandeniui temperatūros jutiklis DS18B20 - 5,95 USD
  5. Rezistorius 4K7 omai
  6. BMP180 barometrinio slėgio, temperatūros ir aukščio jutiklis - 6,99 USD

2 žingsnis: sumontuokite temperatūros ir drėgmės jutiklį

Temperatūros ir drėgmės jutiklio montavimas
Temperatūros ir drėgmės jutiklio montavimas

Pirmasis jutiklis, kuris bus sumontuotas, bus DHT22, skirtas oro temperatūros ir santykinės drėgmės duomenims fiksuoti. ADAFRUIT svetainėje pateikiama daug informacijos apie tuos jutiklius. Žemiau, šiek tiek informacijos, gautos iš ten:

Apžvalga

Pigūs DHT temperatūros ir drėgmės jutikliai yra labai paprasti ir lėti, tačiau puikiai tinka mėgėjams, norintiems registruoti pagrindinius duomenis. DHT jutikliai yra sudaryti iš dviejų dalių: talpinio drėgmės jutiklio ir termistoriaus. Viduje taip pat yra labai paprastas lustas, kuris atlieka tam tikrą analoginį skaitmeninį konvertavimą ir išspinduliuoja skaitmeninį signalą su temperatūra ir drėgme. Skaitmeninį signalą gana lengva perskaityti naudojant bet kurį mikrovaldiklį.

DHT22 Pagrindinės savybės:

  • Žema kaina
  • Nuo 3 iki 5 V maitinimo ir įvesties/išvesties
  • 2,5 mA maksimalus dabartinis naudojimas konversijos metu (prašant duomenų)
  • Tinka 0–100% drėgmės rodmenims 2–5% tikslumu
  • Tinka nuo -40 iki 125 ° C temperatūros rodmenims ± 0,5 ° C tikslumui
  • Ne daugiau kaip 0,5 Hz mėginių ėmimo dažnis (kartą per 2 sekundes)
  • Kūno dydis 15,1 mm x 25 mm x 7,7 mm
  • 4 kaiščiai su 0,1 colio atstumu

Paprastai jutiklį naudosite mažesniais nei 20 m atstumais, tarp duomenų ir VCC kaiščių reikia prijungti 4K7 omų rezistorių. DHT22 išvesties duomenų kaištis bus prijungtas prie Raspberry GPIO 16. Patikrinkite aukščiau pateiktą elektros schemą, prijungdami jutiklį prie RPi kaiščių, kaip nurodyta toliau:

  1. 1 kaištis - Vcc ==> 3.3V
  2. 2 kaištis - duomenys ==> GPIO 16
  3. 3 kaištis - neprisijungti
  4. 4 kaištis - Gnd ==> Gnd

Nepamirškite tarp Vcc ir duomenų kaiščių sumontuoti 4K7 omų rezistorių

Kai jutiklis prijungtas, mes taip pat turime įdiegti jo biblioteką mūsų RPi.

DHT bibliotekos diegimas:

„Raspberry“, pradedant nuo /home, eikite į /Documents

cd dokumentai

Sukurkite katalogą, kad įdiegtumėte biblioteką, ir pereikite prie ten:

mkdir DHT22_Sensor

cd DHT22_Jutiklis

Naršyklėje eikite į „Adafruit GitHub“:

github.com/adafruit/Adafruit_Python_DHT

Atsisiųskite biblioteką spustelėdami dešinėje esančią atsisiuntimo zip nuorodą ir išpakuokite archyvą neseniai sukurtame „Raspberry Pi“aplanke. Tada eikite į bibliotekos katalogą (poaplankį, kuris automatiškai sukuriamas išpakavus failą) ir vykdykite komandą:

sudo python3 setup.py įdiegti

Atidarykite bandomąją programą (DHT22_test.py) iš mano GITHUB

importuoti „Adafruit_DHT“

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 drėgmė, temperatūra = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), jei drėgmė nėra Nėra ir temperatūra nėra: print ('Temp = {0: 0.1f}*C Drėgmė = {1: 0.1 f}%'. formatas (temperatūra, drėgmė)) else: print (' Nepavyko perskaityti. Bandykite dar kartą! ')

Vykdykite programą naudodami komandą:

python3 DHT22_test.py

Žemiau esančiame terminalo spausdinimo ekrane rodomas rezultatas.

Vaizdas
Vaizdas

3 žingsnis: DS18B20 - temperatūros jutiklio montavimas

DS18B20 - temperatūros jutiklio montavimas
DS18B20 - temperatūros jutiklio montavimas
DS18B20 - temperatūros jutiklio montavimas
DS18B20 - temperatūros jutiklio montavimas

Jutiklio apžvalga:

Šioje pamokoje naudosime neperšlampamą DS18B20 jutiklio versiją. Tai labai naudinga esant nuotolinei temperatūrai drėgnomis sąlygomis, pavyzdžiui, drėgnoje dirvoje. Jutiklis yra izoliuotas ir gali atlikti matavimus iki 125oC („Adafrut“nerekomenduoja jo naudoti aukštesnėje nei 100oC temperatūroje dėl kabelio PVC apvalkalo).

„DS18B20“yra skaitmeninis jutiklis, todėl jį patogu naudoti net ir dideliais atstumais! Šie 1 laidų skaitmeniniai temperatūros jutikliai yra gana tikslūs (± 0,5 ° C didelėje diapazono dalyje) ir gali suteikti iki 12 bitų tikslumo iš įmontuoto skaitmeninio-analoginio keitiklio. Jie puikiai veikia su „NodeMCU“, naudojant vieną skaitmeninį kaištį, ir jūs netgi galite prijungti kelis prie to paties kaiščio, kiekvienas turi unikalų 64 bitų ID, įrašytą gamykloje, kad juos atskirtų.

Jutiklis veikia nuo 3,0 iki 5,0 V.

Jutiklis turi 3 laidus:

  • Juoda: GND
  • Raudona: VCC
  • Geltona: 1 laido duomenys

Čia galite rasti visus duomenis: DS18B20 duomenų lapas

Jutiklio montavimas:

Sekite aukščiau pateiktą schemą ir prijunkite:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Duomenys ==> GPIO 4 (numatytasis bibliotekoje)

„Python“bibliotekos diegimas:

Tada įdiekime „Python“biblioteką, kuri tvarkys jutiklį:

sudo pip3 įdiegti w1thermsensor

Prieš paleisdami scenarijų, kad patikrintumėte jutiklį, patikrinkite, ar jūsų RPi įgalinta „1 laido“sąsaja (žr. Aukščiau esantį spausdinimo ekraną)

Nepamirškite iš naujo paleisti RPi, pakeitus jo konfigūraciją

Jutiklio bandymas:

Norėdami išbandyti jutiklį, galite naudoti paprastą „python“scenarijų:

importo laikas

iš „w1thermsensor“importuoti W1ThermSensor ds18b20Sensor = W1ThermSensor (), o tiesa: temperatūra = ds18b20Sensor.get_temperature () print („Temperatūra yra % s celsijaus“% temperatūra) time.sleep (1)

4 žingsnis: BMP180 diegimas

Įdiekite BMP180
Įdiekite BMP180
Įdiekite BMP180
Įdiekite BMP180
Įdiekite BMP180
Įdiekite BMP180

Jutiklio apžvalga:

BMP180 yra naujos kartos didelio tikslumo skaitmeninių slėgio jutiklių, skirtų vartotojams, įpėdinis BMP085. Itin mažos galios, žemos įtampos BMP180 elektronika yra optimizuota naudoti mobiliuosiuose telefonuose, PDA, GPS navigacijos prietaisuose ir lauko įrangoje. BMP180 pasižymi puikiu našumu mažo aukščio, vos 0,25 m triukšmo metu. I2C sąsaja leidžia lengvai integruoti sistemą su mikrovaldikliu. BMP180 yra pagrįstas pjezo atsparia technologija, užtikrinančia EMC tvirtumą, aukštą tikslumą ir tiesiškumą bei ilgalaikį stabilumą.

Visą BMP duomenų lapą galite rasti čia: BMP180 - skaitmeninis slėgio jutiklis

Jutiklio montavimas: Sekite aukščiau pateiktą schemą ir prijunkite:

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

Įgalinama „I2C“sąsaja

Eikite į RPi konfigūraciją ir patvirtinkite, kad įjungta I2C sąsaja. Jei ne, įjunkite ir iš naujo paleiskite RPi.

Naudojant BMP180

Jei viskas buvo įdiegta gerai ir viskas buvo prijungta gerai, dabar esate pasiruošę įjungti „Pi“ir pradėti matyti, ką BMP180 pasakoja apie jus supantį pasaulį.

Pirmas dalykas, kurį reikia padaryti, yra patikrinti, ar Pi mato jūsų BMP180. Terminalo lange išbandykite šiuos veiksmus:

sudo i2cdetect -y 1

Jei komanda veikė, turėtumėte pamatyti kažką panašaus į aukščiau esantį terminalo spausdinimo ekraną, rodantį, kad BMP180 yra kanale „77“.

Įdiekite BMP180 biblioteką:

Sukurkite katalogą, kad įdiegtumėte biblioteką:

mkdir BMP180_Sensorcd BMP180_Sensor

Naršyklėje eikite į „Adafruit GITHub“:

github.com/adafruit/Adafruit_Python_BMP

Atsisiųskite biblioteką spustelėdami dešinėje esančią atsisiuntimo zip nuorodą ir išpakuokite archyvą Raspberry Pi sukurtame aplanke. Tada eikite į sukurtą poaplankį ir bibliotekos kataloge vykdykite šią komandą:

sudo python3 setup.py įdiegti

Atidarykite „Python IDE“ir sukurkite bandomąją programą bei pavadinkite ją, pavyzdžiui, BMP180Test.py

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

Vykdykite testavimo programą:

python3 BMP180Test.py

Aukščiau pateiktame terminalo spausdinimo ekrane rodomas rezultatas.

Atkreipkite dėmesį, kad tas slėgis pateikiamas Pa (Paskaliais). Žiūrėkite kitą žingsnį, kad geriau suprastumėte šį įrenginį.

5 žingsnis: Oro ir aukščio matavimas naudojant BMP180

Oro ir aukščio matavimas naudojant BMP180
Oro ir aukščio matavimas naudojant BMP180

Skirkime laiko šiek tiek daugiau suprasti, ką gausime su BMP rodmenimis. Galite praleisti šią pamokos dalį arba grįžti vėliau.

Jei norite sužinoti daugiau apie jutiklių rodmenis, eikite į šią puikią pamoką:

BMP180 buvo sukurtas tiksliai išmatuoti atmosferos slėgį. Atmosferos slėgis kinta priklausomai nuo oro ir aukščio.

Kas yra atmosferos slėgis?

Atmosferos slėgio apibrėžimas yra jėga, kurią aplinkinis oras daro viskam. Dujų svoris atmosferoje sukuria atmosferos slėgį. Įprastas slėgio vienetas yra „svarai kvadratiniame colyje“arba psi. Čia naudosime tarptautinę žymę, tai yra niutonus kvadratiniam metrui, kurie vadinami paskaliais (Pa).

Jei paimtumėte 1 cm pločio oro stulpelį, jis svertų apie 1 kg

Šis svoris, spaudžiant to stulpelio pėdsaką, sukuria atmosferos slėgį, kurį galime išmatuoti tokiais jutikliais kaip BMP180. Kadangi to cm pločio oro stulpelis sveria apie 1 kg, iš to išplaukia, kad vidutinis jūros lygio slėgis yra apie 101325 paskalius arba geriau 1013,25 hPa (1 hPa taip pat žinomas kaip milibaras - mbar). Tai sumažės apie 4% kas 300 metrų, kuriuos pakeliate. Kuo aukštesnis, tuo mažesnis spaudimas, nes kolona iki atmosferos viršaus yra daug trumpesnė, todėl sveria mažiau. Tai naudinga žinoti, nes matuojant slėgį ir skaičiuojant galima nustatyti savo aukštį.

Oro slėgis 3, 810 metrų aukštyje yra tik pusė jūros lygio.

BMP180 išleidžia absoliutų slėgį paskaliais (Pa). Vienas paskalis yra labai mažas spaudimas, maždaug tiek, kiek popieriaus lapas darys ant stalo. Dažniau matavimus matysite hektopaskaliais (1 hPa = 100 Pa). Čia naudojama biblioteka pateikia slankiojo kablelio reikšmes, išreikštas hPa, kuri taip pat yra lygi vienam milibarams (mbar).

Štai keletas konversijų į kitus slėgio vienetus:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (svarų už kvadratinį colį)
  • 1 hPa = 0,02953337 inHg (gyvsidabrio coliai)
  • 1 hpa = 0,00098692 atm (standartinė atmosfera)

Temperatūros efektai

Kadangi temperatūra turi įtakos dujų tankiui, o tankis - dujų masei, o masė - slėgiui (angl. Pilotai tai žino kaip „tankio aukštį“, todėl lengviau pakilti šaltą dieną nei karštą, nes oras yra tankesnis ir turi didesnį aerodinaminį efektą. Norėdami kompensuoti temperatūrą, BMP180 turi gana gerą temperatūros jutiklį ir slėgio jutiklį.

Norėdami nuskaityti slėgį, pirmiausia nuskaitykite temperatūrą, tada derinkite ją su neapdoroto slėgio rodmeniu, kad gautumėte galutinį temperatūros kompensuojamą slėgio matavimą. (Biblioteka tai labai palengvina.)

Absoliutaus slėgio matavimas

Jei jūsų programai reikia išmatuoti absoliutų slėgį, viskas, ką jums reikia padaryti, yra nuskaityti temperatūrą, tada nuskaityti slėgį (išsamiau žr. Pavyzdinį eskizą). Galutinis slėgio rodmuo bus hPa = mbar. Jei norite, galite konvertuoti jį į kitą vienetą naudodami aukščiau pateiktus konversijos koeficientus.

Atminkite, kad absoliutus atmosferos slėgis skirsis priklausomai nuo jūsų aukščio ir dabartinių oro sąlygų, kurios abi yra naudingos vertinant.

Orų stebėjimai

Atmosferos slėgis bet kurioje žemės vietoje (arba bet kurioje atmosferos vietoje) nėra pastovus. Sudėtinga žemės sukimosi, ašies pakreipimo ir daugelio kitų veiksnių sąveika lemia judančias aukštesnio ir žemesnio slėgio sritis, o tai savo ruožtu lemia orų pokyčius, kuriuos matome kiekvieną dieną. Stebėdami slėgio pokyčius, galite numatyti trumpalaikius orų pokyčius. Pavyzdžiui, sumažėjęs slėgis paprastai reiškia drėgną orą arba artėja audra (įeina žemo slėgio sistema). Didėjantis slėgis paprastai reiškia, kad artėja giedras oras (juda aukšto slėgio sistema). Tačiau atminkite, kad atmosferos slėgis taip pat kinta priklausomai nuo aukščio. Absoliutus slėgis mano namuose, Lo Barnechea Čilėje (aukštis 950 m) visada bus mažesnis nei absoliutus slėgis, pavyzdžiui, San Franciske (mažiau nei 2 metrai, beveik jūros lygis). Jei oro stotys ką tik praneštų apie savo absoliutų slėgį, būtų sunku tiesiogiai palyginti slėgio matavimus iš vienos vietos į kitą (o didelio masto orų prognozės priklauso nuo matavimų iš kuo daugiau stočių).

Norėdami išspręsti šią problemą, orų stotys visada pašalina aukščio poveikį iš praneštų slėgio rodmenų, matematiškai pridėdami lygiavertį fiksuotą slėgį, kad atrodytų taip, lyg rodmenys būtų paimti jūros lygyje. Kai tai padarysite, San Franciske didesnis rodiklis nei Lo Barnechea visada bus dėl oro sąlygų, o ne dėl aukščio.

Norėdami tai padaryti, bibliotekoje yra funkcija, vadinama jūros lygiu (P, A). Tai apskaičiuoja absoliutų slėgį (P), išreikštą hPa, ir dabartinį stoties aukštį (A) metrais, ir pašalina aukščio poveikį nuo slėgio. Naudodami šios funkcijos rezultatus galite tiesiogiai palyginti orų rodmenis su kitomis stotimis visame pasaulyje.

Aukščio nustatymas

Kadangi slėgis kinta priklausomai nuo aukščio, galite naudoti slėgio jutiklį aukščiui matuoti (su keliais įspėjimais). Vidutinis atmosferos slėgis jūros lygyje yra 1013,25 hPa (arba mbar). Tai nukrenta iki nulio, kai kopiate link kosmoso vakuumo. Kadangi šio kritimo kreivė yra gerai suprantama, galite apskaičiuoti aukščio skirtumą tarp dviejų slėgio matavimų (p ir p0), naudodami konkrečią lygtį.

Jei kaip bazinį slėgį (p0) naudosite jūros lygio slėgį (1013,25 hPa), lygties išvestis bus jūsų dabartinis aukštis virš jūros lygio. Bibliotekoje yra funkcija, vadinama aukščiu (P, P0), leidžianti gauti „apskaičiuotą aukštį“.

Aukščiau pateiktas paaiškinimas buvo išgautas iš „BMP 180 Sparkfun“vadovėlio.

6 žingsnis: Užbaigti HW

Pilnas HW
Pilnas HW

7 veiksmas: duomenų siuntimas į „ThingSpeak“

Duomenų siuntimas į „ThingSpeak“
Duomenų siuntimas į „ThingSpeak“

Šiuo metu mes sužinojome, kaip paruošti RPi, kad būtų galima surinkti duomenis iš visų 3 jutiklių ir juos atspausdinti terminale. Dabar atėjo laikas pamatyti, kaip išsiųsti tuos duomenis į „IoT“platformą „ThingSpeak“.

Pradėkime!

Pirma, jūs turite turėti paskyrą „ThinkSpeak.com“

Vykdykite instrukcijas, kad sukurtumėte kanalą, ir atkreipkite dėmesį į kanalo ID ir „Write API Key“

Atsisiųskite „Python“scenarijų iš „GitHub“: localData ToTS_v1_EXT.py

Pakomentuokime svarbiausias kodo dalis:

Pirmiausia importuokime „ThingSpeak“biblioteką, apibrėžkime „WiFi“klientą ir apibrėžkime vietinius maršrutizatoriaus ir „Thinkspeak“kredencialus:

importuok kalbas

Yra keletas būdų, kaip bendrauti su „ThingSpeak“, paprasčiausias būdas būtų naudoti „Mikolaj Chwaliz“ir Keith Ellis sukurtą „thingspeak.com“API klientų biblioteką.

Biblioteką galima atsisiųsti iš https://github.com/mchwalisz/thingspeak arba naudojant terminalą naudojant PIP:

sudo pip3 įdiegti thingspeak

Tada scenarijaus viduje atnaujinkite „ThingSpeak“kanalo kredencialus

chId = 9999999 # Įveskite naudodami kanalo ID

tsKey = 'ĮJUNGTI SU KANALO RAŠYMO RAKTU' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Dabar inicijuokime 3 jutiklius:

# DS18B20 1 laidų biblioteka

iš w1thermsensor importuoti W1ThermSensor ds18b20Sensor = W1ThermSensor () # Pagal numatytuosius nustatymus GPIO 4 naudoja biblioteka # DHT22 Bibliotekos importas Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 bibliotekos importas Adafruit_B0B0 (BMP) Turėtumėte apibrėžti tikrąjį aukštį, kuriame yra jūsų orų stotis, atnaujindami visuotinį kintamąjį „altReal“. Mano atveju mano stotis yra 950 m virš jūros lygio

global altReal

altReal = 950

Įvedę stoties tikrąjį aukštį, mes galime gauti absoliutų slėgį, jūros lygio slėgį, temperatūrą ir aukštį naudodami funkciją bmp180GetData (aukštis):

def bmp180GetData (aukštis):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - altitude/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100), 2) # absoliutus slėgis hPa (arba mbar) alt=apvalus (alt) presSeaLevel = apvalus (presSeaLevel/100, 2) # absoliutus slėgis hPa (arba mbar) grąžinimo temperatūra, pres, alt, presSeaLevel

Funkcija getLocalData () grąžins visus vietinius duomenis, kuriuos užfiksavo mūsų stotis:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Gaukite skaitymo laiką dabar = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Skaityti išorinės temperatūros (1 metro atstumas) tempExt = apvalus (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin ir tempDHT nėra Nėra: humLab = apvalus (humDHT

Kai turėsite visus duomenis, užfiksuotus aukščiau nurodytomis funkcijomis, turite juos nusiųsti į „ThingSpeak“. Tai padarysite naudodami funkciją sendDataTs ():

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Duomenys išsiųsti už 5 laukus: ", tempLab, tempExt, humLab, presSL, altLab)

Atnaujinę kanalo duomenis, išsaugokite scenarijų ir vykdykite jį savo terminale:

sudo Python3 localData_ToTs_v1_EXT.py

Apie bendravimo protokolus

Atminkite, kad naudojant „thingspeak“biblioteką, importuojama „užklausų biblioteka“, tai yra „Apache2“licencijuota HTTP biblioteka, parašyta „Python“. Oficialią užklausos diegimo dokumentaciją rasite čia:

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

Jei reikia, prieš paleisdami scenarijų galite patikrinti, ar užklausų biblioteka įdiegta:

sudo pip3 diegimo užklausos

Pasirinktinai galite naudoti MTTQ kaip duomenų siuntimo į „ThingSpeak“metodą. MQTT skiriasi nuo HTTP, kai jis buvo specialiai sukurtas būti lengvas ir skirtas įterptiesiems įrenginiams, kurių RAM ir procesoriaus našumas yra mažas. Be to, daugeliu atvejų MQTT naudoja mažesnį pralaidumą.

Žiūrėkite šį vadovėlį: Norėdami gauti daugiau informacijos, atnaujinkite „ThingSpeak“kanalą naudodami „Raspberry Pi“MQTT.

8 veiksmas: Nuotolinių duomenų siuntimas į „ThingSpeak“naudojant ESP8266

Nuotolinių duomenų siuntimas į „ThingSpeak“naudojant ESP8266
Nuotolinių duomenų siuntimas į „ThingSpeak“naudojant ESP8266
Nuotolinių duomenų siuntimas į „ThingSpeak“naudojant ESP8266
Nuotolinių duomenų siuntimas į „ThingSpeak“naudojant ESP8266

Šiam žingsniui naudosime tą patį HW, kuris buvo paaiškintas „muy“pamokoje:

IOT MADE LENGVAS: NUOTOLINIO ORO DUOMENŲ FIKAVIMAS: UV IR ORO TEMPERATŪRA IR DRĖGMĖ

Čia naudojamas kodas iš esmės yra tas pats, kuris naudojamas toje pamokoje. Pakomentuokime svarbiausias kodo dalis:

Pirmiausia paskambinkime ESP8266 bibliotekai, apibrėžkime „WiFi“klientą ir apibrėžkime savo vietinio maršrutizatoriaus ir „Thinkspeak“kredencialus:

/ * MazgasMCU ESP12-E */

#įtraukti „WiFiClient“klientą; const char* MY_SSID = "ĮVESTI SAVO SSDID"; const char* MY_PWD = "ĮVESKITE SAVO Slaptažodžiu"; /* „Thinkspeak“*/ const char* TS_SERVER = "api.thingspeak.com"; Styga TS_API_KEY = "ĮVESKITE SU RAŠYMO RAKTU";

Antra, įtraukime labai svarbią biblioteką, skirtą daiktų interneto projektams: SimpleTimer.h:

/ * LAIKMATAS */

#įtraukti „SimpleTimer“laikmatį;

Trečia, sąrankos metu () inicijuosime nuoseklųjį ryšį, iškviesime funkciją connectWiFi () ir nustatysime laikmačius. Atkreipkite dėmesį, kad kodo eilutė: timer.setInterval (60000L, sendDataTS); iškvies funkciją sendDataTS () kas 60 sekundžių, kad įkelti duomenis į „ThinkSpeak“kanalą.

negaliojanti sąranka ()

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

Galiausiai, bet ne mažiau svarbu, kad ciklo () metu vienintelė reikalinga komanda būtų paleisti laikmatį ir viskas!

tuštumos kilpa ()

{… Timer.run (); // Inicijuoja „SimpleTimer“}

Žemiau galite pamatyti dvi svarbias funkcijas, naudojamas „Thinkspeak“ryšiui tvarkyti:

ESP12-E ryšys su „WiFi“tinklu:

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

*„WiFi“prijungimas *********************************************** ***/ void connectWifi () {Serial.print ("Prisijungimas prie"+*MY_SSID); „WiFi.begin“(MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {delay (1000); Serijinis atspaudas ("."); } Serial.println (""); Serial.println („WiFi prijungtas“); Serial.println (""); }

ESP12-E siunčia duomenis į „ThinkSpeak“:

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

*Duomenų siuntimas į „Thinkspeak“kanalą ******************************************* ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field6 ="; postStr += Styga (temp); postStr += "& field7 ="; postStr += Styga (hum); postStr += "& field8 ="; postStr += Styga (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /atnaujinti HTTP /1.1 / n"); client.print ("Priegloba: api.thingspeak.com / n"); client.print ("Ryšys: uždaryti / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Turinio tipas: application/x-www-form-urlencoded / n"); client.print ("Turinio ilgis:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); vėlavimas (1000); } išsiųstas ++; client.stop (); }

Visą kodą galite rasti mano „GitHub“: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Kai įkeliate kodą į „NodeMCU“. Prijunkime išorinę bateriją ir atlikime matavimus po saule. Padedu nuotolinę stotį ant stogo ir pradedu fiksuoti duomenis ThingSpeak.com, kaip parodyta aukščiau esančiose nuotraukose.

9 žingsnis: paskutinės pastabos

Baigiamosios pastabos
Baigiamosios pastabos

Pagrindinis šios pamokos tikslas buvo parodyti, kaip prijungti „Raspberry Pi“prie „ThingSpeak“. Tai labai patogu fiksuoti duomenis ir registruoti juos IoT platformoje.

Naudodamiesi galimybe mes taip pat išsiuntėme duomenis į tą konkretų kanalą, užfiksavome juos iš nuotolinės stoties, naudodami ESP8266. Šis požiūris yra geras, bet ne geriausias. Kadangi mes atliekame „asinchroninę“operaciją, kartais tiek RPi, tiek ESP8266 bando vienu metu (arba nedideliu intervalu) registruoti tai, ką paneigia „ThingSpeak“. Idealu, jei ESP8266 siunčia duomenis vietoje į „Raspberry Pi“, o paskutinis yra atsakingas už visų duomenų tvarkymą. Tai darydama „pagrindinė stotis“(„Raspberry Pi“) galėtų padaryti tris dalykus:

  • Įrašykite visus duomenis į vietinę duomenų bazę
  • Pateikite visus duomenis vietiniame tinklalapyje (naudodami kolbą, kaip parodyta aukščiau esančioje nuotraukoje)
  • Visi duomenys siunčiami į „ThingSpeak“vienu metu.

Būsimoje pamokoje mes išnagrinėsime šias galimybes.

10 žingsnis: Išvada

Išvada
Išvada

Kaip visada, tikiuosi, kad šis projektas gali padėti kitiems rasti kelią į jaudinantį elektronikos pasaulį!

Norėdami gauti daugiau informacijos ir galutinį kodą, apsilankykite mano „GitHub“saugykloje: RPi-NodeMCU-Weather-Station

Norėdami gauti daugiau projektų, apsilankykite mano tinklaraštyje: MJRoBot.org

Sekite naujienas! Kita pamoka atsiųsime duomenis iš nuotolinės oro stoties į centrinę, pagrįstą „Raspberry Pi“žiniatinklio serveriu:

Vaizdas
Vaizdas

Saludos iš pasaulio pietų!

Iki pasimatymo mano kitoje pamokoje!

Ačiū, Marcelo

Rekomenduojamas: