Mündəricat:
- Addım 1: Avadanlıq + Quraşdırma
- Addım 2: Dövrün qurulması
- Addım 3: Arduino kodu və yanıb sönmə
- Addım 4: Raspberry Pi Kodu
- Addım 5: Hamısını bir araya gətirmək
- Addım 6: Grafana Konfiqurasiyası və Tablosuna Baxış
- Addım 7: Bitirin
Video: Grafana və Raspberry Pi istifadə edərək hava keyfiyyətini izləyin: 7 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Kiçik bir kiçik IOT layihəsi axtarırdım və bir dostum bu təlimatı nəzərdən keçirməyi tövsiyə etdi:
dzone.com/articles/raspberry-pi-iot-sensor…
İzləmə üçün bir Raspberry Pi qurarkən davam etmək üçün təlimatı izləməyi çox tövsiyə edirəm. Bu dərslik, yüksək bir səhv toleransına imkan verən sadə bir IoT cihazının dizaynındakı digər addımları və Arduino ilə birləşdirildikdə bir Raspberry Pi -nin nə qədər faydalı olacağını başa çatdıracaq.
Hava sensörlerinin MQ* modellərinin effektivliyi və bir qədər məhdudlaşdırılması ilə də məşğul oluram. MQ* sensorlar ucuz və olduqca təsirlidir və qurmaq çox asandır.
Ümumiyyətlə, bu, bir Arduino -nu internetə ən sadə şəkildə bağlamağa başlamağınıza kömək edəcək və daha yüngül ayaq izi modullarından istifadə yolunu təyin edəcək (yenidən: ESP8266).
Əylənin!
Addım 1: Avadanlıq + Quraşdırma
Avadanlıq
- Raspbian quraşdırılmış Raspberry Pi
- Raspberry Pi enerji təchizatı
- Arduino Uno/Ekvivalent
- Kişidən kişiyə USB tip B, A tipindən (Arduino ilə birlikdə olmalıdır)
- İstənilən MQ* sensoru (MQ-2, 4, 5 və 135 istifadə etmişəm)
- Çeşidli keçid telləri
- mini çörək taxtası
Qurmaq
Bu təlimat Arduino və Raspberry Pi -dən istifadə etmək üçün incə bir giriş olaraq nəzərdə tutulmuşdur - linux terminalından necə istifadə olunacağını bilməyə kömək edəcəkdir. Bununla birlikdə, Arduino və ya Raspberry Pi üzərində işləməklə çox təcrübəm yoxdur - həqiqətən ehtiyacınız olan təchizat və maraqlı bir münasibətdir.
- Bu dərslikdəki addımları tamamlamalısınız.
- Raspberry Pi ilə əlaqə qurmaq üçün Secure Shell (SSH) istifadə etməyi məsləhət görürəm, çünki bu əmrləri asanlıqla daxil etməyə imkan verir. SSH vasitəsilə əlaqə Windows, Linux və ya Mac istifadə etdiyinizdən fərqlənir. Linux və Mac -dan ssh ilə əlaqədar istifadə etmək olduqca asandır (SSH açma əmri sözün əsl mənasında sshdir). Windows üçün Putty -ə baxın. Layihə zamanı sessiyanı davam etdirmək üçün ekrana baxmağı məsləhət görürəm.
- Python -u Raspbian -a da yükləməlisiniz. Bu addımları tamamladıqda, Python -un quraşdırılmış olduğu əvvəlki bir layihədən aldığım köhnə bir SD kartın surətini çıxartdım. NOOBS/Raspbian paylamanızda Python 3.7 və ya daha yuxarı yoxdursa, Pythonu mənbədən tərtib etmək üçün bu addımlara baxın.
- Git ilə tanış olun və Raspbian distributivinizdə hələ quraşdırılmadığı halda quraşdırın.
Addım 2: Dövrün qurulması
Arduino'da qurmanız lazım olan bir dövrə var.
İstinad olaraq istifadə edə biləcəyiniz bir sxem təqdim etdim.
Bütün MQ-* qaz sensorlarının gözəlliyi, 5 Volt və Toprak bağlantısı qurulduqda, Arduino analog pinlərinin giriş müqavimətinin sensorun düzgün işləməsinə imkan verməsidir.
Sensordakı kəsmə lövhəsindən Analog bağlantının rəqəmsal əlaqəyə deyil, Arduinoya bağlı olduğundan əmin olun. Test edərkən çox dar bir dəyər aralığıyla qarşılaşırsınızsa, əvvəlcə bağlantınızı burada yoxlamağı məsləhət görürəm.
Addım 3: Arduino kodu və yanıb sönmə
Bunu izləyən addımda Arduino lövhəsini Raspberry Pi ilə birləşdirəcəyik. Bunu etməzdən əvvəl, sensoru oxumaq və sensor məlumatlarını Raspberry Pi -yə ötürmək üçün Arduino kodunu yandırmalıyıq. Bu, normal olaraq kodu Arduinoya köçürdüyünüz hər hansı bir şəkildə edilə bilər. Arduino IDE -dən başqa bir üçüncü tərəf vasitəsi istifadə etdim - buna görə də Arduino kitabxanasını yuxarıya əlavə edirəm. Digər layihələr üçün bu lazım deyil.
Bu bölmənin sonunda kopyalamaq/yapışdırmaq üçün kodu yoxlayın.
Kod nə edir
Kod dörd fərqli sensordan məlumat əldə etmək üçün qurulmuşdur - müxtəlif növ sensorlar istifadə edirsinizsə, Serial portundan göndərilən çıxış siqnalının adlarını dəyişdirmək məntiqli olar.
Döngədə Raspberry Pi -nin bizdən məlumat istəyib -istəmədiyini yoxlayırıq. Beləliklə, Raspberry Pi -nin Arduino -ya məlumat üçün davamlı olaraq sorğu göndərəcəyi çox sadə bir Master/Slave konfiqurasiyasından istifadə edirik. Bu, Arduino kodunda bir sayğacdan daha sadədir, çünki Arduinoya yeni dəyərlər yandırmaq yerinə Raspberry Pi -dən hansı dəyərlərin işlədiyini yoxlamaq daha asandır.
Arduino, bir dəfə məlumat istəyi aldıqda, çıxışı GET parametri olaraq formatlaşdıracaq - bu HTTP metodları ilə əlaqədardır və sadəcə bir dizayn seçimidir. Arduino -dan Serial Port vasitəsi ilə bir ünsiyyət sxemi hazırlamalı olsaydınız, onu tərtib etdiyiniz müddətcə məlumatların kifayət qədər ayrıldığı üçün başqa bir şeyə asanlıqla gedə bilərsiniz. GET -i seçdim, çünki tanış və möhkəmdir.
Sadə sınaq…
Arduino -nu yandırıb kod işlədikdən sonra Arduino IDE -nin Serial Monitorunu açın. Tək "H" hərfini (sərmayəsini təmin edin!) Göndərsəniz, məlumatların yükünü əldə edəcəksiniz. Təbriklər, işləyir!
Bir nümunə, MQ-* məlumatlarının asinxron toplayıcısı
#daxil edin |
int mq2 = A2; |
int mq4 = A3; |
int mq5 = A4; |
int mq135 = A5; |
int incomingByte; |
voidsetup () { |
pinMode (mq2, GİRİŞ); |
pinMode (mq4, GİRİŞ); |
pinMode (mq5, GİRİŞ); |
pinMode (mq135, GİRİŞ); |
Serial.begin (9600); |
} |
/* valuePrint bu etiketin dəyərini yazdırır. |
* Yalnız yan təsirlər yaradır. |
*/ |
voidvaluePrint (String etiketi, int oxu) { |
Serial. çap (etiket); |
Serial.print ("="); |
Serial. çap (oxu); |
} |
voidloop () { |
// gələn serial məlumatların olub olmadığını yoxlayın: |
əgər (Serial.available ()> 0) { |
// serial tamponunda ən qədim baytı oxuyun: |
// "Serial.read çağırdığınızda bir bayt qəbul buferindən silinir və kodunuza qaytarılır" |
daxil olanByte = Serial.read (); |
// böyük bir H (ASCII 72) olarsa, dəyərləri oxuyun və moruq sahibinə göndərin. |
// TODO: mesajın hər zaman eyni uzunluqda olmasını təmin edin |
əgər (incomingByte == 72) { |
int mq2Reading = analogRead (mq2); |
int mq4Reading = analogRead (mq4); |
int mq5Reading = analogRead (mq5); |
int mq135Reading = analogRead (mq135); |
Serial.print ("?"); |
dəyərPrint ("mq2", mq2Oxu); |
Serial.print ("&"); |
dəyərPrint ("mq4", mq4Oxu); |
Serial.print ("&"); |
dəyərPrint ("mq5", mq5Oxu); |
Serial.print ("&"); |
dəyərPrint ("mq135", mq135Oxu); |
Serial.print ("\ n"); |
} |
} |
// serialı hər saniyədə oxuyun |
gecikmə (1000); |
} |
GitHub tərəfindən ❤ ilə ev sahibliyi edilən rawmain.cpp -ə baxın
Addım 4: Raspberry Pi Kodu
İndi Raspberry Pi-ni https://dzone.com/articles/raspberry-pi-iot-sensor… uyğun olaraq konfiqurasiya etdiyiniz üçün, indi MQTT vasitəsilə məlumatları verilənlər bazamıza göndərəcək Raspberry Client kodunu işlədə bilərsiniz. Grafana ilə əlaqə qurur.
-
Moruqunuzun internetə bağlı olduğundan əmin olun və sonra bütün kodu Raspberry Pi -yə kopyalamaq üçün git clone əmrini yerinə yetirin. Sizin əmriniz bir az belə görünəcək:
git klonu
-
Raspberry Pi terminalında, "raspberry_client" olaraq qovluq əmrini (cd) yerinə yetirin:
cd raspberry_client.
-
Virtual mühitdən istifadə etməlisiniz*. Sadə. Qaç
python3 -m venv env. Bu, asılılıqları qurmaq üçün istifadə edəcəyimiz "env" adlı bir virtual mühit yaradacaq.
-
İndi virtual mühitimizə girməliyik. Qaç:
mənbə env/bin/activate. İndi layihənin asılılıqlarını qurmağa hazırsınız.
-
Yeni klonladığınız paketdə requirements.txt adlı bir fayl var. Bu faylı açın; paho-mqtt və pyserial paketlərinin və onların müvafiq versiyalarının tələb olunduğunu görəcəksiniz. Çalışaraq faylın məzmununu görə bilərsiniz
pişik tələbləri.txt. Bu paketləri quraşdırmaq üçün ru
pip install -r tələbləri.txt.
- Bu konfiqurasiyanı tamamlayır.
Python istifadə edən hər bir dərslik Virtual env -dən bəhs edir və hətta bu kiçik layihə üçün də bir qeyd edəcəyəm. Virtual mühitlər, asılılıqların versiyalarını ayırmaqla yanaşı, python iş axınınızı ayırmaq imkanı verir - Python iş yerlərinizi səliqəyə salmağın gözəl bir yoludur. Virtual mühitdən ilk dəfə istifadə edirsinizsə, burada qısa oxuyun.
Kod nə edir…
Client.py faylı, öz arduinosensorumuz da daxil olmaqla sadə bir kitabxana dəsti idxal edəcək. Əsas funksiyada Arduinodan dəyərləri alacağıq, məlumatları MQTT brokerində dərc edəcəyik və sonra 10 saniyə yatacağıq.
Arduinosensor.py faylı, paho.mqtt kitabxanasını əhatə edən və Arduino yükü ilə əlaqə qurmaq üçün faydalı bir əlaqə sxemini təmin edən bir çox köməkçi üsullar toplusudur (bax: parse_payload). Əlbəttə ki, kod bu hissənin sonunda əlavə olunur.
Arduino elementi ilə Serial monitor vasitəsilə əlaqə quran sadə bir müştəri. Açıq olduqda kodu burada tapmağı gözləyin:
fromimportlibimportimport_module |
idxal |
idxal vaxtı |
imparduinosensor |
defmain (): |
# açıq müştəri |
start_time = time.time () |
whileTrue: |
oxu = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0")) |
arduinosensor.pub ("python_client", faydalı yük = oxu) |
vaxt.yuxu (10.0- ((time.time () -start_time) %10.0)) |
if_ adı _ == "_ ana_": |
əsas () |
GitHub tərəfindən ❤ ilə evlənən rawclient.py faylına baxın
Addım 5: Hamısını bir araya gətirmək
Raspberry Python kodunu qurduq və Arduino müştəri kodunu qurduq. Hər iki varlığı bir -birinə bağlamağa davam edək.
Əvvəlcə Arduino'yu bağlayaq və düzgün konfiqurasiyanı quraq:
-
Raspberry Pi terminalınızda qaçın
python -m serial.tools.list_ports. Bu, serial ünsiyyətini dəstəkləyən bütün USB portlarını sadalayacaq.
-
İndi Arduino -nu qoşun və Raspberry -nin onu tanıması üçün təxminən 2 saniyə gözləyin. Daxil edin
python -m serial.tools.list_ports bir daha sizə limanları göstərəcək. Əlavə bir siyahının göründüyünü görə bilərsiniz - əgər həqiqətən də belədirsə, bu yeni giriş Arduino -nun qoşulduğu girişdir. Çox güman ki, "/dev/ttyUSB0" olacaq.
-
Python3.7 client.py proqramını işlədərək virtual mühitinizdə python kodunu işləməyə çalışın. Bir neçə saniyə gözləyin (ən çox on) - bir istisna ilə qarşılaşsanız, bu, moruq pi üzərindəki com portumuzun dəyərini dəyişdirməli olacağımız deməkdir. Kodun "Aşağıdakı yük yükləndi: …" ilə başlayan bir xətt yazdığını görürsünüzsə, Grafana ilə son mərhələyə keçməyiniz yaxşı olar. İpucu: qaçdığınızdan əmin olun
ekran -Python python müştəri başlamazdan əvvəl, əks halda, moruq pi ilə əlaqənizi kəsdiyiniz zaman çalışan python proqramınızı itirəcəksiniz. Texniki olaraq, son parametr olaraq "python" dan ciddi şəkildə istifadə etməyinizə ehtiyac yoxdur, amma buna uyğun olaraq ekran sessiyalarımı adlandırmağı sevirəm.
-
COM portunun dəyərini dəyişdirmək üçün kodu işə salmadan əvvəl bir mühit dəyişənini təyin etməlisiniz. Python -m serial.tools.list_ports ilə işləyərkən əldə etdiyiniz hər bir mümkün dəyər üçün bunu sınamalı olacaqsınız. Məsələn, əldə etdiyim girişlərin miqdarı ikidirsə və bunlar aşağıdakılardır:
- /dev/ttyUSB6
- /dev/acm0
-
sonra işlədəcəyim əmrlər belə olacaq:
PORT = "/dev/ttyUSB6" python3.7 client.pyvə bu işləməsəydi, sonradan məhv edərdim
PORT = "/dev/acm0" python3.7 client.py
Bu addımları tamamladıqdan sonra, kod Grafana -ya qoşulduqda tablosumuza baxmağımıza imkan verəcək məlumatları fluxdb verilənlər bazası nümunəmizə bağlayacaq.
Addım 6: Grafana Konfiqurasiyası və Tablosuna Baxış
Pekala, indi son mərhələdəyik! İndi sadə bir tablosu yaratmaq üçün Grafana'dan istifadə edəcəyik.
- Grafana instansiyanıza qoşulun. Orijinal dzone məqaləsindəki addımları izlədiyiniz üçün idarəçi istifadəçinizlə daxil ola bilməlisiniz. Davam edin və daxil olun.
- Sol bölmədə, "tablosuna" işarəsinin - dörd kvadratın üzərinə gedin. "İdarə et" düyməsini basın.
- Yeni səhifədə "Yeni Tablosuna" vurun. Əlavə olaraq "Yeni panel əlavə et" düyməsini basın.
-
Bu, Grafana redaktorunu açır. Tək bir metri göstərən sadə bir görünüş yaradacağıq.
- Sağ bölmədə panelin adını "Mətbəx Oxumaları" kimi mənalı bir şeyə dəyişdirin. İsteğe bağlı bir Təsvir də daxil edə bilərsiniz.
- Sol altda, "Sorğu", tək bir zaman seriyası əlavə edəcəyik. Grafana həqiqətən burada parlayır, çünki klik əsaslı bir interfeys ilə SQL ifadələrini asanlıqla yarada bilərik. "Varsayılan" altında InfluxDB seçin.
- İndi "A" oxumaq üçün - FROM bəndində "airtestt" ölçüsünü seçin. Arduinosensor.py -nin get_values funksiyasındakı orijinal python koduna baxsanız, bu airtestt cədvəlini kod daxilində təyin etdiyimizi görəcəksiniz.
- Nümunə üçün "SEÇ" maddəsinə gedək və sahəni (mq4) seçək. Əvvəlcə tablosumuz bizə "ortalama ()" seçimini verəcək - bu seçimi vurun və "Sil" seçin. sonra artı işarəsini vurun və "Toplama" altında "fərqli ()" seçin. Bu, xüsusi vaxt nöqtələrini göstərəcəkdir. Digər tədbirləri seçə bilərik, amma hələlik panelimiz mq4 -dən fərqli oxunuşlar göstərəcək.
- Sağ üstdəki Saxla düyməsini basın və işiniz bitdi!
Bir problemlə qarşılaşsanız, əlavə edilmiş ekran görüntüsündə olanlar ilə parametrlərinizi yoxlaya bilərsiniz.
Addım 7: Bitirin
Bu dərslikdə tək bir qovşaq və brokerdən ibarət möhkəm bir MQTT şəbəkəsi qura bildiniz. Grafana istifadə edərək IOT məlumatlarınızı da görüntüləyə bildiniz. Nəhayət, bir SSH bağlantısı istifadə edərək brauzerinizin və kompüterinizin rahatlığından bu sadə sistem arxitekturasını tərtib edə bildiniz.
Təkmilləşdirmək istədiyimiz bəzi şeylər var.
- Qrafikimizdəki sensor oxunuşları əslində dəqiq sensor oxunuşları deyil - bunlar sensorumuzdan çıxan gərginlikdir. Kalibrlənməlidirlər, daha ətraflı məlumat üçün bu blog yazısına müraciət edin.
- Bizim moruq pi konfiqurasiyamızı arduino ilə əlaqəli bir ESP8266 lövhəsi istifadə edərək və pi -ni tamamilə silməklə daha da yüngülləşdirmək olar. ESP8266 modulu ilə tanış olun.
- Xüsusi hadisələr üçün xəbərdarlıqlar əlavə etmək istəyə bilərik. Şükürlər olsun ki, Grafana bunu etmək üçün bir yol təqdim edir.
Təsəvvürünüzü IOT dünyasına cəlb etmək üçün bir az daha oxu buraxacağam. Növbəti təlimatda sizi görmək üçün səbirsizliklə gözləyirəm!
Əlavə oxunuşlar:
Tövsiyə:
Arduino istifadə edərək İnternetdən istifadə edərək bütün dünyanı idarə et: 4 addım
Arduino istifadə edərək İnternetdən istifadə edərək bütün dünyanı idarə et: Salam, mən Rithikəm. Telefonunuzdan istifadə edərək internetə nəzarət edən bir led quracağıq. Arduino IDE və Blynk kimi proqramlardan istifadə edəcəyik. Bu çox sadədir və uğur qazansanız istədiyiniz qədər elektron komponenti idarə edə bilərsiniz
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək sürətlənməni izləyin: 6 addım
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək Sürətləndirməni izləyin: Sürətləndirmə sonsuzdur, düşünürəm ki, Fizikanın bəzi qanunlarına görə. Sahilə çıxan ən sürətli məxluq, bir anda ən yüksək sürətindən istifadə edərək ovunu tutur
Hava keyfiyyətini ölçün: 17 addım
Hava Keyfiyyətini Ölçün: Hava keyfiyyəti və incə hissəciklər: Asılmış hissəciklər ("hissəcikli maddələr" üçün "PM" ilə ifadə olunur) ümumiyyətlə hava tərəfindən daşınan incə bərk hissəciklərdir (Vikipediya). İncə hissəciklər ağciyərlərə dərin nüfuz edir. Səbəb ola bilərlər
NodeMCU istifadə edərək robotu izləyin: 4 addım
NodeMCU istifadə edərək məni izləyin: NodeMCU istifadə edərək məni izləyin çox sadə bir robotdur. Yaxınlıqdakı obyekti/ insanı hiss etmək üçün NodeMCU HC SR04 Məsafə Sensorundan istifadə edir. Obyekti/ İnsanı aşkar etdikdə təqib etməyə başlayacaq
Raspberry Pi və Weewx istifadə edərək Acurite 5 -də 1 Hava İstasyonu (digər Hava İstasyonları Uyğundur): 5 Addım (Şəkillərlə)
Raspberry Pi və Weewx istifadə edərək Acurite 5 -də 1 Hava İstasyonu (digər Hava İstasyonları Uyğundur): Acurite 5 -i 1 hava stansiyasından alanda evdən kənarda olduğum zaman havanı yoxlamaq istəyirdim. Evə gəlib qurduqda ya ekranı kompüterə bağlamalı olduğumu, ya da ağıllı mərkəzini almalı olduğumu başa düşdüm