Talaan ng mga Nilalaman:
- Hakbang 1: BoM - Bill of Materials
- Hakbang 2: Pag-install ng Temperature & Humidity Sensor
- Hakbang 3: Pag-install ng DS18B20 - Temperatura Sensor
- Hakbang 4: Pag-install ng BMP180
- Hakbang 5: Pagsukat sa Panahon at Altitude Sa BMP180
- Hakbang 6: Ang Kumpletong HW
- Hakbang 7: Pagpapadala ng Data sa ThingSpeak
- Hakbang 8: Pagpapadala ng Malayong Data sa ThingSpeak Gamit ang ESP8266
- Hakbang 9: Huling Mga Tala
- Hakbang 10: Konklusyon
Video: IoT Weather Station Sa RPi at ESP8266: 10 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Sa mga nakaraang tutorial, naglalaro kami sa NodeMCU, mga sensor at natututo kung paano makunan at mag-log ng data sa ThingSpeak (isang platform ng Internet of Things (IoT) na hinahayaan kang mangolekta at mag-imbak ng data ng sensor sa cloud at bumuo ng mga aplikasyon ng IoT):
MADALING GUMAGAWA: MADAMING DOTAT NG WEATHER NG WEATHER: KUMUHA NG UV AT AIR TEMPERATURE & HUMIDITY
Sa bagong tutorial na ito, matututunan namin kung paano gawin ang pareho ngunit sa oras na ito, gamit ang isang Raspberry Pi upang makuha ang data mula sa maraming magkakaibang mga sensor at tuklasin din ang iba't ibang mga paraan ng pakikipag-usap sa pagitan ng mga aparato at web:
Mga uri ng sensor at Cominication:
- DHT22 (Temperatura at Humidity) ==> Digital na komunikasyon
- BMP180 (Temperatura at Presyon) ==> I2C Protocol
- DS18B20 (Temperatura) ==> 1-Wire Protocol
Ipinapakita ng diagram ng Block kung ano ang makukuha natin sa dulo sa proyektong ito:
Hakbang 1: BoM - Bill of Materials
- Raspberry Pi V3 - US $ 32.00
- DHT22 Temperatura at Kamag-anak na Sensor ng Humidity - USD 9.95
- Resistor 4K7 ohm
- DS18B20 Waterproof Temperature Sensor - USD 5.95
- Resistor 4K7 ohm
- Ang BMP180 Barometric Pressure, Temperatura at Altitude Sensor - USD 6.99
Hakbang 2: Pag-install ng Temperature & Humidity Sensor
Ang unang sensor na mai-install ay ang DHT22 para sa pagkuha ng temperatura ng hangin at data ng kamag-anak na kahalumigmigan. Ang site ng ADAFRUIT ay nagbibigay ng mahusay na impormasyon tungkol sa mga sensor na iyon. Sa ibaba, ilang impormasyon na nakuha mula doon:
Pangkalahatang-ideya
Ang mababang-gastos na temperatura ng DHT at mga sensor ng halumigmig ay napakahalaga at mabagal ngunit mahusay para sa mga hobbyist na nais na gumawa ng ilang pangunahing pag-log ng data. Ang mga sensor ng DHT ay gawa sa dalawang bahagi, isang capacitive kahalumigmigan sensor, at isang thermistor. Mayroon ding isang napaka-pangunahing chip sa loob na gumagawa ng ilang analog sa digital conversion at dumura ng isang digital signal na may temperatura at halumigmig. Ang digital signal ay medyo madali basahin gamit ang anumang microcontroller.
Pangunahing katangian ng DHT22:
- Mura
- 3 hanggang 5V na kapangyarihan at I / O
- 2.5mAng kasalukuyang kasalukuyang paggamit sa panahon ng pag-convert (habang humihiling ng data)
- Mabuti para sa 0-100% na pagbabasa ng kahalumigmigan na may 2-5% kawastuhan
- Mabuti para sa -40 hanggang 125 ° C na pagbabasa ng temperatura ± 0.5 ° C kawastuhan
- Hindi hihigit sa 0.5 Hz na rate ng pag-sample (minsan bawat 2 segundo)
- Laki ng katawan 15.1mm x 25mm x 7.7mm
- 4 na mga pin na may 0.1 "spacing
Sa sandaling karaniwang gagamitin mo ang sensor sa mga distansya na mas mababa sa 20m, ang isang resistor ng 4K7 ohm ay dapat na konektado sa pagitan ng mga pin ng Data at VCC. Ang pin ng output data ng DHT22 ay konektado sa Raspberry GPIO 16. Suriin ang nasa itaas na de-koryenteng diagram, ikonekta ang sensor sa mga RPi pin tulad sa ibaba:
- Pin 1 - Vcc ==> 3.3V
- Pin 2 - Data ==> GPIO 16
- Pin 3 - Hindi Kumonekta
- Pin 4 - Gnd ==> Gnd
Huwag kalimutang I-install ang 4K7 ohm risistor sa pagitan ng mga Vcc at Data pin
Kapag nakakonekta ang sensor, dapat din nating mai-install ang library nito sa aming RPi.
Pag-install ng DHT Library:
Sa iyong Raspberry, simula sa / bahay, pumunta sa / Mga Dokumento
Mga Dokumento ng cd
Lumikha ng isang direktoryo upang mai-install ang library at lumipat doon:
mkdir DHT22_Sensor
cd DHT22_Sensor
Sa iyong browser, pumunta sa Adafruit GitHub:
github.com/adafruit/Adafruit_Python_DHT
I-download ang library sa pamamagitan ng pag-click sa link ng pag-download zip sa kanan at i-unzip ang archive sa iyong Raspberry Pi na kamakailang nilikha na folder. Pagkatapos ay pumunta sa direktoryo ng library (subfolder na awtomatikong nilikha kapag na-unzip mo ang file), at ipatupad ang utos:
sudo python3 setup.py install
Magbukas ng isang test program (DHT22_test.py) mula sa aking GithUB
i-import ang Adafruit_DHT
DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 halumigmig, temperatura = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) kung ang halumigmig ay Wala at ang temperatura ay wala: print ('Temp = {0: 0.1f} * C Humidity = {1: 0.1 f}% '. format (temperatura, halumigmig)) iba pa: i-print (' Nabigong makakuha ng pagbabasa. Subukang muli! ')
Isagawa ang programa gamit ang utos:
python3 DHT22_test.py
Ipinapakita sa ibaba ng screen ng pag-print ng Terminal ang resulta.
Hakbang 3: Pag-install ng DS18B20 - Temperatura Sensor
Pangkalahatang-ideya ng Sensor:
Gagamitin namin sa tutorial na ito ang isang hindi tinatablan ng tubig na bersyon ng sensor ng DS18B20. Napaka-kapaki-pakinabang para sa malayong temperatura sa mga basang kondisyon, halimbawa sa isang mahalumigmig na lupa. Ang sensor ay nakahiwalay at maaaring magsukat hanggang sa 125oC (hindi inirerekumenda ng Adafrut na gamitin ito nang higit sa 100oC dahil sa cable PVC jacket nito).
Ang DS18B20 ay isang digital sensor kung ano ang ginagawang mabuting gamitin kahit sa mahabang distansya! Ang mga 1-wire digital na sensor ng temperatura ay medyo tumpak (± 0.5 ° C sa higit sa saklaw) at maaaring magbigay ng hanggang 12 piraso ng katumpakan mula sa onboard na digital-to-analog converter. Gumagawa ang mga ito ng mahusay sa NodeMCU gamit ang isang solong digital pin, at maaari mo ring ikonekta ang maraming mga iyon sa parehong pin, ang bawat isa ay may natatanging 64-bit ID na sinunog sa pabrika upang makilala sila.
Gumagana ang sensor mula 3.0 hanggang 5.0V, ano ang ibig sabihin na maaari itong direktang mapagana mula sa 3.3V na ibibigay ng isa sa mga Raspberry pin (1 o 17).
Ang sensor ay may 3 mga wire:
- Itim: GND
- Pula: VCC
- Dilaw: 1-Wire Data
Dito, mahahanap mo ang buong data: DS18B20 Datasheet
Pag-install ng Sensor:
Sundin ang diagram sa itaas at gawin ang mga koneksyon:
- Vcc ==> 3.3V
- Gnd ==> Gnd
- Data ==> GPIO 4 (default para sa library)
Pag-install ng Python Library:
Susunod, i-install natin ang library ng Python na hahawak sa sensor:
sudo pip3 i-install ang w1thermsensor
Bago patakbuhin ang script upang subukan ang sensor, suriin kung ang interface na "1-Wire" ay pinagana sa iyong RPi (tingnan sa itaas ng print screen)
Huwag kalimutang i-restart ang iyong RPi, pagkatapos baguhin ang pagsasaayos nito
Pagsubok sa sensor:
Para sa pagsubok sa sensor maaaring magamit ang isang simpleng script ng sawa:
oras ng pag-import
mula sa w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () habang Totoo: temperatura = ds18b20Sensor.get_temperature () print ("Ang temperatura ay% s celsius"% temperatura) oras. tulog (1)
Hakbang 4: Pag-install ng BMP180
Pangkalahatang-ideya ng Sensor:
Ang BMP180 ay ang kahalili ng BMP085, isang bagong henerasyon ng mga high pressure sensor ng presyon ng digital para sa mga aplikasyon ng consumer. Ang ultra-mababang lakas, mababang boltahe electronics ng BMP180 ay na-optimize para magamit sa mga mobile phone, PDA, GPS nabigasyon aparato at panlabas na kagamitan. Na may mababang ingay sa altitude na 0.25m lamang sa mabilis na oras ng pag-convert, nag-aalok ang BMP180 ng higit na mahusay na pagganap. Pinapayagan ng interface ng I2C para sa madaling pagsasama ng system sa isang microcontroller. Ang BMP180 ay batay sa piezo-resistive na teknolohiya para sa katatagan ng EMC, mataas na katumpakan, at linearity pati na rin ang pangmatagalang katatagan.
Ang kumpletong datasheet ng BMP ay matatagpuan dito: BMP180 - Digital Pressure Sensor
Pag-install ng Sensor: Sundin ang diagram sa itaas at gawin ang mga koneksyon:
- Vin ==> 3.3V
- GND ==> GND
- SCL ==> GPIO 3
- SDA ==> GPIO 2
Pagpapagana ng I2C Interface
Pumunta sa Pag-configure ng RPi at kumpirmahing pinagana ang interface ng I2C. Kung hindi, paganahin ito at i-restart ang RPi.
Gamit ang BMP180
Kung ang lahat ay na-install na okay, at ang lahat ay konektado nang okay, handa ka na ngayong i-on ang iyong Pi at simulang makita kung ano ang sinasabi sa iyo ng BMP180 tungkol sa mundo sa paligid mo.
Ang unang bagay na dapat gawin ay suriin kung nakikita ng Pi ang iyong BMP180. Subukan ang sumusunod sa isang window ng terminal:
sudo i2cdetect -y 1
Kung nagtrabaho ang utos, dapat kang makakita ng katulad na bagay sa itaas ng Terminal Printscreen, ipinapakita na ang BMP180 ay nasa channel na '77'.
Pag-install ng BMP180 Library:
Lumikha ng isang direktoryo upang mai-install ang library:
mkdir BMP180_Sensorcd BMP180_Sensor
Sa iyong browser, pumunta sa Adafruit GITHub:
github.com/adafruit/Adafruit_Python_BMP
I-download ang library sa pamamagitan ng pag-click sa link ng pag-download zip sa kanan at i-unzip ang archive sa iyong nilikha na folder na Raspberry Pi. Pagkatapos ay pumunta sa nilikha na subfolder at ipatupad ang sumusunod na utos sa direktoryo ng library:
sudo python3 setup.py install
Buksan ang iyong Python IDE at lumikha ng isang test program at pangalanan ito, halimbawa BMP180Test.py
i-import ang Adafruit_BMP. BMP085 bilang 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 ()))
Isagawa ang programa sa pagsubok:
python3 BMP180Test.py
Ipinapakita sa itaas ng screen ng pag-print ng Terminal ang resulta.
Tandaan na ang presyur na iyon ay ipinakita sa Pa (Pascals). Tingnan ang susunod na hakbang upang mas mahusay na maunawaan ang tungkol sa yunit na ito.
Hakbang 5: Pagsukat sa Panahon at Altitude Sa BMP180
Maglaan tayo ng oras upang maunawaan ang kaunti pa tungkol sa kung ano ang makukuha natin, sa mga pagbasa ng BMP. Maaari mong laktawan ang bahaging ito ng tutorial, o bumalik sa paglaon.
Kung nais mong malaman ang tungkol sa mga pagbabasa ng Sensor, mangyaring pumunta sa mahusay na tutorial na ito:
Ang BMP180 ay idinisenyo upang tumpak na masukat ang presyon ng atmospera. Ang presyon ng atmospera ay nag-iiba sa parehong panahon at altitude.
Ano ang Atmospheric Pressure?
Ang kahulugan ng presyon ng atmospera ay isang puwersa na ang hangin sa paligid mo ay nagbibigay ng lakas sa lahat. Ang bigat ng mga gas sa kapaligiran ay lumilikha ng presyur sa atmospera. Ang isang karaniwang yunit ng presyon ay "pounds per square inch" o psi. Gagamitin namin dito ang pang-internasyonal na notasyon, iyon ay mga newton bawat square meter, na kung saan ay tinatawag na pascals (Pa).
Kung kumuha ka ng 1 cm ang lapad ng haligi ng hangin ay timbangin ang tungkol sa 1 kg
Ang bigat na ito, na pinipindot ang bakas ng paa ng haligi na iyon, ay lumilikha ng presyon ng atmospera na maaari nating sukatin sa mga sensor tulad ng BMP180. Sapagkat ang cm-wide na haligi ng hangin ay may bigat na tungkol sa 1Kg, sumusunod na ang average na presyon ng antas ng dagat ay tungkol sa 101325 pascals, o mas mabuti, 1013.25 hPa (ang 1 hPa ay kilala rin bilang milibar - mbar). Ito ay mahuhulog tungkol sa 4% para sa bawat 300 metro na iyong pataas. Kung mas mataas ka, mas mababa ang presyon na makikita mo, dahil ang haligi sa tuktok ng kapaligiran ay mas maikli at samakatuwid mas mababa ang timbang. Kapaki-pakinabang itong malaman, dahil sa pagsukat ng presyon at paggawa ng matematika, matutukoy mo ang iyong altitude.
Ang presyon ng hangin sa 3, 810 metro ay kalahati lamang nito sa antas ng dagat.
Ang BMP180 ay naglalabas ng ganap na presyon sa mga pascals (Pa). Ang isang pascal ay isang napakaliit na presyon, humigit-kumulang na halaga ng isang sheet ng papel na magbibigay ng pahinga sa isang mesa. Madalas mong makita ang mga sukat sa hectopascals (1 hPa = 100 Pa). Ang silid-aklatan na ginamit dito ay nagbibigay ng mga output na lumulutang-point na halaga sa hPa, na nangyayari rin sa pantay na isang millibar (mbar).
Narito ang ilang mga conversion sa iba pang mga yunit ng presyon:
- 1 hPa = 100 Pa = 1 mbar = 0.001 bar
- 1 hPa = 0.75006168 Torr
- 1 hPa = 0.01450377 psi (pounds bawat square inch)
- 1 hPa = 0.02953337 inHg (pulgada ng mercury)
- 1 hpa = 0.00098692 atm (karaniwang mga atmospheres)
Mga Epekto ng Temperatura
Dahil ang temperatura ay nakakaapekto sa density ng isang gas, at ang density ay nakakaapekto sa masa ng isang gas, at ang masa ay nakakaapekto sa presyon (whew), ang presyon ng atmospera ay magbabago nang malaki sa temperatura. Alam ito ng mga piloto bilang "altitude ng density", na ginagawang mas madaling mag-alis sa isang malamig na araw kaysa sa isang mainit dahil ang hangin ay mas siksik at may mas malaking epekto sa aerodynamic. Upang mabayaran ang temperatura, ang BMP180 ay nagsasama ng isang mahusay na sensor ng temperatura pati na rin ang isang sensor ng presyon.
Upang magsagawa ng pagbabasa ng presyon, kumuha ka muna ng isang pagbabasa ng temperatura, pagkatapos ay pagsamahin iyon sa isang pagbabasa ng hilaw na presyon upang makabuo ng isang pangwakas na pagsukat ng presyon na binabayaran ng temperatura. (Ginagawa ng aklatan ang lahat ng ito napakadali.)
Pagsukat sa Ganap na Presyon
Kung ang iyong aplikasyon ay nangangailangan ng pagsukat ng ganap na presyon, ang kailangan mo lang gawin ay makakuha ng isang pagbabasa ng temperatura, pagkatapos ay magsagawa ng pagbabasa ng presyon (tingnan ang halimbawa ng sketch para sa mga detalye). Ang huling pagbasa ng presyon ay nasa hPa = mbar. Kung nais mo, maaari mo itong i-convert sa ibang unit gamit ang mga salik ng conversion sa itaas.
Tandaan na ang ganap na presyon ng himpapawid ay magkakaiba sa iyong altitude at sa kasalukuyang mga pattern ng panahon, na kapwa mga kapaki-pakinabang na bagay upang masukat.
Mga Pagmamasid sa Panahon
Ang presyon ng atmospera sa anumang naibigay na lokasyon sa mundo (o saanman may isang kapaligiran) ay hindi pare-pareho. Ang kumplikadong pakikipag-ugnayan sa pagitan ng pag-ikot ng mundo, ikiling ng axis, at maraming iba pang mga kadahilanan ay nagreresulta sa paglipat ng mga lugar na mas mataas at mas mababang presyon, na kung saan ay sanhi ng mga pagkakaiba-iba ng panahon na nakikita natin araw-araw. Sa pamamagitan ng panonood ng mga pagbabago sa presyon, mahuhulaan mo ang mga panandaliang pagbabago sa panahon. Halimbawa, ang dropping pressure ay karaniwang nangangahulugang basang panahon o isang bagyo ay papalapit na (isang mababang presyon ng sistema ay gumagalaw). Ang pagtaas ng presyon ay karaniwang nangangahulugan na ang malinaw na panahon ay papalapit na (isang mataas na presyon ng sistema ay gumagalaw). Ngunit tandaan na ang presyon ng atmospera ay nag-iiba rin sa altitude. Ang ganap na presyon sa aking bahay, ang Lo Barnechea sa Chile (altitude 950m) ay laging mas mababa kaysa sa ganap na presyon sa San Francisco halimbawa (mas mababa sa 2 metro, halos antas ng dagat). Kung ang mga istasyon ng panahon ay nag-ulat lamang ng kanilang ganap na presyon, mahirap na ihambing nang direkta ang mga sukat ng presyon mula sa isang lokasyon patungo sa isa pa (at ang mga malakihang hula sa panahon ay nakasalalay sa mga pagsukat mula sa maraming mga istasyon hangga't maaari).
Upang malutas ang problemang ito, palaging tinatanggal ng mga istasyon ng panahon ang mga epekto ng altitude mula sa kanilang naiulat na pagbabasa ng presyon sa pamamagitan ng pagdaragdag ng matematika ng katumbas na naayos na presyon upang ipakita na parang ang pagbabasa ay kinuha sa antas ng dagat. Kapag ginawa mo ito, ang isang mas mataas na pagbabasa sa San Francisco kaysa sa Lo Barnechea ay palaging dahil sa mga pattern ng panahon, at hindi dahil sa altitude.
Upang magawa ito, mayroong pagpapaandar sa silid-aklatan na tinatawag na antas ng dagat (P, A). Kinukuha nito ang ganap na presyon (P) sa hPa, at ang kasalukuyang altitude (A) ng istasyon sa metro, at inaalis ang mga epekto ng altitude mula sa presyon. Maaari mong gamitin ang output ng pagpapaandar na ito upang direktang ihambing ang iyong mga pagbabasa ng panahon sa iba pang mga istasyon sa buong mundo.
Pagtukoy sa Altitude
Dahil ang presyon ay nag-iiba sa altitude, maaari kang gumamit ng pressure sensor upang sukatin ang altitude (na may ilang mga pag-uusap). Ang average na presyon ng himpapawid sa antas ng dagat ay 1013.25 hPa (o mbar). Bumaba ito sa zero habang umaakyat ka patungo sa vacuum ng espasyo. Dahil ang kurba ng drop-off na ito ay naintindihan nang mabuti, maaari mong kalkulahin ang pagkakaiba sa altitude sa pagitan ng dalawang mga sukat ng presyon (p at p0) sa pamamagitan ng paggamit ng isang tukoy na equation.
Kung gumagamit ka ng presyon ng antas ng dagat (1013.25 hPa) bilang presyon ng baseline (p0), ang output ng equation ay ang iyong kasalukuyang altitude sa taas ng dagat. Mayroong isang pag-andar sa library na tinatawag na altitude (P, P0) na hinahayaan kang makuha ang "kinakalkula na altitude".
Ang paliwanag sa itaas ay nakuha mula sa BMP 180 Sparkfun tutorial.
Hakbang 6: Ang Kumpletong HW
Hakbang 7: Pagpapadala ng Data sa ThingSpeak
Sa puntong ito, natutunan namin kung paano ihanda ang RPi upang makuha ang data mula sa lahat ng 3 mga sensor, i-print ang mga ito sa terminal. Ngayon, oras na upang makita kung paano ipadala ang data na iyon sa labas ng IoT platform, ang ThingSpeak.
Magsimula na tayo!
Una, dapat mayroon kang isang account sa ThinkSpeak.com
Sundin ang mga tagubilin upang lumikha ng isang Channel at tandaan ang iyong Channel ID at Sumulat ng API Key
I-download ang Python Script mula sa aking GitHub: localData ToTS_v1_EXT.py
Komento natin ang code na pinakamahalagang bahagi:
Una, i-import natin ang ThingSpeak library, tukuyin ang client ng WiFi at tukuyin ang iyong lokal na mga kredensyal ng Router at Thinkspeak:
mag-import ng mga bagay
Mayroong maraming mga paraan upang makipag-usap sa ThingSpeak, ang pinakasimpleng paraan ay ang paggamit ng library ng client para sa bagay na bagay.com API na binuo ni Mikolaj Chwaliz at Keith Ellis.
Maaaring ma-download ang library mula sa https://github.com/mchwalisz/thingspeak o gumagamit ng PIP sa terminal:
sudo pip3 i-install ang mga bagay
Susunod, sa loob ng script, i-update ang mga kredensyal sa ThingSpeak channel
chId = 9999999 # Ipasok kasama ang iyong Channel Id
tsKey = 'ENTER WITH YOUR CHANNEL WRITE KEY' tsUrl = 'https://api.thingspeak.com/update' ts = Thingspeak. Channel (chId, tsUrl, tsKey)
Ngayon, simulan natin ang 3 sensor:
# DS18B20 1-Wire library
mula sa w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () # Bilang default ang GPIO 4 ay ginagamit ng library # DHT22 Library import Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 import ng library Adafruit_BMP. B850MP0P000000 bilang0000000 bilang0 Dapat mong tukuyin ang totoong altitude kung saan matatagpuan ang iyong Weather Station, na ina-update ang variable ng Global na "altReal". Sa aking kaso, ang aking Station ay matatagpuan sa 950m sa itaas ng antas ng dagat
pandaigdigang altReal
altReal = 950
Sa sandaling pumasok sa istasyon ng tunay na altitude bilang input, maaari nating makuha ang ganap na presyon, presyon ng antas ng dagat, temperatura, at altitude gamit ang function na bmp180GetData (altitude):
def bmp180GetData (altitude):
temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres / pow (1.0 - altitude / 44330.0, 5.255) temp = bilog (temp, 1) pres = bilog (pres / 100, 2) # ganap na presyon sa hPa (o mbar) alt=bilog (alt) presSeaLevel = bilog (presSeaLevel / 100, 2) # ganap na presyon sa hPa (o mbar) bumalik sa temp, pres, alt, presSeaLevel
Ang pagpapaandar getLocalData (), ibabalik ang lahat ng lokal na data na nakuha ng aming istasyon:
def getLocalData ():
global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Kumuha ng oras ng pagbabasa ngayon = datime.datime.now () timeString = now.strftime ("% Y-% m-% d% H:% M") # Basahin ang Temperatura sa Labas (distansya ng 1 metro) tempExt = bilog (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin ay wala) at ang tempDHT ay wala: humLab = bilog (humDHT
Kapag nakuha mo na ang lahat ng data ng mga pag-andar sa itaas, dapat mong ipadala ang mga ito sa ThingSpeak. Gagawin mo ito gamit ang pagpapaandar na sendDataTs ():
def sendDataTs ():
data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Ipinadala ang data para sa 5 mga patlang: ", tempLab, tempExt, humLab, presSL, altLab)
Sa pag-update ng data ng iyong channel, i-save ang script at ipatupad ito sa iyong terminal:
sudo Python3 localData_ToTs_v1_EXT.py
Tungkol sa mga protocol sa Komunikasyon
Tandaan na ang paggamit ng "library ng mga bagay na bagay", ang "library ng mga kahilingan" ay na-import, iyon ay isang Apache2 na Lisensyadong HTTP na aklatan, na nakasulat sa Python. Ang opisyal na dokumentasyon ng Pag-install ng Kahilingan ay matatagpuan dito:
docs.python-requests.org/en/latest/user/install/
Kung kinakailangan, bago patakbuhin ang iyong script, maaari mong i-verify kung naka-install ang library ng mga kahilingan:
sudo pip3 mga kahilingan sa pag-install
Opsyonal na maaari mong gamitin ang MTTQ bilang isang paraan upang magpadala ng data sa ThingSpeak. Ang MQTT ay naiiba mula sa HTTP, isang beses Ito ay partikular na idinisenyo upang maging magaan at inilaan para sa mga naka-embed na aparato na may mababang pagganap ng RAM at CPU. Gayundin, sa karamihan ng mga kaso, ang MQTT ay gumagamit ng mas kaunting bandwidth.
Sumangguni sa tutorial na ito: I-update ang isang ThingSpeak Channel gamit ang MQTT sa isang Raspberry Pi para sa higit pang mga detalye.
Hakbang 8: Pagpapadala ng Malayong Data sa ThingSpeak Gamit ang ESP8266
Para sa hakbang na ito, gagamitin namin ang parehong HW na ipinaliwanag sa muy tutorial:
MADALING GUMAGAWA: MADAMING DOTAT NG WEATHER NG WEATHER: KUMUHA NG UV AT AIR TEMPERATURE & HUMIDITY
Ang code na gagamitin namin dito, karaniwang katulad ng ginamit sa tutorial na iyon. Komento natin ang code na pinakamahalagang bahagi:
Una, tawagan natin ang library ng ESP8266, tukuyin ang client ng WiFi at tukuyin ang iyong lokal na mga kredensyal ng Router at Thinkspeak:
/ * NodeMCU ESP12-E * /
# isama ang client ng WiFiClient; const char * MY_SSID = "PUMASOK SA IYONG SSDID"; const char * MY_PWD = "ENTER WITH THE PASSWORD"; / * Thinkspeak * / const char * TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ENTER WITH THE WRITE KEY";
Pangalawa, isama natin ang isang napakahalagang library para sa mga proyekto ng IoT: SimpleTimer.h:
/ * TIMER * /
# isama ang SimpleTimer timer;
Pangatlo, sa panahon ng pag-setup (), sisimulan namin ang serial komunikasyon, tawagan ang function na connectWiFi () at tukuyin ang mga timer. Tandaan na ang linya ng code: timer.setInterval (60000L, sendDataTS); tatawag sa pagpapaandar na sendDataTS () tuwing 60 segundo, upang makapag-upload ng data sa ThinkSpeak channel.
walang bisa ang pag-setup ()
{… Serial.begin (115200); antala (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}
Sa wakas ngunit hindi pa huli, sa panahon ng loop (), ang tanging utos na kinakailangan ay upang simulan ang timer at iyon na!
walang bisa loop ()
{… Timer.run (); // Initiates SimpleTimer}
Sa ibaba, makikita mo ang dalawang mahahalagang pagpapaandar na ginamit upang hawakan ang komunikasyon sa Thinkspeak:
Koneksyon sa ESP12-E sa iyong WiFi network:
/***************************************************
* Kumokonekta sa WiFi ***** ***** ***** ***** ***** ***** *** / void connectWifi () {Serial.print ("Kumokonekta sa" + * MY_SSID); WiFi.begin (MY_SSID, MY_PWD); habang (WiFi.status ()! = WL_CONNected) {pagkaantala (1000); Serial.print ("."); } Serial.println (""); Serial.println ("Konektado sa WiFi"); Serial.println (""); }
Ang data ng pagpapadala ng ESP12-E sa ThinkSpeak:
***************************************************
* Pagpapadala ng Data sa Thinkspeak Channel ******************************************** ****** / void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr + = "& field6 ="; postStr + = String (temp); postStr + = "& field7 ="; postStr + = String (hum); postStr + = "& field8 ="; postStr + = String (dataSensorUV); postStr + = "\ r / n / r / n"; client.print ("POST / update HTTP / 1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Koneksyon: isara / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Uri ng Nilalaman: application / x-www-form-urlencoded / n"); client.print ("Haba ng Nilalaman:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); pagkaantala (1000); } nagpadala ++; client.stop (); }
Ang kumpletong code ay matatagpuan sa aking GitHub: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Kapag na-upload mo na ang code sa iyong NodeMCU. Ikonekta natin ang isang panlabas na baterya at gumawa ng ilang pagsukat sa ilalim ng araw. Inilagay ko ang Remote Station sa bubong at sinimulang makuha ang data sa ThingSpeak.com tulad ng ipinakita sa mga larawan sa itaas.
Hakbang 9: Huling Mga Tala
Ang pangunahing layunin ng tutorial na ito ay upang ipakita kung paano ikonekta ang Raspberry Pi sa ThingSpeak. Mahusay ito upang makuha ang data at i-log ang mga ito sa isang IoT platform.
Gamit ang pagkakataong nagpadala din kami ng data sa tukoy na channel na iyon, kinukuha ang mga ito mula sa isang remote na istasyon gamit ang isang ESP8266. Ito ang diskarte ay OK, ngunit hindi ang pinakamahusay na isa. Dahil mayroon kaming isang "asynchronous" na operasyon, kung minsan, pareho, ang RPi at ESP8266 ay subukang mag-log nang sabay (o may isang maliit na agwat) kung ano ang pinabulaanan ng ThingSpeak. Ang perpekto ay magkakaroon ng ESP8266 na nagpapadala ng data nang lokal sa Raspberry Pi at ang huling responsable na hawakan ang lahat ng data. Ang paggawa nito, ang "Main Station" (Raspberry Pi), ay maaaring gumawa ng 3 bagay:
- I-log ang lahat ng data sa isang lokal na database
- Ipakita ang lahat ng data sa isang lokal na WebPage (gamit ang Flask tulad ng ipinakita sa larawan sa itaas)
- Pagpapadala ng lahat ng data sa ThingSpeak nang sabay-sabay.
Sa isang hinaharap na tutorial, susuriin namin ang mga pagpipiliang iyon.
Hakbang 10: Konklusyon
Tulad ng nakasanayan, inaasahan kong ang proyekto na ito ay maaaring makatulong sa iba na mahanap ang kanilang mga paraan sa kapanapanabik na mundo ng electronics!
Para sa mga detalye at pangwakas na code, mangyaring bisitahin ang aking deposito sa GitHub: RPi-NodeMCU-Weather-Station
Para sa higit pang mga proyekto, mangyaring bisitahin ang aking blog: MJRoBot.org
Manatiling nakatutok! Susunod na tutorial ay magpapadala kami ng data mula sa isang malayuang istasyon ng panahon hanggang sa isang gitnang, batay sa isang Raspberry Pi Web server:
Saludos mula sa timog ng mundo!
Kita tayo sa susunod kong turo!
Salamat, Marcelo
Inirerekumendang:
NaTaLia Weather Station: Arduino Solar Powered Weather Station Tapos na sa Tamang Daan: 8 Hakbang (na may Mga Larawan)
NaTaLia Weather Station: Arduino Solar Powered Weather Station Tapos na ang Tamang Daan: Matapos ang 1 taon ng matagumpay na operasyon sa 2 magkakaibang mga lokasyon binabahagi ko ang aking mga plano sa proyekto ng istasyon ng solar Powered na solar at ipinapaliwanag kung paano ito nabago sa isang system na maaaring mabuhay nang matagal panahon mula sa solar power. Kung susundin mo
DIY Weather Station at WiFi Sensor Station: 7 Hakbang (na may Mga Larawan)
DIY Weather Station & WiFi Sensor Station: Sa proyektong ito ipapakita ko sa iyo kung paano lumikha ng isang istasyon ng panahon kasama ang isang istasyon ng sensor ng WiFi. Sinusukat ng istasyon ng sensor ang lokal na data ng temperatura at kahalumigmigan at ipinapadala ito, sa pamamagitan ng WiFi, sa istasyon ng panahon. Ipinapakita ng istasyon ng panahon ang
Natatanging Deskpiece ng Station ng Weather Weather: 5 Hakbang (na may Mga Larawan)
Natatanging Deskpiece ng Weather Weather Station: Hey Guys! Para sa proyekto sa buwan na ito ay gumawa ako ng isang istasyon ng panahon sa anyo ng isang Desk Plant o maaari mo itong tawagan bilang isang Desk Showpiece. Ang istasyon ng panahon na ito ay kumukuha ng data sa ESP8266 mula sa isang Website na pinangalanang openwethermap.org at binabago ang mga kulay ng RGB sa
RPi Weather Station at Digital Clock: 4 Hakbang (na may Mga Larawan)
RPi Weather Station at Digital Clock: Ito ay isang mabilis at madaling proyekto na gagawin, at isang magandang display upang magpakitang-gilas. Ipinapakita nito ang parehong oras, kondisyon ng panahon at temperatura. At kung gusto mo ang nakikita mo, sundan ako sa Instagram at Twitter (@ Anders644PI) upang makasabay sa ginagawa ko. Ang c
Acurite 5 in 1 Weather Station Paggamit ng isang Raspberry Pi at Weewx (iba pang Mga Panahon ng Panahon ay Tugma): 5 Mga Hakbang (na may Mga Larawan)
Acurite 5 in 1 Weather Station Paggamit ng isang Raspberry Pi at Weewx (iba pang Mga Weather Stations ay Tugma): Nang binili ko ang Acurite 5 sa 1 istasyon ng panahon nais kong masuri ang lagay ng panahon sa aking bahay habang wala ako. Nang makauwi ako at naayos ko ito napagtanto ko na dapat kong magkaroon ng display na konektado sa isang computer o bumili ng kanilang smart hub,