Turinys:
- 1 žingsnis: BoM - medžiagų sąrašas
- 2 žingsnis: sumontuokite temperatūros ir drėgmės jutiklį
- 3 žingsnis: DS18B20 - temperatūros jutiklio montavimas
- 4 žingsnis: BMP180 diegimas
- 5 žingsnis: Oro ir aukščio matavimas naudojant BMP180
- 6 žingsnis: Užbaigti HW
- 7 veiksmas: duomenų siuntimas į „ThingSpeak“
- 8 veiksmas: Nuotolinių duomenų siuntimas į „ThingSpeak“naudojant ESP8266
- 9 žingsnis: paskutinės pastabos
- 10 žingsnis: Išvada
Video: „IoT Weather Station“su RPi ir ESP8266: 10 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
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:
1 žingsnis: BoM - medžiagų sąrašas
- „Raspberry Pi V3“- 32,00 USD
- DHT22 temperatūros ir santykinio drėgmės jutiklis - 9,95 USD
- Rezistorius 4K7 omai
- Atsparus vandeniui temperatūros jutiklis DS18B20 - 5,95 USD
- Rezistorius 4K7 omai
- BMP180 barometrinio slėgio, temperatūros ir aukščio jutiklis - 6,99 USD
2 žingsnis: sumontuokite temperatūros ir drėgmės jutiklį
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 kaištis - Vcc ==> 3.3V
- 2 kaištis - duomenys ==> GPIO 16
- 3 kaištis - neprisijungti
- 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.
3 žingsnis: 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
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
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
7 veiksmas: 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
Š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
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
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:
Saludos iš pasaulio pietų!
Iki pasimatymo mano kitoje pamokoje!
Ačiū, Marcelo
Rekomenduojamas:
„Smart Distributed IoT Weather“stebėjimo sistema naudojant „NodeMCU“: 11 žingsnių
Išmanioji paskirstyta daiktų interneto orų stebėjimo sistema naudojant „NodeMCU“: Jūs visi žinote apie tradicinę orų stotį; bet ar kada susimąstėte, kaip tai iš tikrųjų veikia? Kadangi tradicinė orų stotis yra brangi ir didelė, šių stočių tankis ploto vienete yra labai mažas, o tai prisideda prie
„Super Weather Station“pakabinamas krepšelis: 11 žingsnių (su nuotraukomis)
„Super Weather Station“kabantis krepšelis: Sveiki visi! Šiame „T3chFlicks“tinklaraščio įraše parodysime, kaip pagaminome išmanų pakabinamą krepšį. Augalai yra šviežias ir naudingas bet kokių namų priedas, tačiau gali greitai pavargti, ypač jei prisiminsite juos laistyti tik tada, kai
„IoT Weather Station“su LOJ stebėjimu: 6 žingsniai
Daiktų interneto meteorologinė stotis su LOJ stebėjimu: šioje instrukcijoje parodysiu, kaip sukurti daiktų interneto (daiktų interneto) orų stotį stebint lakiuosius organinius junginius (LOJ). Šiam projektui sukūriau „pasidaryk pats“(pasidaryk pats) rinkinį. Techninė ir programinė įranga yra atvirojo kodo
„IoT Weather Station“naudojant „Blynk“programą: 5 žingsniai
„IoT Weather Station“naudojant „Blynk“programą: Šis projektas yra susijęs su pradiniais daiktų interneto pasaulio žingsniais, čia mes sujungsime DHT11/DHT22 jutiklį su „NodeMCU“ar kita ESP8266 pagrindu pagaminta plokšte ir gausime duomenis internete, kuriame naudosime „Blynk“programą, naudokite šią pamoką nuoroda jei esi
„IOT Weather Cloud“- naudojant „OpenWeatherMaps“: 11 žingsnių (su paveikslėliais)
„IOT Weather Cloud“- naudojant „OpenWeatherMaps“: tai debesis, kabantis nuo kambario lubų ir atkuriantis tam tikrus modelius, remiantis rezultatu, gautu iš interneto. Jis nuskaito orų duomenis iš „OpenWeatherMaps“. Jis gali būti valdomas rankiniu būdu per žiniatinklio sąsają arba automatiškai