Mundarija:

RPi va ESP8266: 10 qadamli IoT ob -havo stantsiyasi
RPi va ESP8266: 10 qadamli IoT ob -havo stantsiyasi

Video: RPi va ESP8266: 10 qadamli IoT ob -havo stantsiyasi

Video: RPi va ESP8266: 10 qadamli IoT ob -havo stantsiyasi
Video: Погодная станция на ESP8266, MQTT и Epaper дисплее 2024, Noyabr
Anonim
RPi va ESP8266 bilan IoT ob -havo stantsiyasi
RPi va ESP8266 bilan IoT ob -havo stantsiyasi

Oldingi darslarda biz NodeMCU, sensorlar bilan o'ynardik va ThingSpeak (Internetdagi narsalar (IoT) platformasida sensorli ma'lumotlarni to'plash va saqlash hamda IoT ilovalarini ishlab chiqish imkonini beradigan) ma'lumotlarni qanday yozib olishni va yozishni o'rgandik:

IOT MADE oson: masofadan ob -havo ma'lumotlarini olish: UV va havo harorati va namligi

Ushbu yangi darslik yordamida biz xuddi shunday qilishni o'rganamiz, lekin shu vaqtda Raspberry Pi yordamida turli xil sensorlardan ma'lumotlarni yig'ib olamiz, shuningdek, qurilmalar va Internet o'rtasida aloqa qilishning turli usullarini o'rganamiz:

Sensorlar va aloqa turlari:

  • DHT22 (Harorat va namlik) ==> Raqamli aloqa
  • BMP180 (harorat va bosim) ==> I2C protokoli
  • DS18B20 (harorat) ==> 1 simli protokol

Blok diagrammasi ushbu loyihaning oxirida biz nimaga erishamiz:

Rasm
Rasm

1 -qadam: BoM - materiallar ro'yxati

  1. Raspberry Pi V3 - 32,00 AQSh dollari
  2. DHT22 harorat va nisbiy namlik sensori - 9,95 AQSh dollari
  3. Rezistor 4K7 ohm
  4. DS18B20 suv o'tkazmaydigan harorat sensori - 5,95 AQSh dollari
  5. Rezistor 4K7 ohm
  6. BMP180 Barometrik bosim, harorat va balandlik sensori - 6,99 AQSh dollari

2 -qadam: harorat va namlik sensori

Harorat va namlik sensorini o'rnatish
Harorat va namlik sensorini o'rnatish

O'rnatiladigan birinchi sensor havo harorati va nisbiy namlik ma'lumotlarini olish uchun DHT22 bo'ladi. ADAFRUIT sayti bu sensorlar haqida ajoyib ma'lumot beradi. Quyida, ba'zi ma'lumotlar u erdan olingan:

Sharh

Qimmatbaho DHT harorat va namlik sensori juda oddiy va sekin, lekin ba'zi ma'lumotlarni yozishni xohlaydigan havaskorlar uchun juda yaxshi. DHT sensori ikki qismdan iborat: namlik sig'imi sensori va termistor. Bundan tashqari, raqamli konvertatsiyaga o'xshash va harorat va namlik bilan raqamli signalni o'chiradigan juda oddiy chip mavjud. Raqamli signalni har qanday mikrokontroller yordamida o'qish juda oson.

DHT22 Asosiy xususiyatlari:

  • Arzon
  • 3 dan 5 V gacha kuch va kirish -chiqish
  • Konvertatsiya paytida 2,5 mA maksimal oqimdan foydalanish (ma'lumot so'ralganda)
  • 2-5% aniqlikdagi namlikning 0-100% ko'rsatkichlari uchun yaxshi
  • -40 dan 125 ° C gacha bo'lgan harorat ko'rsatkichlari ± 0,5 ° C aniqligi uchun yaxshi
  • 0,5 Gts dan oshmaydigan namuna olish tezligi (har 2 soniyada bir marta)
  • Tana o'lchami 15,1 mm x 25 mm x 7,7 mm
  • 0,1 dyuymli 4 ta pin

Sensorni 20 m dan kam masofada ishlatganda, ma'lumotlar va VCC pinlari o'rtasida 4K7 ohmli rezistor ulanishi kerak. DHT22 chiqish ma'lumot pinasi Raspberry GPIO 16 ga ulanadi. Sensorni RPi pinlariga quyidagi tarzda ulab, yuqoridagi elektr diagrammasini tekshiring:

  1. 1 -pin - Vcc ==> 3.3V
  2. 2 -pin - Ma'lumotlar ==> GPIO 16
  3. 3 -pin - ulanmang
  4. 4 -pin - Gnd ==> Gnd

Vcc va Data pinlari orasidagi 4K7 ohmli rezistorni o'rnatishni unutmang

Sensor ulangandan so'ng, biz uning kutubxonasini RPi -ga o'rnatishimiz kerak.

DHT kutubxonasini o'rnatish:

Raspberry -da, /uydan boshlab, /Hujjatlar -ga o'ting

cd hujjatlar

Kutubxonani o'rnatish uchun katalog yarating va u erga o'ting:

mkdir DHT22_Sensor

CD DHT22_Sensor

Brauzeringizda Adafruit GitHub -ga o'ting:

github.com/adafruit/Adafruit_Python_DHT

Kutubxonani o'ngdagi yuklash zip havolasini bosish orqali yuklab oling va yaqinda yaratilgan Raspberry Pi arxivini oching. Keyin kutubxonaning katalogiga o'ting (faylni ochganingizda avtomatik ravishda yaratilgan ichki papka) va buyruqni bajaring:

sudo python3 setup.py -ni o'rnating

GITHUB -dan test dasturini (DHT22_test.py) oching

Adafruit_DHT import qilish

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 namlik, harorat = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), agar namlik yo'q bo'lsa va harorat yo'q bo'lsa: chop etish ('Harorat = {0: 0.1f}*S Namlik = {1: 0.1 f}%'. format (harorat, namlik)) else: print (' O'qib bo'lmadi. Qayta urinib ko'ring! ')

Dasturni buyruq bilan bajaring:

python3 DHT22_test.py

Quyidagi Terminal bosib chiqarish ekrani natijani ko'rsatadi.

Rasm
Rasm

3 -qadam: DS18B20 - harorat sensori o'rnatish

DS18B20 - harorat sensori o'rnatilishi
DS18B20 - harorat sensori o'rnatilishi
DS18B20 - harorat sensori o'rnatilishi
DS18B20 - harorat sensori o'rnatilishi

Sensor haqida umumiy ma'lumot:

Biz bu qo'llanmada DS18B20 sensorining suv o'tkazmaydigan versiyasidan foydalanamiz. Bu nam sharoitda, masalan nam tuproqda uzoqdan harorat uchun juda foydali. Sensor izolyatsiya qilingan va 125 ° C gacha o'lchashni amalga oshirishi mumkin (Adafrut uni PVX kabelli simi ko'ylagi tufayli 100 ° C dan yuqori ishlatishni tavsiya etmaydi).

DS18B20 - bu raqamli sensor, bu hatto uzoq masofalarda ham foydalanishni yaxshi qiladi! Bu 1-simli raqamli harorat sensori juda aniq (diapazonning ko'p qismida ± 0,5 ° C) va bortli raqamli-analogli konvertordan 12 bitgacha aniqlik berishi mumkin. Ular bitta raqamli pin yordamida NodeMCU bilan juda yaxshi ishlaydi va siz hatto bir nechta pinni bitta pinga ulashingiz mumkin, ularning har birida farqlash uchun zavodda yoqilgan 64-bitli identifikator mavjud.

Sensor 3,0 dan 5,0 V gacha ishlaydi, ya'ni uni to'g'ridan -to'g'ri Raspberry pinlari (1 yoki 17) orqali 3,3 V dan quvvatlantirish mumkin.

Sensor 3 ta simdan iborat:

  • Qora: GND
  • Qizil: VCC
  • Sariq: 1 simli ma'lumotlar

Bu erda siz to'liq ma'lumotni topishingiz mumkin: DS18B20 ma'lumotlar jadvali

Sensorni o'rnatish:

Yuqoridagi diagramaga amal qiling va ulanishlarni amalga oshiring:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Ma'lumotlar ==> GPIO 4 (kutubxona uchun standart)

Python kutubxonasini o'rnatish:

Keyin, sensorni boshqaradigan Python kutubxonasini o'rnatamiz:

sudo pip3 w1thermsensor -ni o'rnating

Sensorni sinab ko'rish uchun skriptni ishga tushirishdan oldin, RPi-da "1-simli" interfeysi yoqilganligini tekshiring (bosma ekranning yuqorisiga qarang)

Konfiguratsiyani o'zgartirgandan so'ng, RPi -ni qayta ishga tushirishni unutmang

Sensorni sinovdan o'tkazish:

Sensorni tekshirish uchun oddiy python skriptidan foydalanish mumkin:

import vaqti

w1thermsensor importidan W1ThermSensor ds18b20Sensor = W1ThermSensor () True bo'lsa: harorat = ds18b20Sensor.get_temperature () chop etish ("Harorat % s tselsiy bo'yicha" % harorat) vaqt. uyqu (1)

4 -qadam: BMP180 -ni o'rnatish

BMP180 o'rnatish
BMP180 o'rnatish
BMP180 o'rnatish
BMP180 o'rnatish
BMP180 o'rnatish
BMP180 o'rnatish

Sensor haqida umumiy ma'lumot:

BMP180 - BMP085 vorisi, iste'molchilar uchun yuqori aniqlikdagi raqamli bosim sensorlarining yangi avlodi. BMP180 ning past quvvatli, past kuchlanishli elektronikasi mobil telefonlar, PDA, GPS-navigatsiya qurilmalari va tashqi asbob-uskunalarda foydalanish uchun optimallashtirilgan. Kam konvertatsiya vaqtida 0,25 m balandlikdagi past shovqin bilan, BMP180 yuqori ish faoliyatini ta'minlaydi. I2C interfeysi tizimni mikrokontroller bilan oson birlashtirishga imkon beradi. BMP180 EMC mustahkamligi, yuqori aniqligi va chiziqliligi hamda uzoq muddatli barqarorligi uchun piezo-rezistiv texnologiyaga asoslangan.

BMP ma'lumotlar jadvalini bu erda topishingiz mumkin: BMP180 - Raqamli bosim sensori

Sensorni o'rnatish: yuqoridagi sxemaga amal qiling va ulanishlarni amalga oshiring:

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

I2C interfeysini yoqish

RPi konfiguratsiyasiga o'ting va I2C interfeysi yoqilganligini tasdiqlang. Agar yo'q bo'lsa, uni yoqing va RPi -ni qayta ishga tushiring.

BMP180 dan foydalanish

Agar hamma narsa yaxshi o'rnatilgan bo'lsa va hamma narsa yaxshi ulangan bo'lsa, endi siz Pi -ni yoqishga va BMP180 sizga atrofingizdagi dunyo haqida nima aytayotganini ko'rishga tayyormiz.

Birinchi narsa, Pi sizning BMP180 -ni ko'radimi -yo'qligini tekshirish. Terminal oynasida quyidagilarni sinab ko'ring:

sudo i2cdetect -y 1

Agar buyruq ishlagan bo'lsa, BMP180 '77' kanalida ekanligini ko'rsatadigan yuqoridagi Terminal Printscreenga o'xshash narsani ko'rishingiz kerak.

BMP180 kutubxonasini o'rnatish:

Kutubxonani o'rnatish uchun katalog yarating:

mkdir BMP180_Sensorcd BMP180_Sensor

Brauzeringizda Adafruit GITHub -ga o'ting:

github.com/adafruit/Adafruit_Python_BMP

O'ngdagi yuklash zip havolasini bosish orqali kutubxonani yuklab oling va Raspberry Pi yaratilgan papkasidagi arxivni oching. Keyin yaratilgan ichki papkaga o'ting va kutubxona katalogida quyidagi buyruqni bajaring:

sudo python3 setup.py -ni o'rnating

Python IDE -ni oching va sinov dasturini yarating va unga nom bering, masalan BMP180Test.py

Adafruit_BMP. BMP085 ni BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) print (' Bosim = {0: 0.2f} Pa ') sifatida import qiling. format (sensor.read_pressure ())) chop etish ('Balandlik = {0: 0.2f} m'. format (sensor.read_altitude ()))) chop etish ('Sealevel bosimi = {0: 0.2f} Pa'.format (sensor). o'qish_sifat_tasviri ()))

Sinov dasturini bajaring:

python3 BMP180Test.py

Yuqoridagi Terminal bosib chiqarish ekrani natijani ko'rsatadi.

E'tibor bering, bosim Pa (Paskal) da berilgan. Bu birlikni yaxshiroq tushunmaslik uchun keyingi qadamni ko'ring.

5 -qadam: BMP180 yordamida ob -havo va balandlikni o'lchash

Ob -havo va balandlikni BMP180 yordamida o'lchash
Ob -havo va balandlikni BMP180 yordamida o'lchash

Keling, BMP ko'rsatkichlari bilan nimaga ega bo'lishimiz haqida biroz ko'proq tushunishga vaqt ajrataylik. Siz darslikning bu qismini o'tkazib yuborishingiz yoki keyinroq qaytishingiz mumkin.

Agar siz Sensor o'qishlari haqida ko'proq bilmoqchi bo'lsangiz, iltimos, ushbu ajoyib darslikka o'ting:

BMP180 atmosfera bosimini aniq o'lchash uchun mo'ljallangan. Atmosfera bosimi ham ob -havo, ham balandlikdan farq qiladi.

Atmosfera bosimi nima?

Atmosfera bosimining ta'rifi - bu sizning atrofingizdagi havo hamma narsaga ta'sir qiladigan kuchdir. Atmosferadagi gazlarning og'irligi atmosfera bosimini hosil qiladi. Oddiy bosim birligi - "kvadrat dyuym uchun funt" yoki psi. Biz bu erda paskal (Pa) deb nomlangan, har kvadrat metr uchun nyuton bo'lgan xalqaro belgini ishlatamiz.

Agar siz 1 sm kenglikdagi havo ustunini olsangiz, vazni taxminan 1 kg bo'ladi

Bu og'irlik, ustunning izini bosib, biz atmosfera bosimini hosil qiladi, biz uni BMP180 kabi sensorlar yordamida o'lchay olamiz. Kengligi sm bo'lgan havo ustunining og'irligi taxminan 1 kg bo'lgani uchun, dengiz sathining o'rtacha bosimi taxminan 101325 paskal yoki undan ham yaxshiroq - 1013,25 gPa (1 gPa milibar - mbar deb ham ataladi). Bu siz ko'tarilgan har 300 metr uchun taxminan 4% ga kamayadi. Siz qanchalik baland bo'lsangiz, bosimni shunchalik kam ko'rasiz, chunki atmosferaning yuqori qismidagi ustun shunchalik qisqa va shuning uchun og'irligi kamroq. Buni bilish foydalidir, chunki bosimni o'lchash va matematikani bajarish orqali siz balandligingizni aniqlashingiz mumkin.

3,810 metr balandlikdagi havo bosimi dengiz sathidan faqat yarmini tashkil qiladi.

BMP180 paskallarda mutlaq bosimni chiqaradi (Pa). Bitta paskal - bu juda oz miqdordagi bosim, taxminan bir varaq stolga tayanadigan bosim. Siz o'lchovlarni gektopaskalda tez -tez ko'rasiz (1 gPa = 100 Pa). Bu erda ishlatiladigan kutubxona hPa-da suzuvchi nuqta qiymatlarini beradi, bu ham bir millibar (mbar) ga teng.

Mana, boshqa bosim birliklariga konversiyalar:

  • 1 gPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 gPa = 0,75006168 Torr
  • 1 gPa = 0.01450377 psi (kvadrat dyuym uchun funt)
  • 1 gPa = 0.02953337 inHg (simob dyuym)
  • 1 gpa = 0.00098692 atm (standart atmosfera)

Harorat ta'sirlari

Harorat gazning zichligiga, zichlik esa gaz massasiga, massa bosimga ta'sir qilgani uchun atmosfera bosimi harorat bilan keskin o'zgaradi. Uchuvchilar buni "zichlik balandligi" deb bilishadi, bu esa issiq kunga qaraganda sovuq kunda uchishni osonlashtiradi, chunki havo zichroq va katta aerodinamik ta'sir ko'rsatadi. Haroratni qoplash uchun BMP180 juda yaxshi harorat sensori va bosim sensori bilan jihozlangan.

Bosim ko'rsatkichini o'qish uchun siz avval harorat ko'rsatkichini olasiz, so'ngra uni xom bosim ko'rsatkichi bilan birlashtirib, oxirgi harorat bilan kompensatsiyalangan bosim o'lchovini chiqarasiz. (Kutubxona bularning barchasini osonlashtiradi.)

Mutlaq bosimni o'lchash

Agar sizning arizangiz mutlaq bosimni o'lchashni talab qilsa, siz faqat harorat ko'rsatkichini olishingiz kerak, so'ngra bosim ko'rsatkichini bajaring (batafsil ma'lumot uchun eskizga qarang). Oxirgi bosim ko'rsatkichi hPa = mbar bo'ladi. Agar xohlasangiz, uni yuqoridagi konvertatsiya koeffitsientlari yordamida boshqa birlikka aylantirishingiz mumkin.

E'tibor bering, atmosferaning mutlaq bosimi sizning balandligingizga ham, hozirgi ob -havo sharoitingizga qarab o'zgaradi, bu ikkalasini ham o'lchash uchun foydali.

Ob -havo kuzatuvlari

Erning istalgan joyida (yoki atmosfera bo'lgan joyda) atmosfera bosimi doimiy emas. Erning aylanishi, o'qning egilishi va boshqa ko'plab omillar o'rtasidagi murakkab o'zaro ta'sir yuqori va past bosimning harakatlanishiga olib keladi, bu esa o'z navbatida biz har kuni ko'radigan ob -havo o'zgarishiga olib keladi. Bosim o'zgarishini kuzatib, siz ob-havoning qisqa muddatli o'zgarishlarini bashorat qilishingiz mumkin. Masalan, bosimning pasayishi odatda nam ob-havo yoki bo'ron yaqinlashayotganini bildiradi (past bosimli tizim harakatlanmoqda). Bosimning ko'tarilishi odatda aniq ob-havo yaqinlashayotganini anglatadi (yuqori bosimli tizim harakatlanmoqda). Ammo shuni yodda tutingki, atmosfera bosimi balandlikka qarab o'zgaradi. Mening uyimdagi mutlaq bosim, Chilidagi Lo Barnechea (balandligi 950 m) har doim San -Frantsiskodagi mutlaq bosimdan past bo'ladi (2 metrdan kam, deyarli dengiz sathi). Agar ob-havo stantsiyalari o'zlarining mutlaq bosimi haqida xabar berishganida, bosim o'lchovlarini bir joydan boshqasiga to'g'ridan-to'g'ri solishtirish qiyin bo'lar edi (va ob-havoning keng ko'lamli prognozlari iloji boricha ko'p stansiyalarning o'lchovlariga bog'liq).

Bu muammoni hal qilish uchun ob -havo stantsiyalari har doim balandlik ta'sirini hisoblangan bosim ko'rsatkichlaridan olib tashlaydi, bu esa matematik ravishda ekvivalent qattiq bosimni qo'shib, bu ko'rsatkich dengiz sathida olinganga o'xshaydi. Agar buni qilsangiz, San -Frantsiskoda Lo Barnechea'dan yuqori ko'rsatkich har doim balandlik uchun emas, balki ob -havo sharoiti tufayli bo'ladi.

Buning uchun kutubxonada dengiz sathi (P, A) deb nomlangan funksiya mavjud. Bu gPa bo'yicha mutlaq bosimni (P) va metrning stantsiyaning hozirgi balandligini (A) oladi va balandlik ta'sirini bosimdan olib tashlaydi. Siz ob -havo ma'lumotlarini dunyoning boshqa stantsiyalari bilan to'g'ridan -to'g'ri taqqoslash uchun ushbu funktsiyadan foydalanishingiz mumkin.

Balandlikni aniqlash

Bosim balandlikka qarab o'zgaradi, siz balandlikni o'lchash uchun bosim sezgichidan foydalanishingiz mumkin (bir nechta ogohlantirishlar bilan). Dengiz sathidagi atmosferaning o'rtacha bosimi 1013,25 gPa (yoki mbar) ni tashkil qiladi. Kosmik bo'shliqqa ko'tarilayotganda bu nolga tushadi. Chiqishning egri chizig'i yaxshi tushunilganligi uchun siz ikkita tenglama o'lchami (p va p0) orasidagi balandlik farqini maxsus tenglama yordamida hisoblashingiz mumkin.

Agar siz dengiz bosimi bosimini (1013,25 hPa) boshlang'ich bosimi (p0) sifatida ishlatsangiz, tenglamaning chiqishi dengiz sathidan sizning hozirgi balandligingiz bo'ladi. Kutubxonada balandlik (P, P0) deb nomlangan funktsiya mavjud bo'lib, u sizga "hisoblangan balandlik" ni olish imkonini beradi.

Yuqoridagi tushuntirish BMP 180 Sparkfun qo'llanmasidan olingan.

6 -qadam: To'liq HW

To'liq HW
To'liq HW

7 -qadam: ma'lumotlarni ThingSpeak -ga yuborish

ThingSpeak -ga ma'lumotlarni yuborish
ThingSpeak -ga ma'lumotlarni yuborish

Shu nuqtada biz RPi -ni barcha 3 datchiklardan ma'lumotlarni olish uchun tayyorlashga o'rgandik, ularni terminalda chop etamiz. Endi bu ma'lumotlarni IoT platformasi ThingSpeak -ga qanday yuborish kerakligini ko'rish vaqti keldi.

Boshlaylik!

Birinchidan, ThinkSpeak.com saytida hisob qaydnomangiz bo'lishi kerak

Kanal yaratish uchun ko'rsatmalarga amal qiling va kanal identifikatoringiz va API yozish kalitini yozib oling

Python skriptini GitHub -dan yuklab oling: localData ToTS_v1_EXT.py

Keling, kodning eng muhim qismlarini sharhlaylik:

Birinchidan, ThingSpeak kutubxonasini import qilaylik, WiFi mijozini aniqlaymiz va mahalliy Router va Thinkspeak hisob ma'lumotlarini aniqlaymiz:

narsalarni gapirish

ThingSpeak bilan muloqot qilishning bir necha yo'li bor, eng oddiy usul - bu mijozlar kutubxonasidan foydalanib, Mikolaj Chvaliz va Keyt Ellis tomonidan ishlab chiqilgan thingspeak.com API.

Kutubxonani https://github.com/mchwalisz/thingspeak saytidan yuklab olish yoki terminalda PIP -dan foydalanish mumkin:

sudo pip3 thingspeak -ni o'rnating

Keyin skript ichida ThingSpeak kanalining hisob ma'lumotlarini yangilang

chId = 9999999 # Kanal identifikatoringiz bilan kiring

tsKey = 'KANALINGIZ BILAN KIRISH YOZISH TUZI' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Keling, uchta sensorni ishga tushiramiz:

# DS18B20 1 simli kutubxona

w1thermsensor importdan W1ThermSensor ds18b20Sensor = W1ThermSensor () # sukut bo'yicha GPIO 4 kutubxona tomonidan ishlatiladi # DHT22 Kutubxona importi Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 kutubxonasi Adafruit0B5 "AltReal" global o'zgaruvchisini yangilab, siz ob -havo stantsiyangiz joylashgan haqiqiy balandlikni belgilashingiz kerak. Mening holatimda, mening stansiyam dengiz sathidan 950 m balandlikda joylashgan

global altReal

altReal = 950

Haqiqiy balandlikni kirish sifatida kiritgandan so'ng, bmp180GetData (balandlik) funktsiyasidan foydalanib, biz mutlaq bosim, dengiz sathining bosimi, harorat va balandlikni olishimiz mumkin:

def bmp180GetData (balandlik):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - balandlik/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100), 2) hPa (yoki mbar) bo'yicha mutlaq bosim alt=round (alt) presSeaLevel = round (presSeaLevel/100, 2)

GetLocalData () funktsiyasi bizning stantsiya tomonidan olingan barcha mahalliy ma'lumotlarni qaytaradi:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Hozir o'qish vaqtini oling = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Tashqi haroratni o'qing (1 metr masofa) tempExt = dumaloq (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHTTSensor iftor) va tempDHT Yo'q: humLab = round (humDHT

Yuqoridagi funktsiyalar yordamida barcha ma'lumotlarni olganingizdan so'ng, ularni ThingSpeak -ga yuborishingiz kerak. Siz buni sendDataTs () funksiyasi yordamida bajarasiz:

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] 5 ta maydon uchun yuborilgan ma'lumotlar): ", tempLab, tempExt, humLab, presSL, altLab)

Kanal ma'lumotlari yangilangan holda, skriptni saqlang va uni terminalda bajaring:

sudo Python3 localData_ToTs_v1_EXT.py

Aloqa protokollari haqida

E'tibor bering, "thingspeak kutubxonasi" yordamida "so'rovlar kutubxonasi" import qilinadi, bu Pythonda yozilgan Apache2 litsenziyalangan HTTP kutubxonasi. Rasmiy o'rnatish hujjatlarini bu erda topishingiz mumkin:

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

Agar kerak bo'lsa, skriptni ishga tushirishdan oldin, so'rovlar kutubxonasi o'rnatilganligini tekshirishingiz mumkin:

sudo pip3 o'rnatish so'rovlari

Majburiy emas, siz ThingSpeak -ga ma'lumotlarni yuborish usuli sifatida MTTQ -dan foydalanishingiz mumkin. MQTT HTTP -dan farq qiladi, bir vaqtlar u engil bo'lishi uchun mo'ljallangan va RAM va protsessor ishlashi past bo'lgan o'rnatilgan qurilmalarga mo'ljallangan. Bundan tashqari, ko'p hollarda MQTT kam tarmoqli kengligidan foydalanadi.

Ushbu qo'llanmani ko'ring: Qo'shimcha ma'lumot olish uchun Raspberry Pi -dagi MQTT yordamida ThingSpeak kanalini yangilang.

8 -qadam: ESP8266 yordamida ThingSpeak -ga masofadan ma'lumotlarni yuborish

ThingSpeak -ga ESP8266 yordamida masofadan ma'lumotlarni yuborish
ThingSpeak -ga ESP8266 yordamida masofadan ma'lumotlarni yuborish
ThingSpeak -ga ESP8266 yordamida masofadan ma'lumotlarni yuborish
ThingSpeak -ga ESP8266 yordamida masofadan ma'lumotlarni yuborish

Ushbu qadam uchun biz juda ko'p qo'llanmada tushuntirilgan HWdan foydalanamiz:

IOT MADE oson: masofadan ob -havo ma'lumotlarini olish: UV va havo harorati va namligi

Biz bu erda ishlatadigan kod, asosan, bu qo'llanmada ishlatiladi. Keling, kodning eng muhim qismlarini sharhlaylik:

Birinchidan, ESP8266 kutubxonasiga qo'ng'iroq qilamiz, WiFi mijozini aniqlaymiz va mahalliy Router va Thinkspeak hisob ma'lumotlarini aniqlaymiz:

/ * NodeMCU ESP12-E */

#WiFiClient mijozini qo'shing; const char* MY_SSID = "SSDID BILAN KIRING"; const char* MY_PWD = "PAROLINGIZ BILAN KIRISH"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "YOZISH KEYINGIZ BILAN KIRISH";

Ikkinchidan, keling, IoT loyihalari uchun juda muhim kutubxonani o'z ichiga olaylik: SimpleTimer.h:

/ * TAYMER */

#SimpleTimer taymerini qo'shing;

Uchinchidan, setup () paytida biz ketma -ket muloqotni boshlaymiz, connectWiFi () funktsiyasini chaqiramiz va taymerlarni aniqlaymiz. E'tibor bering, kod qatori: timer.setInterval (60000L, sendDataTS); ThinkSpeak kanaliga ma'lumotlarni yuklash uchun har 60 soniyada sendDataTS () funktsiyasini chaqiradi.

bo'sh o'rnatish ()

{… Serial.begin (115200); kechikish (10); … UlanishWifi (); timer.setInterval (60000L, sendDataTS); …}

Nihoyat, lekin hech bo'lmaganda, loop () paytida, taymerni ishga tushirish uchun yagona buyruq kerak va bu hammasi!

bo'sh halqa ()

{… timer.run (); // SimpleTimer -ni ishga tushiradi}

Quyida, Thinkspeak aloqasini boshqarish uchun ishlatiladigan ikkita muhim funktsiyani ko'rishingiz mumkin:

WiFi tarmog'ingiz bilan ESP12-E ulanishi:

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

*Wi -Fi tarmog'iga ulanish ********************************************* ***/ void connectWifi () {Serial.print ("Ulanish"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {kechikish (1000); Serial.print ("."); } Serial.println (""); Serial.println ("Wi -Fi ulangan"); Serial.println (""); }

ESP12-E ThinkSpeak-ga ma'lumotlarni yuboradi:

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

*Ma'lumotni Thinkspeak kanaliga yuborish **************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field6 ="; postStr += String (temp); postStr += "& field7 ="; postStr += String (xum); postStr += "& maydon8 ="; postStr += String (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /yangilash HTTP /1.1 / n"); client.print ("Xost: api.thingspeak.com / n"); client.print ("Ulanish: yopish / 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); kechikish (1000); } yuborildi ++; client.stop (); }

To'liq kodni GitHub -da topishingiz mumkin: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Kodni NodeMCU -ga yuklaganingizdan so'ng. Keling, tashqi batareyani ulab, quyosh ostida o'lchov o'tkazaylik. Men masofadagi stansiyani tomga qo'ydim va ThingSpeak.com saytidagi ma'lumotlarni yuqoridagi rasmlarda ko'rsatilgandek yozib olishni boshladim.

9 -qadam: Yakuniy eslatmalar

Yakuniy eslatmalar
Yakuniy eslatmalar

Ushbu darslikning asosiy maqsadi Raspberry Pi -ni ThingSpeak -ga qanday ulashni ko'rsatish edi. Ma'lumotni olish va ularni IoT platformasida qayd etish juda yaxshi.

Fursatdan foydalanib, biz ma'lumotlarni ESP8266 yordamida uzoqdagi stantsiyadan ushlab, o'sha kanalga yubordik. Bu yondashuv yaxshi, lekin eng yaxshisi emas. Bizda "asenkron" operatsiya bo'lganligi sababli, ba'zida ikkalasi ham RPi va ESP8266 bir vaqtning o'zida (yoki kichik interval bilan) ThingSpeak tomonidan rad etilgan ma'lumotlarni kiritishga harakat qilishadi. Ideal ESP8266 ma'lumotlarini mahalliy ravishda Raspberry Pi -ga yuboradi va oxirgi ma'lumotni boshqarishga javobgar bo'ladi. Shunday qilib, "Asosiy stantsiya" (Raspberry Pi) uchta narsani qila oladi:

  • Barcha ma'lumotlarni mahalliy ma'lumotlar bazasida saqlang
  • Mahalliy veb -sahifadagi barcha ma'lumotlarni ko'rsatish (yuqoridagi rasmda ko'rsatilgandek Flask yordamida)
  • ThingSpeak -ga bir vaqtning o'zida barcha ma'lumotlarni yuborish.

Kelgusi darsda biz ushbu variantlarni ko'rib chiqamiz.

10 -qadam: Xulosa

Xulosa
Xulosa

Har doimgidek, men umid qilamanki, bu loyiha boshqalarga ajoyib elektronika olamiga yo'l topishga yordam beradi!

Tafsilotlar va yakuniy kod uchun GitHub depozitariyamga tashrif buyuring: RPi-NodeMCU-Weather-Station

Boshqa loyihalar uchun mening blogimga tashrif buyuring: MJRoBot.org

Yangiliklarni kuzatib boring, xabardor bo'lib boring; Biz bilan qoling! Keyingi darsda biz Raspberry Pi veb -serveriga asoslangan masofadagi ob -havo stantsiyasidan ma'lumotlarni markazga yuboramiz:

Rasm
Rasm

Dunyoning janubidan salomlar!

Keyingi ko'rsatuvlarimda ko'rishguncha!

Rahmat, Marselo

Tavsiya: