Satura rādītājs:

IoT meteoroloģiskā stacija ar RPi un ESP8266: 10 soļi
IoT meteoroloģiskā stacija ar RPi un ESP8266: 10 soļi

Video: IoT meteoroloģiskā stacija ar RPi un ESP8266: 10 soļi

Video: IoT meteoroloģiskā stacija ar RPi un ESP8266: 10 soļi
Video: Wifi Weather Station | Software & 3D Printing 🌦📡 2024, Novembris
Anonim
IoT meteoroloģiskā stacija ar RPi un ESP8266
IoT meteoroloģiskā stacija ar RPi un ESP8266

Iepriekšējās apmācībās mēs spēlējāmies ar NodeMCU, sensoriem un uzzinājām, kā iegūt un reģistrēt datus ThingSpeak (lietu interneta (IoT) platformā, kas ļauj apkopot un glabāt sensoru datus mākonī un izstrādāt IoT lietojumprogrammas):

IOT MATE VIEGLI: TĀLU LAIKA DATU UZGLABĀŠANA: UV UN GAISA TEMPERATŪRA un mitrums

Izmantojot šo jauno apmācību, mēs iemācīsimies darīt to pašu, bet šoreiz, izmantojot Raspberry Pi, lai iegūtu datus no vairākiem dažādiem sensoriem, kā arī izpētītu dažādus saziņas veidus starp ierīcēm un tīmekli:

Sensori un kompozīcijas veids:

  • DHT22 (temperatūra un mitrums) ==> digitālā komunikācija
  • BMP180 (temperatūra un spiediens) ==> I2C protokols
  • DS18B20 (temperatūra) ==> 1 vadu protokols

Bloku diagramma parāda, ko mēs iegūsim šī projekta beigās:

Attēls
Attēls

1. solis: BoM - materiālu saraksts

  1. Raspberry Pi V3 - 32,00 ASV dolāri
  2. DHT22 temperatūras un relatīvā mitruma sensors - USD 9,95
  3. Rezistors 4K7 omi
  4. Ūdensnecaurlaidīgs temperatūras sensors DS18B20 - USD 5,95
  5. Rezistors 4K7 omi
  6. BMP180 barometra spiediena, temperatūras un augstuma sensors - 6,99 USD

2. darbība. Temperatūras un mitruma sensora uzstādīšana

Temperatūras un mitruma sensora uzstādīšana
Temperatūras un mitruma sensora uzstādīšana

Pirmais uzstādītais sensors būs DHT22 gaisa temperatūras un relatīvā mitruma datu uztveršanai. ADAFRUIT vietne sniedz lielisku informāciju par šiem sensoriem. Tālāk ir sniegta informācija, kas iegūta no turienes:

Pārskats

Zemo izmaksu DHT temperatūras un mitruma sensori ir ļoti vienkārši un lēni, taču ir lieliski piemēroti hobijiem, kuri vēlas veikt pamata datu reģistrēšanu. DHT sensori ir izgatavoti no divām daļām: kapacitatīva mitruma sensora un termistora. Iekšpusē ir arī ļoti vienkārša mikroshēma, kas pārveido analogo ciparu un izspiež ciparu signālu ar temperatūru un mitrumu. Digitālo signālu ir diezgan viegli nolasīt, izmantojot jebkuru mikrokontrolleri.

DHT22 Galvenās īpašības:

  • Lēts
  • 3 līdz 5 V jauda un I/O
  • 2,5 mA maksimālā pašreizējā izmantošana pārveidošanas laikā (datu pieprasīšanas laikā)
  • Piemērots 0–100% mitruma rādījumiem ar 2–5% precizitāti
  • Piemērots temperatūras rādījumiem no -40 līdz 125 ° C ± 0,5 ° C
  • Ne vairāk kā 0,5 Hz paraugu ņemšanas biežums (reizi 2 sekundēs)
  • Korpusa izmērs 15,1 mm x 25 mm x 7,7 mm
  • 4 tapas ar 0,1 collu atstarpi

Kad jūs parasti izmantojat sensoru attālumos, kas ir mazāki par 20 m, starp datu un VCC tapām jāpievieno 4K7 omu rezistors. DHT22 izejas datu tapa tiks savienota ar Raspberry GPIO 16. Pārbaudiet iepriekš redzamo elektrisko shēmu, savienojot sensoru ar RPi tapām, kā norādīts zemāk:

  1. 1. tapa - Vcc ==> 3.3V
  2. 2. tapa - dati ==> GPIO 16
  3. 3. tapa - nav savienojuma
  4. 4. tapa - Gnd ==> Gnd

Neaizmirstiet uzstādīt 4K7 omu rezistoru starp Vcc un datu tapām

Kad sensors ir pievienots, mums arī jāinstalē tā bibliotēka mūsu RPi.

DHT bibliotēkas instalēšana:

Savā avenē, sākot no /mājās, dodieties uz /Dokumenti

cd dokumenti

Izveidojiet direktoriju, lai instalētu bibliotēku, un pārejiet uz turieni:

mkdir DHT22_Sensor

cd DHT22_Sensor

Pārlūkprogrammā dodieties uz vietni Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Lejupielādējiet bibliotēku, noklikšķinot uz lejupielādes zip saites labajā pusē, un izpakojiet arhīvu savā nesen izveidotajā Raspberry Pi mapē. Pēc tam dodieties uz bibliotēkas direktoriju (apakšmape, kas tiek automātiski izveidota, izpakojot failu) un izpildiet komandu:

sudo python3 setup.py instalēt

Atveriet testa programmu (DHT22_test.py) no mana GITHUB

importēt Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 mitrums, temperatūra = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), ja mitrums nav Nav un temperatūra nav Nav: drukāt ('Temp = {0: 0,1f}*C Mitrums = {1: 0,1 f}%'. formāts (temperatūra, mitrums)) else: print (' Neizdevās nolasīt. Mēģiniet vēlreiz! ')

Izpildiet programmu ar komandu:

python3 DHT22_test.py

Zemāk esošais termināļa drukas ekrāns parāda rezultātu.

Attēls
Attēls

3. darbība: uzstādiet DS18B20 - temperatūras sensoru

DS18B20 - temperatūras sensora uzstādīšana
DS18B20 - temperatūras sensora uzstādīšana
DS18B20 - temperatūras sensora uzstādīšana
DS18B20 - temperatūras sensora uzstādīšana

Sensora pārskats:

Šajā apmācībā mēs izmantosim DS18B20 sensora hidroizolācijas versiju. Tas ir ļoti noderīgi attālai temperatūrai mitros apstākļos, piemēram, mitrā augsnē. Sensors ir izolēts un var veikt mērījumus līdz 125oC (Adafrut neiesaka to lietot virs 100oC kabeļa PVC apvalka dēļ).

DS18B20 ir digitāls sensors, kas ļauj to izmantot pat lielos attālumos! Šie 1 vadu digitālie temperatūras sensori ir diezgan precīzi (± 0,5 ° C lielā diapazonā) un var nodrošināt līdz pat 12 bitu precizitāti no iebūvētā digitālā-analogā pārveidotāja. Tie lieliski darbojas kopā ar NodeMCU, izmantojot vienu digitālo tapu, un jūs pat varat savienot vairākus ar vienu un to pašu tapu, katram no tiem rūpnīcā ir ierakstīts unikāls 64 bitu ID, lai tos atšķirtu.

Sensors darbojas no 3.0 līdz 5.0V, kas nozīmē, ka to var darbināt tieši no 3.3V, ko nodrošina viena no aveņu tapām (1 vai 17).

Sensoram ir 3 vadi:

  • Melns: GND
  • Sarkans: VCC
  • Dzeltens: 1 vadu dati

Šeit jūs varat atrast visus datus: DS18B20 datu lapa

Sensora uzstādīšana:

Izpildiet iepriekš redzamo diagrammu un izveidojiet savienojumus:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Dati ==> GPIO 4 (noklusējums bibliotēkai)

Python bibliotēkas instalēšana:

Tālāk instalēsim Python bibliotēku, kas apstrādās sensoru:

sudo pip3 instalējiet w1thermsensor

Pirms skripta palaišanas, lai pārbaudītu sensoru, pārbaudiet, vai jūsu RPi ir iespējots interfeiss "1 vads" (skatiet drukas ekrānu iepriekš)

Pēc konfigurācijas maiņas neaizmirstiet restartēt RPi

Sensora pārbaude:

Sensora pārbaudei var izmantot vienkāršu python skriptu:

importa laiks

no w1thermsensor importēt W1ThermSensor ds18b20Sensor = W1ThermSensor (), kamēr True: temperatūra = ds18b20Sensor.get_temperature () drukāt ("Temperatūra ir % s celsija" % temperatūra) time.sleep (1)

4. solis: BMP180 instalēšana

BMP180 uzstādīšana
BMP180 uzstādīšana
BMP180 uzstādīšana
BMP180 uzstādīšana
BMP180 uzstādīšana
BMP180 uzstādīšana

Sensora pārskats:

BMP180 ir pēctecis BMP085 - jaunas paaudzes augstas precizitātes digitālajiem spiediena sensoriem patērētāju vajadzībām. Īpaši mazjaudas, zemsprieguma elektronika BMP180 ir optimizēta lietošanai mobilajos tālruņos, plaukstdatoros, GPS navigācijas ierīcēs un āra iekārtās. Ar zemu augstuma troksni, kas ir tikai 0,25 m ātrā konversijas laikā, BMP180 piedāvā izcilu veiktspēju. I2C saskarne ļauj ērti integrēt sistēmu ar mikrokontrolleri. BMP180 pamatā ir pjezo-pretestības tehnoloģija, kas nodrošina EMC izturību, augstu precizitāti un linearitāti, kā arī ilgtermiņa stabilitāti.

Pilnu BMP datu lapu var atrast šeit: BMP180 - digitālais spiediena sensors

Sensora uzstādīšana: Izpildiet iepriekš redzamo diagrammu un izveidojiet savienojumus:

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

Iespējo I2C saskarni

Dodieties uz RPi konfigurāciju un apstipriniet, ka I2C saskarne ir iespējota. Ja nē, iespējojiet to un restartējiet RPi.

Izmantojot BMP180

Ja viss ir instalēts pareizi un viss ir savienots pareizi, tagad esat gatavs ieslēgt savu Pi un sākt redzēt, ko BMP180 stāsta par apkārtējo pasauli.

Pirmā lieta, kas jādara, ir pārbaudīt, vai Pi redz jūsu BMP180. Termināla logā izmēģiniet šādas darbības:

sudo i2cdetect -y 1

Ja komanda darbojās, iepriekš redzamajā termināļa izdrukas ekrānā vajadzētu redzēt kaut ko līdzīgu, parādot, ka BMP180 atrodas kanālā '77'.

BMP180 bibliotēkas instalēšana:

Izveidojiet direktoriju, lai instalētu bibliotēku:

mkdir BMP180_Sensorcd BMP180_Sensor

Pārlūkprogrammā dodieties uz Adafruit GITHub:

github.com/adafruit/Adafruit_Python_BMP

Lejupielādējiet bibliotēku, noklikšķinot uz lejupielādes zip saites labajā pusē, un izpakojiet arhīvu Raspberry Pi izveidotajā mapē. Pēc tam dodieties uz izveidoto apakšmapi un izpildiet šādu komandu bibliotēkas direktorijā:

sudo python3 setup.py instalēt

Atveriet savu Python IDE un izveidojiet testa programmu un nosauciet to, piemēram, BMP180Test.py

importēt Adafruit_BMP. BMP085 kā 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 (sensors.read_sealevel_pressure ()))

Izpildiet testa programmu:

python3 BMP180Test.py

Iepriekš redzamais termināļa drukas ekrāns parāda rezultātu.

Ņemiet vērā, ka šis spiediens ir norādīts Pa (Paskalos). Skatiet nākamo soli, lai labāk izprastu šo vienību.

5. solis: laika un augstuma mērīšana ar BMP180

Laika un augstuma mērīšana ar BMP180
Laika un augstuma mērīšana ar BMP180

Veltīsim laiku, lai ar BMP rādījumiem mazliet vairāk saprastu, ko mēs iegūsim. Jūs varat izlaist šo apmācības daļu vai atgriezties vēlāk.

Ja vēlaties uzzināt vairāk par sensora rādījumiem, lūdzu, apmeklējiet šo lielisko pamācību:

BMP180 tika izstrādāts, lai precīzi izmērītu atmosfēras spiedienu. Atmosfēras spiediens mainās atkarībā no laika apstākļiem un augstuma.

Kas ir atmosfēras spiediens?

Atmosfēras spiediena definīcija ir spēks, ko apkārt esošais gaiss iedarbojas uz visu. Gāzu svars atmosfērā rada atmosfēras spiedienu. Kopējā spiediena vienība ir "mārciņas uz kvadrātcollu" vai psi. Šeit mēs izmantosim starptautisko apzīmējumu, ti, ņūtonus uz kvadrātmetru, ko sauc par paskaliem (Pa).

Ja paņemtu 1 cm platu gaisa kolonnu, tā svars būtu aptuveni 1 kg

Šis svars, nospiežot šīs kolonnas nospiedumu, rada atmosfēras spiedienu, ko mēs varam izmērīt ar sensoriem, piemēram, BMP180. Tā kā šī cm platā gaisa kolonna sver aptuveni 1 kg, no tā izriet, ka vidējais spiediens jūras līmenī ir aptuveni 101325 paskāli vai labāk - 1013,25 hPa (1 hPa ir pazīstams arī kā milibārs - mbar). Tas samazināsies par aptuveni 4% uz katriem 300 metriem. Jo augstāks, jo mazāks spiediens, jo kolonna līdz atmosfēras augšai ir daudz īsāka un tāpēc sver mazāk. Tas ir noderīgi zināt, jo, izmērot spiedienu un veicot kādu matemātiku, jūs varat noteikt savu augstumu.

Gaisa spiediens 3, 810 metru augstumā ir tikai puse no tā, kas atrodas jūras līmenī.

BMP180 izvada absolūto spiedienu paskālos (Pa). Viens paskāls ir ļoti mazs spiediens, aptuveni tāds daudzums, kādu papīra lapa izdarīs, balstoties uz galda. Jūs biežāk redzēsit mērījumus hektopascālos (1 hPa = 100 Pa). Šeit izmantotā bibliotēka nodrošina izejošās peldošā komata vērtības hPa, kas arī ir vienāda ar vienu milibāru (mbar).

Šeit ir daži pārveidojumi par citām spiediena vienībām:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bārs
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (mārciņas uz kvadrātcollu)
  • 1 hPa = 0,02953337 inHg (dzīvsudraba collas)
  • 1 hpa = 0,00098692 atm (standarta atmosfēras)

Temperatūras efekti

Tā kā temperatūra ietekmē gāzes blīvumu, un blīvums ietekmē gāzes masu, un masa ietekmē spiedienu (wow), atmosfēras spiediens krasi mainīsies līdz ar temperatūru. Piloti to pazīst kā “blīvuma augstumu”, kas atvieglo pacelšanos aukstā dienā nekā karstā, jo gaiss ir blīvāks un tam ir lielāka aerodinamiskā iedarbība. Lai kompensētu temperatūru, BMP180 ir diezgan labs temperatūras sensors, kā arī spiediena sensors.

Lai veiktu spiediena nolasīšanu, vispirms veiciet temperatūras nolasīšanu, pēc tam apvienojiet to ar neapstrādāta spiediena rādījumu, lai iegūtu galīgo spiediena mērījumu ar temperatūru. (Bibliotēka to visu padara ļoti vienkāršu.)

Absolūtā spiediena mērīšana

Ja jūsu lietojumprogrammai ir nepieciešams izmērīt absolūto spiedienu, viss, kas jums jādara, ir nolasīt temperatūru, pēc tam veikt spiediena nolasīšanu (sīkāku informāciju skatiet skices paraugā). Galīgais spiediena rādījums būs hPa = mbar. Ja vēlaties, varat to pārvērst citā vienībā, izmantojot iepriekš minētos reklāmguvumu koeficientus.

Ņemiet vērā, ka absolūtais atmosfēras spiediens mainīsies atkarībā no jūsu augstuma un pašreizējiem laika apstākļiem, kas abi ir noderīgi mērīšanai.

Laika apstākļu novērojumi

Atmosfēras spiediens jebkurā noteiktā zemes vietā (vai jebkurā vietā, kur ir atmosfēra) nav nemainīgs. Sarežģītā mijiedarbība starp zemes griešanos, asu slīpumu un daudziem citiem faktoriem izraisa kustīgu apgabalu ar augstāku un zemāku spiedienu, kas savukārt izraisa laika apstākļu izmaiņas, kuras mēs redzam katru dienu. Vērojot spiediena izmaiņas, jūs varat paredzēt īslaicīgas laika apstākļu izmaiņas. Piemēram, spiediena pazemināšanās parasti nozīmē mitru laiku vai tuvojas vētra (ieplūst zema spiediena sistēma). Spiediena pieaugums parasti nozīmē, ka tuvojas skaidrs laiks (caur to pārvietojas augstspiediena sistēma). Bet atcerieties, ka atmosfēras spiediens mainās arī atkarībā no augstuma. Absolūtais spiediens manā mājā, Lo Barnechea Čīlē (augstums 950 m) vienmēr būs zemāks par absolūto spiedienu, piemēram, Sanfrancisko (mazāk nekā 2 metri, gandrīz jūras līmenis). Ja laika stacijas tikai ziņotu par savu absolūto spiedienu, būtu grūti tieši salīdzināt spiediena mērījumus no vienas vietas uz otru (un liela mēroga laika prognozes ir atkarīgas no mērījumiem no pēc iespējas vairākām stacijām).

Lai atrisinātu šo problēmu, laika stacijas vienmēr noņem augstuma ietekmi no paziņotajiem spiediena rādījumiem, matemātiski pievienojot līdzvērtīgu fiksēto spiedienu, lai šķiet, ka rādījums ir ņemts jūras līmenī. To darot, augstāks rādītājs Sanfrancisko nekā Lo Barnechea vienmēr būs laika apstākļu, nevis augstuma dēļ.

Lai to izdarītu, bibliotēkā ir funkcija, ko sauc par jūras līmeni (P, A). Tas ņem absolūto spiedienu (P) hPa un stacijas pašreizējo augstumu (A) metros, kā arī noņem spiediena augstuma ietekmi. Jūs varat izmantot šīs funkcijas izvadi, lai tieši salīdzinātu laika apstākļu rādījumus ar citām stacijām visā pasaulē.

Augstuma noteikšana

Tā kā spiediens mainās atkarībā no augstuma, augstuma mērīšanai varat izmantot spiediena sensoru (ar dažiem brīdinājumiem). Atmosfēras vidējais spiediens jūras līmenī ir 1013,25 hPa (vai mbar). Kāpjot kosmosa vakuuma virzienā, tas nokrīt līdz nullei. Tā kā šī kritiena līkne ir labi saprotama, varat aprēķināt augstuma starpību starp diviem spiediena mērījumiem (p un p0), izmantojot īpašu vienādojumu.

Ja kā bāzes spiedienu (p0) izmantojat jūras līmeņa spiedienu (1013,25 hPa), vienādojuma rezultāts būs jūsu pašreizējais augstums virs jūras līmeņa. Bibliotēkā ir funkcija augstums (P, P0), kas ļauj iegūt aprēķināto augstumu.

Iepriekš minētais skaidrojums tika iegūts no BMP 180 Sparkfun apmācības.

6. solis: pabeigt HW

Pilnīgs HW
Pilnīgs HW

7. darbība: datu sūtīšana uz ThingSpeak

Datu sūtīšana uz ThingSpeak
Datu sūtīšana uz ThingSpeak

Šajā brīdī mēs uzzinājām, kā sagatavot RPi datu uztveršanai no visiem 3 sensoriem, izdrukājot tos terminālī. Tagad ir pienācis laiks redzēt, kā nosūtīt šos datus uz IoT platformu ThingSpeak.

Sāksim!

Pirmkārt, jums ir jābūt kontam vietnē ThinkSpeak.com

Izpildiet norādījumus, lai izveidotu kanālu, un ņemiet vērā jūsu kanāla ID un rakstīšanas API atslēgu

Lejupielādējiet Python skriptu no mana GitHub: localData ToTS_v1_EXT.py

Komentēsim koda svarīgākās daļas:

Vispirms importēsim ThingSpeak bibliotēku, definēsim WiFi klientu un definēsim vietējos maršrutētāja un Thinkspeak akreditācijas datus:

importēt lietas runu

Ir vairāki veidi, kā sazināties ar ThingSpeak. Vienkāršākais veids būtu izmantot Mileja Chwaliz un Keith Ellis izstrādāto Thingspeak.com API klientu bibliotēku.

Bibliotēku var lejupielādēt vietnē https://github.com/mchwalisz/thingspeak vai izmantot termināļa PIP:

sudo pip3 instalējiet thingspeak

Pēc tam skripta iekšpusē atjauniniet ThingSpeak kanāla akreditācijas datus

chId = 9999999 # Ievadiet ar savu kanāla ID

tsKey = 'IEEJIET AR JŪSU KANĀLA RAKSTA KEY' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Tagad inicializēsim 3 sensorus:

# DS18B20 1 vadu bibliotēka

no w1thermsensor importēt W1ThermSensor ds18b20Sensor = W1ThermSensor () # Pēc noklusējuma bibliotēka izmanto GPIO 4 # DHT22 Bibliotēkas importēšana Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 bibliotēkas importēšana Adafruit_B0P0 (BMP) Jums vajadzētu definēt reālo augstumu, kur atrodas jūsu meteostacija, atjauninot globālo mainīgo "altReal". Manā gadījumā mana stacija atrodas 950 m virs jūras līmeņa

globālais altReal

altReal = 950

Kad esat ievadījis staciju kā reālu augstumu, mēs varam iegūt absolūto spiedienu, jūras līmeņa spiedienu, temperatūru un augstumu, izmantojot funkciju bmp180GetData (augstums):

def bmp180GetData (augstums):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - augstums/44330.0, 5.255) temp = apaļš (temp, 1) pres = apaļš (pres/100, 2) # absolūtais spiediens hPa (vai mbar) alt=apaļš (alt) presSeaLevel = apaļš (presSeaLevel/100, 2) # absolūtais spiediens hPa (vai mbar) atgriešanās temp, pres, alt, presSeaLevel

Funkcija getLocalData () atgriezīs visus mūsu stacijas uztvertos vietējos datus:

def getLocalData ():

globālais laiksString globālais humLab globālais tempExt globālais tempLab globālais presSL globālais altLab globālais presAbs # Iegūstiet lasīšanas laiku tūlīt = datums.datetime.now () timeString = tagad.strftime ("%Y-%m-%d%H:%M") # Lasīt ārējās temperatūras (1 metra attālums) tempExt = apaļš (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin un tempDHT nav Nav: humLab = apaļš (humDHT

Kad visi dati ir iegūti, izmantojot iepriekš minētās funkcijas, tie ir jānosūta uz ThingSpeak. Jūs to darīsit, izmantojot funkciju sendDataTs ():

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Dati nosūtīti par 5 laukiem: ", tempLab, tempExt, humLab, presSL, altLab)

Atjauninot kanāla datus, saglabājiet skriptu un izpildiet to savā terminālī:

sudo Python3 localData_ToTs_v1_EXT.py

Par komunikācijas protokoliem

Ņemiet vērā, ka, izmantojot "Thingspeak bibliotēku", tiek importēta "pieprasījumu bibliotēka", kas ir Apache2 licencēta HTTP bibliotēka, kas rakstīta Python. Oficiālā pieprasījuma instalācijas dokumentācija ir atrodama šeit:

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

Ja nepieciešams, pirms skripta palaišanas varat pārbaudīt, vai ir instalēta pieprasījumu bibliotēka.

sudo pip3 instalēšanas pieprasījumi

Pēc izvēles jūs varat izmantot MTTQ kā metodi datu nosūtīšanai uz ThingSpeak. MQTT atšķiras no HTTP, kad tas ir īpaši izstrādāts, lai būtu viegls un paredzēts iegultām ierīcēm ar zemu RAM un CPU veiktspēju. Turklāt vairumā gadījumu MQTT izmanto mazāku joslas platumu.

Skatiet šo apmācību: lai iegūtu sīkāku informāciju, atjauniniet ThingSpeak kanālu, izmantojot Raspberry Pi MQTT.

8. darbība. Attālo datu sūtīšana uz ThingSpeak, izmantojot ESP8266

Attālo datu sūtīšana uz ThingSpeak, izmantojot ESP8266
Attālo datu sūtīšana uz ThingSpeak, izmantojot ESP8266
Attālo datu sūtīšana uz ThingSpeak, izmantojot ESP8266
Attālo datu sūtīšana uz ThingSpeak, izmantojot ESP8266

Šim solim mēs izmantosim to pašu HW, kas tika paskaidrots apmācībā:

IOT MATE VIEGLI: TĀLU LAIKA DATU UZGLABĀŠANA: UV UN GAISA TEMPERATŪRA un mitrums

Kods, kuru mēs šeit izmantosim, būtībā ir tas pats, kas izmantots šajā apmācībā. Komentēsim koda svarīgākās daļas:

Vispirms piezvanīsim uz bibliotēku ESP8266, definēsim WiFi klientu un definēsim vietējā maršrutētāja un Thinkspeak akreditācijas datus:

/ * MezglsMCU ESP12-E */

#iekļaut WiFiClient klientu; const char* MY_SSID = "IEVADIET AR SAVU SSDID"; const char* MY_PWD = "IEVADIET SAVU PAROLI"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "IEVADIET AR SAVU RAKSTU ATSLĒGU";

Otrkārt, iekļausim ļoti svarīgu bibliotēku IoT projektiem: SimpleTimer.h:

/ * TIMER */

#iekļaut SimpleTimer taimeri;

Treškārt, iestatīšanas () laikā mēs uzsāksim seriālo komunikāciju, izsauksim funkciju connectWiFi () un definēsim taimerus. Ņemiet vērā, ka koda rinda: timer.setInterval (60000L, sendDataTS); izsauks funkciju sendDataTS () ik pēc 60 sekundēm, lai augšupielādētu datus ThinkSpeak kanālā.

anulēts iestatījums ()

{… Serial.begin (115200); kavēšanās (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Visbeidzot, bet ne mazāk svarīgi, cikla () laikā vienīgā nepieciešamā komanda ir palaist taimeri un viss!

tukša cilpa ()

{… Timer.run (); // Uzsāk SimpleTimer}

Zemāk varat redzēt divas svarīgas funkcijas, kas tiek izmantotas, lai apstrādātu Thinkspeak komunikāciju:

ESP12-E savienojums ar jūsu WiFi tīklu:

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

*WiFi savienojums *********************************************** ***/ void connectWifi () {Serial.print ("Savienojuma izveide ar"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {kavēšanās (1000); Sērijas nospiedums ("."); } Serial.println (""); Serial.println ("Savienots ar WiFi"); Serial.println (""); }

ESP12-E sūta datus uz ThinkSpeak:

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

*Datu sūtīšana uz Thinkspeak kanālu ******************************************* ******/ 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 /atjaunināt HTTP /1.1 / n"); client.print ("Saimnieks: api.thingspeak.com / n"); client.print ("Savienojums: aizvērt / 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); kavēšanās (1000); } nosūtīts ++; client.stop (); }

Pilnu kodu var atrast manā GitHub: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Kad kods ir augšupielādēts NodeMCU. Pievienosim ārēju akumulatoru un veiksim dažus mērījumus zem saules. Es uzlieku Remote Station uz jumta un sāku tvert datus vietnē ThingSpeak.com, kā parādīts iepriekš redzamajos fotoattēlos.

9. darbība. Noslēguma piezīmes

Noslēguma piezīmes
Noslēguma piezīmes

Šīs apmācības galvenais mērķis bija parādīt, kā savienot Raspberry Pi ar ThingSpeak. Tas ir lieliski, lai iegūtu datus un reģistrētu tos IoT platformā.

Izmantojot iespēju, mēs nosūtījām datus arī uz šo konkrēto kanālu, uztverot tos no attālās stacijas, izmantojot ESP8266. Šī pieeja ir pareiza, bet ne tā labākā. Tā kā mums ir "asinhrona" darbība, dažreiz gan RPi, gan ESP8266 mēģina reģistrēties vienlaikus (vai ar nelielu intervālu) to, ko atspēko ThingSpeak. Ideālā gadījumā ESP8266 sūtītu datus lokāli uz Raspberry Pi, un pēdējais būtu atbildīgs par visu datu apstrādi. To darot, "Galvenā stacija" (Raspberry Pi) varētu darīt trīs lietas:

  • Reģistrējiet visus datus vietējā datu bāzē
  • Uzrādiet visus datus vietējā tīmekļa lapā (izmantojot kolbu, kā parādīts iepriekš redzamajā fotoattēlā)
  • Visu datu sūtīšana uz ThingSpeak vienlaikus.

Turpmākajā apmācībā mēs izpētīsim šīs iespējas.

10. solis: Secinājums

Secinājums
Secinājums

Kā vienmēr, es ceru, ka šis projekts var palīdzēt citiem atrast ceļu aizraujošajā elektronikas pasaulē!

Lai iegūtu sīkāku informāciju un galīgo kodu, lūdzu, apmeklējiet manu GitHub depozitāriju: RPi-NodeMCU-Weather-Station

Lai iegūtu vairāk projektu, lūdzu, apmeklējiet manu emuāru: MJRoBot.org

Sekojiet līdzi! Nākamajā apmācībā mēs nosūtīsim datus no attālās laika stacijas uz centrālo, pamatojoties uz Raspberry Pi tīmekļa serveri:

Attēls
Attēls

Sveicieni no pasaules dienvidiem!

Uz tikšanos manā nākamajā pamācībā!

Paldies, Marselo

Ieteicams: