Mündəricat:

Grafana və Raspberry Pi istifadə edərək hava keyfiyyətini izləyin: 7 addım
Grafana və Raspberry Pi istifadə edərək hava keyfiyyətini izləyin: 7 addım

Video: Grafana və Raspberry Pi istifadə edərək hava keyfiyyətini izləyin: 7 addım

Video: Grafana və Raspberry Pi istifadə edərək hava keyfiyyətini izləyin: 7 addım
Video: Supervised Home Assistant. RaspiOS 64-də asan quraşdırma - Argon One M.2 qutusunda Raspberry PI 4B 2024, Noyabr
Anonim
Grafana və Raspberry Pi istifadə edərək hava keyfiyyətini izləyin
Grafana və Raspberry Pi istifadə edərək hava keyfiyyətini izləyin

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ı

Dövrün Qurulması
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.

  1. 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

  2. Raspberry Pi terminalında, "raspberry_client" olaraq qovluq əmrini (cd) yerinə yetirin:

    cd raspberry_client.

  3. 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.

  4. İ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.

  5. 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.

  6. 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:

  1. 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.

  2. İ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.

  3. 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.

    1. 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ış

Grafana Konfiqurasiyası və Tablosuna Baxış
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.

  1. 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.
  2. Sol bölmədə, "tablosuna" işarəsinin - dörd kvadratın üzərinə gedin. "İdarə et" düyməsini basın.
  3. Yeni səhifədə "Yeni Tablosuna" vurun. Əlavə olaraq "Yeni panel əlavə et" düyməsini basın.
  4. Bu, Grafana redaktorunu açır. Tək bir metri göstərən sadə bir görünüş yaradacağıq.

    1. 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.
    2. 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.
    3. İ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.
    4. 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.
    5. 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

Bitirin
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ə: