Mündəricat:

RPi və ESP8266 ilə IoT Hava İstasyonu: 10 addım
RPi və ESP8266 ilə IoT Hava İstasyonu: 10 addım

Video: RPi və ESP8266 ilə IoT Hava İstasyonu: 10 addım

Video: RPi və ESP8266 ilə IoT Hava İstasyonu: 10 addım
Video: Управляем адресными светодиодами на ESP32, прошивка WLED, применение в Home Assistant 2024, Noyabr
Anonim
RPi və ESP8266 ilə IoT Hava İstasyonu
RPi və ESP8266 ilə IoT Hava İstasyonu

Əvvəlki dərslərdə NodeMCU, sensorlar ilə oynayırdıq və ThingSpeak (buludda sensor məlumatlarını toplamağa və saxlamağa və IoT tətbiqlərini inkişaf etdirməyə imkan verən Əşyaların İnterneti (IoT) platformasında) məlumatların necə tutulacağını və qeyd edilməsini öyrənmişik:

IOT MASE ASAN: Uzaqdan hava məlumatlarının çəkilməsi: UV və hava istiliyi və rütubət

Bu yeni dərs ilə eyni şeyi necə edəcəyimizi öyrənəcəyik, ancaq bu anda bir neçə fərqli sensordan məlumat toplamaq üçün Raspberry Pi istifadə edərək, eyni zamanda cihazlar və internet arasında fərqli ünsiyyət yollarını araşdıracağıq:

Sensorlar və əlaqə növləri:

  • DHT22 (Temperatur və Rütubət) ==> Rəqəmsal ünsiyyət
  • BMP180 (Temperatur və Təzyiq) ==> I2C Protokolu
  • DS18B20 (Temperatur) ==> 1 Telli Protokol

Blok diaqramı bu layihənin sonunda nələr əldə edəcəyimizi göstərir:

Şəkil
Şəkil

Addım 1: BoM - Material Bill

  1. Raspberry Pi V3 - 32.00 ABŞ dolları
  2. DHT22 Temperatur və Nisbi Nəmlik Sensoru - USD 9.95
  3. Rezistor 4K7 ohm
  4. DS18B20 Su keçirməyən Temperatur Sensoru - 5.95 USD
  5. Rezistor 4K7 ohm
  6. BMP180 Barometrik Təzyiq, Temperatur və Yüksəklik Sensoru - 6.99 USD

Addım 2: Temperatur və Nəmlik Sensorunun Qurulması

Temperatur və Nəmlik Sensorunun Quraşdırılması
Temperatur və Nəmlik Sensorunun Quraşdırılması

Quraşdırılacaq ilk sensor hava istiliyi və nisbi rütubət məlumatlarını tutmaq üçün DHT22 olacaq. ADAFRUIT saytı həmin sensorlar haqqında əla məlumat verir. Bellow, bəzi məlumatlar oradan alındı:

Baxış

Ucuz DHT temperatur və rütubət sensörleri çox sadə və yavaşdır, lakin bəzi əsas məlumatların qeydini etmək istəyən həvəskarlar üçün əladır. DHT sensorlar iki hissədən ibarətdir: kapasitiv rütubət sensoru və termistor. İçərisində rəqəmsal çevrilməyə bənzəyən və temperatur və rütubətlə rəqəmsal bir siqnal ayıran çox sadə bir çip də var. Rəqəmsal siqnal hər hansı bir mikrokontrolördən istifadə etməklə oxumaq olduqca asandır.

DHT22 Əsas xüsusiyyətləri:

  • Aşağı qiymət
  • 3 -dən 5V -a qədər güc və I/O
  • Dönüşüm zamanı 2.5mA maksimum cari istifadə (məlumat istəyərkən)
  • 2-5% dəqiqlikdə 0-100% nəmlik göstəriciləri üçün yaxşıdır
  • -40 ilə 125 ° C temperatur oxunuşları ± 0,5 ° C dəqiqlik üçün yaxşıdır
  • 0,5 Hz -dən çox olmayan nümunə götürmə sürəti (hər 2 saniyədə bir)
  • Bədən ölçüsü 15.1mm x 25mm x 7.7mm
  • 0,1 "aralığında 4 pin

Sensoru 20 m -dən az məsafədə istifadə etdikdən sonra, Data və VCC pinləri arasında 4K7 ohm müqavimətçi bağlanmalıdır. DHT22 çıxış məlumat pimi Raspberry GPIO 16 -ya qoşulacaq. Sensoru RPi pinlərinə aşağıdakı kimi bağlayaraq yuxarıdakı elektrik sxemini yoxlayın:

  1. Pin 1 - Vcc ==> 3.3V
  2. Pin 2 - Məlumat ==> GPIO 16
  3. Pin 3 - Bağlanmayın
  4. Pin 4 - Gnd ==> Gnd

Vcc və Data pinləri arasında 4K7 ohm müqavimətini quraşdırmağı unutmayın

Sensor bağlandıqdan sonra kitabxanasını da RPi -yə quraşdırmalıyıq.

DHT Kitabxanasının quraşdırılması:

Moruqda /evdən başlayaraq /Sənədlər bölməsinə keçin

cd sənədləri

Kitabxananı qurmaq və ora keçmək üçün bir kataloq yaradın:

mkdir DHT22_Sensor

cd DHT22_Sensor

Brauzerinizdə Adafruit GitHub -a daxil olun:

github.com/adafruit/Adafruit_Python_DHT

Sağdakı yükləmə zip linkini tıklayaraq kitabxananı yükləyin və bu yaxınlarda yaradılmış Raspberry Pi qovluğunuzdakı arxivi açın. Sonra kitabxananın qovluğuna gedin (faylı açdığınız zaman avtomatik olaraq yaradılan alt qovluq) və əmri yerinə yetirin:

sudo python3 setup.py quraşdırın

GITHUB -dan bir test proqramı (DHT22_test.py) açın

Adafruit_DHT idxal edin

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 rütubət, temperatur = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), əgər rütubət yoxdursa və temperatur yoxdursa: çap edin ('Temp = {0: 0.1f}*C Rütubət = {1: 0.1 f}%'. format (temperatur, rütubət)) başqa: çap (' Oxunmaq alınmadı. Yenidən cəhd edin! ')

Proqramı aşağıdakı əmrlə icra edin:

python3 DHT22_test.py

Aşağıdakı Terminal çap ekranı nəticəni göstərir.

Şəkil
Şəkil

Addım 3: DS18B20 - İstilik Sensorunun Qurulması

DS18B20 - Temperatur Sensorunun Quraşdırılması
DS18B20 - Temperatur Sensorunun Quraşdırılması
DS18B20 - Temperatur Sensorunun Quraşdırılması
DS18B20 - Temperatur Sensorunun Quraşdırılması

Sensora Baxış:

Bu dərsdə DS18B20 sensorunun suya davamlı versiyasını istifadə edəcəyik. Nəm şəraitdə, məsələn, nəmli bir torpaqda uzaq temperatur üçün çox faydalıdır. Sensor təcrid olunmuşdur və 125oC -ə qədər ölçü götürə bilər (Adafrut, kabel PVC ceketinə görə 100oC -dən yuxarı istifadə etməyi məsləhət görmür).

DS18B20 rəqəmsal sensordur ki, hətta uzaq məsafələrdə belə istifadə etməyi yaxşı edir! Bu 1 telli rəqəmsal temperatur sensörləri olduqca dəqiqdir (± 0,5 ° C aralığın çox hissəsində) və göyərtədəki rəqəmsaldan analoqa çeviricidən 12 bitə qədər dəqiqlik verə bilir. Tək bir rəqəmsal pin istifadə edərək NodeMCU ilə əla işləyirlər və hətta birdən çoxunu eyni pinə bağlaya bilərsiniz, hər birinin fərqləndirmək üçün fabrikdə yandırılmış 64 bitlik unikal identifikatoru var.

Sensor 3.0 -dan 5.0V -a qədər işləyir, bu o deməkdir ki, birbaşa Moruq sancaqlarından biri (1 və ya 17) tərəfindən təmin edilən 3.3V -dən qidalana bilər.

Sensor 3 teldən ibarətdir:

  • Qara: GND
  • Qırmızı: VCC
  • Sarı: 1 telli məlumatlar

Burada tam məlumatı tapa bilərsiniz: DS18B20 məlumat cədvəli

Sensorun quraşdırılması:

Yuxarıdakı diaqrama əməl edin və əlaqələri qurun:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Məlumat ==> GPIO 4 (kitabxana üçün standart)

Python Kitabxanasının quraşdırılması:

Sonra, sensoru idarə edəcək Python kitabxanasını quraq:

sudo pip3 w1thermsensor qurun

Sensoru sınamaq üçün skriptə başlamazdan əvvəl, RPi-də "1-telli" interfeysin aktiv olub olmadığını yoxlayın (yuxarıdakı çap ekranına baxın)

Konfiqurasiyasını dəyişdirdikdən sonra RPi -ni yenidən başlatmağı unutmayın

Sensorun sınanması:

Sensoru yoxlamaq üçün sadə bir python skriptindən istifadə etmək olar:

idxal vaxtı

w1thermsensor idxalından W1ThermSensor ds18b20Sensor = W1ThermSensor () True olarkən: temperatur = ds18b20Sensor.get_temperature () çap edin ("Temperatura % s santimetrdir" % temperatur) vaxt.yuxu (1)

Addım 4: BMP180 -in quraşdırılması

BMP180 -in quraşdırılması
BMP180 -in quraşdırılması
BMP180 -in quraşdırılması
BMP180 -in quraşdırılması
BMP180 -in quraşdırılması
BMP180 -in quraşdırılması

Sensora Baxış:

BMP180, istehlakçı tətbiqləri üçün yeni nəsil yüksək dəqiqlikli rəqəmsal təzyiq sensoru olan BMP085 -in varisidir. BMP180-in ultra aşağı gücü, aşağı gərginlikli elektronikası cib telefonlarında, PDA-larda, GPS naviqasiya cihazlarında və xarici avadanlıqlarda istifadə üçün optimize edilmişdir. Sürətlə dəyişmə zamanı yalnız 0,25m aşağı hündürlükdəki səs -küylə, BMP180 üstün performans təqdim edir. I2C interfeysi bir mikro nəzarətçi ilə sistemin asan inteqrasiyasına imkan verir. BMP180, EMC-nin dayanıqlığı, yüksək dəqiqliyi, xətti olması və uzunmüddətli sabitliyi üçün piezo-rezistiv texnologiyaya əsaslanır.

Tam BMP məlumat cədvəlini burada tapa bilərsiniz: BMP180 - Rəqəmsal Təzyiq Sensoru

Sensorun quraşdırılması: Yuxarıdakı diaqrama əməl edin və əlaqələri qurun:

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

I2C İnterfeysinin aktivləşdirilməsi

RPi Konfiqurasiyasına gedin və I2C interfeysinin aktiv olduğunu təsdiq edin. Əks təqdirdə onu aktiv edin və RPi -ni yenidən başladın.

BMP180 istifadə edin

Hər şey düzgün qurulubsa və hər şey qaydasındadırsa, indi Pi -ni açmağa və BMP180 -in ətrafınızdakı dünya haqqında sizə nə söylədiyini görməyə hazırsınız.

Ediləcək ilk şey, Pi'nin BMP180 -i görüb görmədiyini yoxlamaqdır. Terminal pəncərəsində aşağıdakıları sınayın:

sudo i2cdetect -y 1

Komanda işləyərsə, BMP180 -in '77' kanalında olduğunu göstərən yuxarıdakı Terminal Printscreen -ə bənzər bir şey görməlisiniz.

BMP180 Kitabxanasının quraşdırılması:

Kitabxananı qurmaq üçün bir kataloq yaradın:

mkdir BMP180_Sensorcd BMP180_Sensor

Brauzerinizdə Adafruit GITHub -a daxil olun:

github.com/adafruit/Adafruit_Python_BMP

Sağdakı yükləmə zip linkini tıklayaraq kitabxananı yükləyin və Raspberry Pi tərəfindən yaradılmış qovluqdakı arxivi açın. Sonra yaradılan alt qovluğa gedin və kitabxananın qovluğunda aşağıdakı əmri yerinə yetirin:

sudo python3 setup.py quraşdırın

Python IDE -ni açın və bir test proqramı yaradın və adını verin, məsələn BMP180Test.py

Adafruit_BMP. BMP085 -i BMP085sensor = BMP085. BMP085 () çap ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) çap (' Pressure = {0: 0.2f} Pa 'olaraq idxal edin. format (sensor.read_pressure ())) çap ('Yükseklik = {0: 0.2f} m'.format (sensor.read_altitude ()))) çap (' Sevelvel Pressure = {0: 0.2f} Pa'.format (sensor). oxu_səviyyəli_təzyiq ()))

Test proqramını yerinə yetirin:

python3 BMP180Test.py

Yuxarıdakı Terminal çap ekranı nəticəni göstərir.

Qeyd edək ki, təzyiq Pa (Paskal) dilində təqdim olunur. Bu bölmə haqqında daha yaxşı məlumat əldə etmək üçün növbəti addıma baxın.

Addım 5: BMP180 ilə Hava və Yüksəkliyin Ölçülməsi

BMP180 ilə Hava və Yüksəkliyin Ölçülməsi
BMP180 ilə Hava və Yüksəkliyin Ölçülməsi

BMP oxunuşları ilə nə əldə edəcəyimizi bir az daha dərk etmək üçün vaxt ayıraq. Dərsliyin bu hissəsini atlaya və ya sonra geri qayıda bilərsiniz.

Sensor oxunuşları haqqında daha çox bilmək istəyirsinizsə, bu möhtəşəm təlimata keçin:

BMP180 atmosfer təzyiqini dəqiq ölçmək üçün hazırlanmışdır. Atmosfer təzyiqi həm hava şəraitinə, həm də yüksəkliyə görə dəyişir.

Atmosfer təzyiqi nədir?

Atmosfer təzyiqinin tərifi ətrafınızdakı havanın hər şeyə təsir etdiyi bir qüvvədir. Atmosferdəki qazların ağırlığı atmosfer təzyiqi yaradır. Ümumi bir təzyiq vahidi, "kvadrat düym başına funt" və ya psi'dir. Burada paskal (Pa) adlanan hər kvadrat metrə düşən nyutonlardan istifadə edəcəyik.

1 sm genişlikdə bir hava sütunu götürsəniz, təxminən 1 kq ağırlığında olardı

Bu sütunun izini aşağı basaraq, BMP180 kimi sensorlar ilə ölçə biləcəyimiz atmosfer təzyiqi yaradır. Bu sm genişliyindəki hava sütununun çəkisi təxminən 1 Kq olduğu üçün, dəniz səviyyəsinin orta təzyiqinin təxminən 101325 paskal və ya daha yaxşı 1013.25 hPa (1 hPa milibar - mbar olaraq da bilinir) olduğu ortaya çıxır. Bu, qalxdığınız hər 300 metr üçün təxminən 4% azalacaq. Nə qədər yüksək olsanız, o qədər az təzyiq görərsiniz, çünki atmosferin yuxarı hissəsindəki sütun daha qısadır və buna görə də daha az çəkiyə malikdir. Bunu bilmək faydalıdır, çünki təzyiqi ölçmək və bəzi riyazi hesablamalar aparmaqla yüksəkliyinizi təyin edə bilərsiniz.

3,810 metrlik hava təzyiqi dəniz səviyyəsindəki təzyiqin yalnız yarısıdır.

BMP180 paskallarda mütləq təzyiq (Pa) verir. Bir paskal, çox kiçik bir təzyiqdir, təxminən bir kağız vərəqinin masaya söykənəcəyi qədərdir. Ölçmələri daha tez -tez hektopaskallarda görürsünüz (1 hPa = 100 Pa). Burada istifadə olunan kitabxana hPa-da üzən nöqtə dəyərləri verir və bu da bir millibara (mbar) bərabərdir.

Digər təzyiq vahidlərinə bəzi dönüşümlər:

  • 1 hPa = 100 Pa = 1 mbar = 0.001 bar
  • 1 hPa = 0.75006168 Torr
  • 1 hPa = 0.01450377 psi (kvadrat düym üçün funt)
  • 1 hPa = 0.02953337 inHg (civə düym)
  • 1 hpa = 0.00098692 atm (standart atmosfer)

Temperatur effektləri

Temperatur bir qazın sıxlığına, sıxlıq isə bir qazın kütləsinə və kütlə təzyiqə təsir etdiyi üçün atmosfer təzyiqi temperaturla birlikdə əhəmiyyətli dərəcədə dəyişəcək. Pilotlar bunu "sıxlıq hündürlüyü" olaraq bilirlər ki, bu da havanın daha sıx olması və daha böyük aerodinamik təsirə malik olması səbəbindən soyuq günlərdə havanı istidən daha asan çıxarmağa imkan verir. Temperaturu kompensasiya etmək üçün BMP180 -də kifayət qədər yaxşı bir temperatur sensoru və bir təzyiq sensoru var.

Təzyiq oxunuşunu yerinə yetirmək üçün əvvəlcə bir temperatur oxunuşu alırsınız, sonra onu xam təzyiq oxunuşu ilə birləşdirərək son bir temperatur kompensasiya edilmiş təzyiq ölçümü əldə edirsiniz. (Kitabxana bütün bunları çox asanlaşdırır.)

Mütləq təzyiqin ölçülməsi

Tətbiqiniz mütləq təzyiqi ölçməyi tələb edirsə, etməli olduğunuz hər şey bir temperatur oxunmasıdır, sonra bir təzyiq oxunuşu edin (ətraflı məlumat üçün nümunə eskizinə baxın). Son təzyiq göstəricisi hPa = mbar olacaq. İstəyirsinizsə, yuxarıdakı dönüşüm amillərindən istifadə edərək bunu fərqli bir vahidə çevirə bilərsiniz.

Qeyd edək ki, atmosferin mütləq təzyiqi həm yüksəkliyinizə, həm də mövcud hava şəraitinə görə dəyişəcək, hər ikisi də ölçmək üçün faydalı olan şeylərdir.

Hava Müşahidələri

Dünyanın hər hansı bir yerindəki (və ya atmosferi olan hər hansı bir yerdə) atmosfer təzyiqi sabit deyil. Yerin fırlanması, oxun əyilməsi və bir çox digər amillər arasındakı kompleks qarşılıqlı təsir, hər gün gördüyümüz hava dəyişikliyinə səbəb olan daha yüksək və aşağı təzyiq sahələrinin hərəkət etməsinə səbəb olur. Təzyiqdəki dəyişiklikləri izləyərək hava şəraitində qısamüddətli dəyişiklikləri proqnozlaşdıra bilərsiniz. Məsələn, təzyiqin düşməsi ümumiyyətlə nəmli hava və ya fırtınanın yaxınlaşması deməkdir (aşağı təzyiqli sistem hərəkət edir). Artan təzyiq ümumiyyətlə açıq havanın yaxınlaşması deməkdir (yüksək təzyiqli bir sistem hərəkət edir). Ancaq unutmayın ki, atmosfer təzyiqi yüksəkliyə görə də dəyişir. Çilidəki Lo Barnechea evindəki (950m yüksəklikdəki) mütləq təzyiq, məsələn, San -Fransiskodakı mütləq təzyiqdən (2 metrdən az, demək olar ki, dəniz səviyyəsindən) aşağı olacaq. Hava stansiyaları yalnız mütləq təzyiqlərini bildirsəydilər, bir yerdən digərinə təzyiq ölçmələrini birbaşa müqayisə etmək çətin olardı (və genişmiqyaslı hava proqnozları mümkün qədər çox stansiyanın ölçmələrindən asılıdır).

Bu problemi həll etmək üçün hava stansiyaları, rütbənin, dəniz səviyyəsində çəkilmiş kimi görünməsini təmin etmək üçün bərabər sabit təzyiqi riyazi olaraq əlavə edərək, bildirilən təzyiq oxunuşlarından yüksəkliyin təsirini hər zaman aradan qaldırır. Bunu etdiyiniz zaman, San Fransiskoda Lo Barnechea'dan daha yüksək bir oxuma həmişə yüksəkliyə görə deyil, hava nümunələrinə görə olacaq.

Bunun üçün kitabxanada dəniz səviyyəsi (P, A) adlı bir funksiya var. Bu, hPa -da mütləq təzyiqi (P) və stansiyanın cari hündürlüyünü (A) metrlə alır və yüksəkliyin təsirini təzyiqdən uzaqlaşdırır. Hava oxunuşlarınızı dünyanın digər stansiyaları ilə birbaşa müqayisə etmək üçün bu funksiyanın çıxışından istifadə edə bilərsiniz.

Yüksəkliyin müəyyən edilməsi

Təzyiq yüksəkliyə görə dəyişdiyindən hündürlüyü ölçmək üçün bir təzyiq sensoru istifadə edə bilərsiniz (bir neçə xəbərdarlıqla). Dəniz səviyyəsindəki atmosferin orta təzyiqi 1013,25 hPa (və ya mbar) təşkil edir. Kosmosun boşluğuna qalxdıqca bu sıfıra enir. Bu düşmə əyrisi yaxşı başa düşüldüyündən, müəyyən bir tənlikdən istifadə edərək iki təzyiq ölçümü (p və p0) arasındakı yüksəklik fərqini hesablaya bilərsiniz.

Dəniz səviyyəsi təzyiqini (1013.25 hPa) əsas təzyiq (p0) olaraq istifadə edirsinizsə, tənliyin çıxışı dəniz səviyyəsindən hazırkı yüksəkliyiniz olacaq. Kitabxanada "hesablanmış yüksəkliyi" əldə etməyə imkan verən yüksəklik (P, P0) adlı bir funksiya var.

Yuxarıdakı izahat BMP 180 Sparkfun dərsliyindən alınmışdır.

Addım 6: Tam HW

Tam HW
Tam HW

Addım 7: Məlumatların ThingSpeak -a göndərilməsi

ThingSpeak -a məlumat göndərilməsi
ThingSpeak -a məlumat göndərilməsi

Bu nöqtədə, hər 3 sensordan alınan məlumatları terminalda çap edərək RPi hazırlamağı öyrəndik. İndi bu məlumatların IoT platforması ThingSpeak -a necə göndəriləcəyini görmək vaxtıdır.

Başlayaq!

Əvvəlcə ThinkSpeak.com -da bir hesabınız olmalıdır

Kanal yaratmaq üçün təlimatları izləyin və Kanal ID -ni və API Açarını Yazın

Python Scriptini GitHub -dan yükləyin: localData ToTS_v1_EXT.py

Kodun ən vacib hissələrini şərh edək:

Əvvəlcə ThingSpeak kitabxanasını idxal edək, WiFi müştərisini təyin edək və yerli Router və Thinkspeak etimadnamənizi təyin edək:

şeyi danış

ThingSpeak ilə ünsiyyət qurmağın bir neçə yolu var, ən sadə yol Mikolaj Chwaliz və Keith Ellis tərəfindən hazırlanan thingspeak.com API üçün müştəri kitabxanasından istifadə etmək olar.

Kitabxana https://github.com/mchwalisz/thingspeak saytından yüklənə və ya terminalda PIP istifadə oluna bilər:

sudo pip3 şeyi quraşdırın

Sonra, skriptin içərisində ThingSpeak kanalının etimadnaməsini yeniləyin

chId = 9999999 # Kanal İdentifikatorunuzla daxil olun

tsKey = 'KANALINIZLA YAZIN ANA YAZIN' yazın tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

İndi 3 sensoru işə salaq:

# DS18B20 1 Telli kitabxana

w1thermsensor idxalından W1ThermSensor ds18b20Sensor = W1ThermSensor () # Varsayılan olaraq GPIO 4 kitabxana tərəfindən istifadə olunur # DHT22 Kitabxana idxalı Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 kitabxanası Adafruit0B5P5Bmp0B8 Qlobal dəyişən "altReal" ı yeniləyərək Hava İstasyonunuzun yerləşdiyi əsl yüksəkliyi təyin etməlisiniz. Mənim vəziyyətimdə, İstasyonum dəniz səviyyəsindən 950m yüksəklikdə yerləşir

qlobal altReal

altReal = 950

Giriş olaraq stansiyanın hündürlüyünü daxil etdikdən sonra bmp180GetData (yüksəklik) funksiyasından istifadə edərək mütləq təzyiqi, dəniz səviyyəsinin təzyiqini, temperaturunu və yüksəkliyini əldə edə bilərik:

def bmp180GetData (yüksəklik):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - irtifa/44330.0, 5.255) temp = yuvarlaq (temp, 1) pres = yuvarlaq (pres/100), 2) hPa (və ya mbar) # mütləq təzyiq alt=yuvarlaq (alt) presSeaLevel = yuvarlaq (presSeaLevel/100, 2)

GetLocalData () funksiyası stansiyamız tərəfindən tutulan bütün yerli məlumatları qaytaracaq:

def getLocalData ():

qlobal vaxtString global humLab global tempExt global tempLab global presSL global altLab global presAbs # İndi oxumaq üçün vaxt əldə edin = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Xarici Temperaturu oxuyun (1 metr məsafə) tempExt = yuvarlaq (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHTPSensor ifrat) və tempDHT Yoxdur: humLab = yuvarlaq (humDHT

Yuxarıdakı funksiyalar tərəfindən tutulan bütün məlumatları əldə etdikdən sonra onları ThingSpeak -a göndərməlisiniz. SendDataTs () funksiyasından istifadə edərək bunu edəcəksiniz:

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] 5 sahə üçün göndərilən məlumatlar: ", tempLab, tempExt, humLab, presSL, altLab)

Kanal məlumatlarınız yeniləndikdə, skripti qeyd edin və terminalınızda icra edin:

sudo Python3 localData_ToTs_v1_EXT.py

Ünsiyyət protokolları haqqında

"Thingspeak kitabxanası" ndan istifadə edərək "istəklər kitabxanası", yəni Pythonda yazılmış Apache2 Lisenziyalı HTTP kitabxanası idxal olunur. Rəsmi İstək Quraşdırma sənədlərini burada tapa bilərsiniz:

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

Gerekirse, skriptinizi işə salmadan əvvəl, sorğu kitabxanasının quraşdırıldığını yoxlaya bilərsiniz:

sudo pip3 quraşdırma istəkləri

İsteğe bağlı olaraq ThingSpeak -ə məlumat göndərmək üçün MTTQ -dan istifadə edə bilərsiniz. MQTT, xüsusi olaraq yüngül olmaq üçün hazırlanmış və aşağı RAM və CPU performansı olan quraşdırılmış qurğular üçün nəzərdə tutulmuşdursa, HTTP -dən fərqlənir. Ayrıca, əksər hallarda MQTT daha az bant genişliyi istifadə edir.

Bu təlimata baxın: Daha çox məlumat üçün Raspberry Pi -də MQTT istifadə edərək ThingSpeak Kanalını yeniləyin.

Addım 8: ESP8266 istifadə edərək ThingSpeak -a Uzaqdan Məlumat Göndərmək

ESP8266 istifadə edərək ThingSpeak -a Uzaq Məlumat Göndərmək
ESP8266 istifadə edərək ThingSpeak -a Uzaq Məlumat Göndərmək
ESP8266 istifadə edərək ThingSpeak -a Uzaq Məlumat Göndərmək
ESP8266 istifadə edərək ThingSpeak -a Uzaq Məlumat Göndərmək

Bu addım üçün muy dərsliyində izah edilən eyni HW -dən istifadə edəcəyik:

IOT MASE ASAN: Uzaqdan hava məlumatlarının çəkilməsi: UV və hava istiliyi və rütubət

Burada istifadə edəcəyimiz kod, əsasən bu dərslikdə istifadə olunan koddur. Kodun ən vacib hissələrini şərh edək:

Əvvəlcə ESP8266 kitabxanasına zəng edək, WiFi müştərisini təyin edək və yerli Router və Thinkspeak etimadnamənizi təyin edək:

/ * NodeMCU ESP12-E */

#WiFiClient müştəri daxil edin; const char* MY_SSID = "SSDID İLƏ GİRİN"; const char* MY_PWD = "ŞİFRİNİZ İLƏ GİRİN"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "YAZMA AÇIŞINIZLA GİRİN";

İkincisi, IoT layihələri üçün çox əhəmiyyətli bir kitabxana daxil edək: SimpleTimer.h:

/ * ZAMANLAYICI */

#SimpleTimer timer daxil edin;

Üçüncüsü, quraşdırma () zamanı serial ünsiyyətə başlayacağıq, connectWiFi () funksiyasını çağıracağıq və taymerləri təyin edəcəyik. Qeyd edək ki, kod xətti: timer.setInterval (60000L, sendDataTS); ThinkSpeak kanalına məlumat yükləmək üçün hər 60 saniyədə sendDataTS () funksiyasını çağıracaq.

boş quraşdırma ()

{… Serial.begin (115200); gecikmə (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Nəhayət, ən azı, loop () zamanı lazım olan yeganə əmr sayğacı işə salmaqdır və budur!

boşluq döngəsi ()

{… Timer.run (); // SimpleTimer başlatır}

Aşağıda, Thinkspeak ünsiyyətini idarə etmək üçün istifadə olunan iki vacib funksiyanı görə bilərsiniz:

WiFi şəbəkənizlə ESP12-E bağlantısı:

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

*WiFi qoşulması ********************************************* ***/ void connectWifi () {Serial.print ("Bağlanır"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {gecikmə (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi Bağlandı"); Serial.println (""); }

ThinkSpeak-ə məlumat göndərən ESP12-E:

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

*Thinkspeak Kanalına Məlumat Göndərmək **************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field6 ="; postStr += String (temp); postStr += "& field7 ="; postStr += String (zümzümə); postStr += "& field8 ="; postStr += String (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /yeniləmə HTTP /1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Bağlantı: yaxın / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Content-Type: application/x-www-form-urlencoded / n"); client.print ("Məzmun-Uzunluq:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); gecikmə (1000); } göndərildi ++; client.stop (); }

Tam kodu GitHub -da tapa bilərsiniz: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Kodu NodeMCU -ya yüklədikdən sonra. Xarici bir batareyanı bağlayaq və günəş altında bir ölçü edək. Uzaq stansiyanı damın üstünə qoydum və yuxarıdakı fotoşəkillərdə göstərildiyi kimi ThingSpeak.com saytında məlumat toplamağa başladım.

Addım 9: Son Qeydlər

Son Qeydlər
Son Qeydlər

Bu təlimatın əsas məqsədi Raspberry Pi -ni ThingSpeak -a necə bağlayacağınızı göstərmək idi. Məlumat toplamaq və onları IoT platformasına daxil etmək çox yaxşıdır.

Fürsətdən istifadə edərək məlumatları ESP8266 istifadə edərək uzaq bir stansiyadan tutaraq həmin xüsusi kanala da göndərdik. Bu yanaşma yaxşıdır, amma ən yaxşısı deyil. "Asenkron" bir əməliyyata malik olduğumuz üçün bəzən RPi və ESP8266 həm ThingSpeak tərəfindən təkzib edilənləri eyni vaxtda (ya da kiçik bir fasilə ilə) daxil etməyə çalışırlar. İdeal, ESP8266 -nın yerli olaraq Raspberry Pi -yə məlumat göndərməsi və sonuncunun bütün məlumatları idarə etməkdən məsul olmasıdır. Bunu etməklə "Ana Stansiya" (Raspberry Pi) 3 şeyi edə bilər:

  • Bütün məlumatları yerli verilənlər bazasına daxil edin
  • Yerli bir Web səhifəsində bütün məlumatları təqdim edin (yuxarıdakı fotoşəkildə göstərildiyi kimi Şüşə istifadə edərək)
  • Bütün məlumatları ThingSpeak -ə eyni vaxtda göndərmək.

Gələcək bir dərsdə bu variantları araşdıracağıq.

Addım 10: Nəticə

Nəticə
Nəticə

Həmişə olduğu kimi, ümid edirəm ki, bu layihə başqalarına maraqlı elektronika dünyasına yol tapmağa kömək edə bilər!

Detallar və son kod üçün GitHub depozitimi ziyarət edin: RPi-NodeMCU-Hava İstasyonu

Daha çox layihə üçün blogumu ziyarət edin: MJRoBot.org

İzləmədə qalın! Növbəti dərsdə məlumatları Raspberry Pi veb serverinə əsaslanaraq uzaq bir hava stansiyasından mərkəzi bir stansiyaya göndərəcəyik:

Şəkil
Şəkil

Dünyanın cənubundan salamlar!

Növbəti təlimatımda görüşənədək!

Çox sağ ol, Marcelo

Tövsiyə: