Mundarija:
- 1 -qadam: BoM - materiallar ro'yxati
- 2 -qadam: harorat va namlik sensori
- 3 -qadam: DS18B20 - harorat sensori o'rnatish
- 4 -qadam: BMP180 -ni o'rnatish
- 5 -qadam: BMP180 yordamida ob -havo va balandlikni o'lchash
- 6 -qadam: To'liq HW
- 7 -qadam: ma'lumotlarni ThingSpeak -ga yuborish
- 8 -qadam: ESP8266 yordamida ThingSpeak -ga masofadan ma'lumotlarni yuborish
- 9 -qadam: Yakuniy eslatmalar
- 10 -qadam: Xulosa
Video: RPi va ESP8266: 10 qadamli IoT ob -havo stantsiyasi
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
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:
1 -qadam: BoM - materiallar ro'yxati
- Raspberry Pi V3 - 32,00 AQSh dollari
- DHT22 harorat va nisbiy namlik sensori - 9,95 AQSh dollari
- Rezistor 4K7 ohm
- DS18B20 suv o'tkazmaydigan harorat sensori - 5,95 AQSh dollari
- Rezistor 4K7 ohm
- BMP180 Barometrik bosim, harorat va balandlik sensori - 6,99 AQSh dollari
2 -qadam: harorat va namlik sensori
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 -pin - Vcc ==> 3.3V
- 2 -pin - Ma'lumotlar ==> GPIO 16
- 3 -pin - ulanmang
- 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.
3 -qadam: DS18B20 - harorat sensori o'rnatish
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
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
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
7 -qadam: ma'lumotlarni ThingSpeak -ga 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
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
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
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:
Dunyoning janubidan salomlar!
Keyingi ko'rsatuvlarimda ko'rishguncha!
Rahmat, Marselo
Tavsiya:
ESP8266: 7 qadamli ajoyib WiFi kaliti
ESP8266 bilan ajoyib Wi -Fi kaliti: ESP8266 Relay Touch / WiFi almashtirish moduli yordamida chiroqni yoqish yoki o'chirish (misol tariqasida) sezgir maydonga yoki mobil ilova yordamida juda oson bo'lishi mumkin. Heltec tomonidan ishlab chiqarilgan, o'lchamlari 3 sm bo'lgan juda kichik plastinka, bittagina rel
ESP8266: 3 qadamli ultra past quvvatli podvaldagi suv toshqini signalizatsiyasi
ESP8266 bilan juda past quvvatli podvaldagi suv toshqini signalizatsiyasi: Salom, mening birinchi ko'rsatmaga xush kelibsiz. Mening uyimning podvalini har bir necha yil ichida yozning kuchli momaqaldiroqlari, er osti suvlari yoki hatto quvur yorilishi kabi turli sabablarga ko'ra suv bosadi. Bu yaxshi joy bo'lmasa-da, lekin mening markaziy isitishim
LED displeyni NodeMCU, ESP8266 va MAX7219: 8 qadamli telefon orqali boshqaring
LED taxtasini NodeMCU, ESP8266 va MAX7219 yordamida telefon orqali boshqaring: Men LED -kartani burilish signali sifatida boshqarish uchun telefondan foydalanmoqchiman. Shunday qilib, ESP8266 kirish nuqtasi, mikrokontroller va server vazifasini bajaradi. Veb -server 3 ta tugmachali oddiy veb -sahifaga ega bo'ladi: SOLni burish, O'ngga burish va SOS -ni burish. Matn
Amazon Alexa ESP8266: 4 qadamli 433 mGts masofali aqlli rozetkalarni boshqaradi
Amazon Alexa ESP8266 bilan 433 MGts masofali aqlli rozetkalarni boshqaradi: Men sizga Amazon Echo boshqaruvini 433 MGts masofadan boshqariladigan rozetkalarni ESP8266 yordamida qanday qilishni ko'rsataman. Sizga nima kerak: ESP8266 DIP kalitlari bilan 433 MGts masofadan boshqariladigan rozetkalar. NodeMCU cho'chqasi qanday
Yotoqxona elektr stantsiyasi/NiMH zaryadlash stantsiyasi: 3 qadam
Yotoqxona elektr stantsiyasi/NiMH zaryadlash stantsiyasi: Menda elektr stantsiyasi bor. Men bitta dastgohga zaryadlangan hamma narsani siqib chiqarmoqchi edim va unda lehimlash uchun joy bo'lishi kerak edi. Quvvatli narsalar ro'yxati: uyali telefon (buzilgan, lekin u mening telefonim batareyalarini zaryad qiladi, shuning uchun u har doim ulanadi va zaryadlanadi)