İçindekiler:

Grafana ve Raspberry Pi Kullanarak Hava Kalitesini Takip Edin: 7 Adım
Grafana ve Raspberry Pi Kullanarak Hava Kalitesini Takip Edin: 7 Adım

Video: Grafana ve Raspberry Pi Kullanarak Hava Kalitesini Takip Edin: 7 Adım

Video: Grafana ve Raspberry Pi Kullanarak Hava Kalitesini Takip Edin: 7 Adım
Video: Bulunduğunuz Mekanın Hava Kalitesini Ölçün! Hava Kalitesi Ölçüm Cihazı Yapıyoruz 2024, Kasım
Anonim
Grafana ve Raspberry Pi Kullanarak Hava Kalitesini Takip Edin
Grafana ve Raspberry Pi Kullanarak Hava Kalitesini Takip Edin

Küçük bir IOT projesi arıyordum ve bir arkadaşım bu eğiticiye göz atmamı önerdi:

dzone.com/articles/raspberry-pi-iot-sensor…

İzleme için bir Raspberry Pi kurarken takip edilecek öğreticiyi izlemenizi şiddetle tavsiye ederim. Bu eğitim, Arduino ile eşleştirildiğinde bir Raspberry Pi'nin ne kadar yararlı olabileceğinin yanı sıra, yüksek hata toleransına izin veren basit bir IoT cihazının tasarımındaki diğer adımları tamamlayacaktır.

Ayrıca MQ* hava sensörü modellerinin etkinliğine ve bir şekilde sınırlamalarına da giriyorum. MQ* sensörleri ucuzdur ve oldukça etkilidir ve kurulumu çok kolaydır.

Genel olarak bu, bir Arduino'yu internete mümkün olan en basit şekilde bağlamaya başlamanıza yardımcı olacak ve daha hafif ayak izi modülleri kullanmanın yolunu belirleyecektir (re: ESP8266).

İyi eğlenceler!

Adım 1: Ekipman + Kurulum

Teçhizat

  • Raspbian yüklü Raspberry Pi
  • Raspberry Pi güç kaynağı
  • Arduino Uno/Eşdeğeri
  • Erkekten erkeğe USB tip B'den Tip A'ya (Arduino'nuzla birlikte verilmelidir)
  • MQ* sensörlerinden herhangi biri (MQ-2, 4, 5 ve 135'i kullandım)
  • çeşitli atlama telleri
  • mini ekmek tahtası

Kurmak

Bu eğitim, Arduino ve Raspberry Pi kullanımına nazik bir giriş niteliğindedir - linux terminalinin nasıl kullanılacağını bilmenize yardımcı olacaktır. Ancak, Arduino veya Raspberry Pi üzerinde çalışmak konusunda fazla deneyime sahip olduğunu düşünmüyorum - gerçekten ihtiyacınız olan tek şey sağlanan ekipman ve meraklı bir tutum.

  • Bu eğitimdeki adımları tamamlamanız gerekecek.
  • Raspberry Pi ile arayüz oluşturmak için Secure Shell (SSH) kullanmanızı tavsiye ederim, çünkü bu, komutları kolayca girmenizi sağlar. SSH aracılığıyla bağlanmak, Windows, Linux veya Mac kullanmanıza göre farklılık gösterir. Linux ve Mac'in kullanımı ssh açısından oldukça kolaydır (SSH'yi açma komutu kelimenin tam anlamıyla ssh'dir). Windows için Putty'ye göz atın. Proje sırasında oturumunuzu sürdürmenin bir yolu olarak ekranı kontrol etmenizi öneririm.
  • Ayrıca Raspbian'a Python kurmanız gerekecek. Bu adımları tamamladığımda, zaten Python'un kurulu olduğu önceki bir projeden etrafta uzanmış olduğum eski bir SD kartın bir kopyasını çıkardım. NOOBS/Raspbian dağıtımınızda Python 3.7 veya üstü yoksa Python'u kaynaktan derlemek için bu adımlara göz atın.
  • Git ile tanışın ve Raspbian dağıtımınızda kurulu değilse kurun.

Adım 2: Devreyi Kurmak

Devreyi Kurmak
Devreyi Kurmak

Arduino'da kurmanız gereken bir devre var.

Referans olarak kullanabileceğiniz bir şematik sağladım.

Tüm MQ-* gaz sensörlerinin güzelliği, 5 Volt ve Toprak bağlantısı yapıldığında Arduino'nun analog pinlerinin giriş direncinin sensörün doğru şekilde çalışmasını sağlamasıdır.

Sensördeki devre kartından gelen Analog bağlantının dijital bağlantıya değil Arduino'ya bağlı olduğundan emin olun. Test yaparken çok dar bir değer aralığı ile karşılaşıyorsanız öncelikle bağlantınızı buradan kontrol etmenizi öneririm.

Adım 3: Arduino Kodu ve Yanıp Sönme

Bunu takip eden adımda Arduino kartını Raspberry Pi'ye bağlayacağız. Bunu yapmadan önce, sensörü okumanın yanı sıra sensör verilerini Raspberry Pi'ye iletmek için Arduino'ya kod yazmamız gerekiyor. Bu, normalde Arduino'ya kod gönderdiğiniz herhangi bir şekilde yapılabilir. Arduino IDE dışında üçüncü taraf bir araç kullandım - bu nedenle Arduino kütüphanesini en üste ekliyorum. Diğer projeler için bu gerekli değildir.

Bu bölümün sonundaki kopyalanacak/yapıştırılacak kodu kontrol edin.

kod ne işe yarar

Kod, dört farklı sensörden veri alacak şekilde ayarlanmıştır - farklı tipte sensörler kullanıyorsanız, Seri porttan gönderilen çıkış sinyalindeki isimleri değiştirmek mantıklı olacaktır.

Döngüde Raspberry Pi'nin bizden veri isteyip istemediğini kontrol ediyoruz. Bu nedenle, Raspberry Pi'nin sürekli olarak Arduino'dan veri talep edeceği çok basit bir Master/Slave konfigürasyonu kullanıyoruz. Bu, Arduino kodunda bir sayaca sahip olmaktan çok daha basittir çünkü Arduino'ya yeni değerler flaş etmek yerine Raspberry Pi'den hangi değerlerin çalıştığını test etmek daha kolaydır.

Arduino, bir veri talebi aldığında, çıktıyı bir GET parametresi olarak biçimlendirir - bu, HTTP yöntemleriyle ilgilidir ve sadece bir tasarım seçimidir. Arduino'dan Seri Port aracılığıyla bir iletişim şeması tasarlayacak olsaydınız, verileri makul bir şekilde ayıracak şekilde tasarladığınız sürece kolayca başka bir şeye gidebilirsiniz. GET'i tanıdık ve sağlam olduğu için seçtim.

Basit testler…

Arduino yanıp söndükten ve kodu çalıştırdıktan sonra, Arduino IDE'nin Seri Monitörünü açın. Tek karakteri "H" gönderirseniz (sermayesini sağlayın!), veri yükünü alırsınız. Tebrikler, işe yarıyor!

MQ-* verilerinin örnek, asenkron toplayıcısı

#Dahil etmek
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int gelenByte;
voidsetup() {
pinMode(mq2, GİRİŞ);
pinMode(mq4, GİRİŞ);
pinMode(mq5, GİRİŞ);
pinMode(mq135, GİRİŞ);
Seri.başla(9600);
}
/* valuePrint bu etiketin değerini yazdırır.
*Yalnızca yan etkiler yaratır.
*/
voidvaluePrint(Dize etiketi, int okuma) {
Serial.print(etiket);
Seri.print("=");
Serial.print(okuma);
}
boşluk döngüsü() {
// gelen seri veri olup olmadığına bakın:
if (Serial.available() >0) {
// seri arabelleğindeki en eski baytı oku:
// "Serial.read'i çağırdığınızda, alma arabelleğinden bir bayt kaldırılır ve kodunuza döndürülür"
gelenByte = Serial.read();
// büyük H ise (ASCII 72), değerleri okuyun ve ahududu ana bilgisayarına gönderin.
// YAPILACAKLAR: mesajın her seferinde aynı uzunlukta olduğundan emin olun
if (gelenByte == 72) {
int mq2Reading = analogRead(mq2);
int mq4Reading = analogRead(mq4);
int mq5Reading = analogRead(mq5);
int mq135Okuma = analogOkuma(mq135);
Seri.print("?");
valuePrint("mq2", mq2Reading);
Seri.print("&");
valuePrint("mq4", mq4Reading);
Seri.print("&");
valuePrint("mq5", mq5Okuma);
Seri.print("&");
valuePrint("mq135", mq135Okuma);
Seri.print("\n");
}
}
// diziyi sadece her saniye oku
gecikme(1000);
}

GitHub tarafından ❤ ile barındırılan rawmain.cpp'yi görüntüleyin

Adım 4: Raspberry Pi Kodu

Raspberry Pi'yi https://dzone.com/articles/raspberry-pi-iot-sensor… Grafana'ya bağlanır.

  1. Ahududunuzun internete bağlı olduğundan emin olun ve ardından tüm kodu Raspberry Pi'ye kopyalamak için bir git klon komutu uygulayın. Komutunuz biraz şöyle görünecek:

    git klonu

  2. Raspberry Pi'nin terminalinde, "raspberry_client" içine bir dizin değiştirme komutu (cd) uygulayın:

    cd ahududu_client.

  3. Sanal bir ortam kullanmanız gerekecek*. Basit. Çalıştırmak

    python3 -m venv env. Bu, bağımlılıkları kurmak için kullanacağımız "env" adında bir sanal ortam yaratacaktır.

  4. Şimdi sanal ortamımıza girmemiz gerekiyor. Çalıştırmak:

    kaynak ortam/bin/etkinleştir. Artık projenin bağımlılıklarını kurmaya hazırsınız.

  5. Az önce klonladığınız pakette gereksinimler.txt adlı bir dosya var. Bu dosyayı açın; paho-mqtt ve pyserial paketlerine ve bunların ilgili sürümlerine ihtiyacımız olduğunu göreceksiniz. Çalıştırarak dosyanın içeriğini görüntüleyebilirsiniz.

    kedi gereksinimleri.txt. Bu paketleri kurmak için ru

    pip kurulumu -r gereksinimleri.txt.

  6. Bu, yapılandırmayı tamamlar.

Kelimenin tam anlamıyla python kullanan her öğretici, Virtual env'den bahseder ve bu küçük proje için bile bahsedeceğim. Sanal ortamlar, bağımlılık sürümlerini ayırmanıza ve python iş akışınızı ayırmanıza olanak tanır - Python çalışma alanlarınızı düzenlemenin güzel bir yolu. Sanal ortamları ilk kez kullanıyorsanız, burada kısaca okuyun.

kod ne işe yarar…

Client.py dosyası, kendi arduinosensörümüz de dahil olmak üzere basit bir kitaplık kümesini içe aktaracaktır. Ana fonksiyonda, Arduino'dan değerleri alacağız, verileri MQTT brokerine yayınlayacağız ve ardından 10 saniye uyuyacağız.

Arduinosensor.py dosyası, paho.mqtt kitaplığının etrafını saran ve ayrıca Arduino'nun yükü ile iletişim kurmak için bazı yararlı iletişim şemaları sağlayan bir dizi yardımcı yöntemdir (bkz: parse_payload). Tabii ki, kod bu bölümün sonuna eklenmiştir.

Seri monitör aracılığıyla bir arduino öğesiyle iletişim kuran basit bir istemci. Herkese açık olduğunda kodu burada bulmayı bekleyin:

fromimportlibimportimport_module
ithalat
ithalat zamanı
importarduinosensör
tanımla():
# tanımlı istemciyi aç
start_time=time.time()
whileTrue:
okuma=arduinosensor.get_values(os.environ.get('PORT', "/dev/ttyUSB0"))
arduinosensor.pub("python_client", payload=okuma)
time.sleep(10.0- ((time.time() -start_time) %10.0))
if_name_=="_main_":
ana()

GitHub tarafından ❤ ile barındırılan rawclient.py'yi görüntüleyin

Adım 5: Hepsini Bir Araya Getirmek

Raspberry Python kodunu kurduk ve Arduino istemci kodunu kurduk. Her iki varlığı birbirine bağlamaya devam edelim.

İlk önce Arduino'yu bağlayalım ve doğru konfigürasyonu ayarlayalım:

  1. Raspberry Pi terminalinizde çalıştırın

    python -m serial.tools.list_ports. Bu, seri iletişimi destekleyen tüm USB bağlantı noktalarını listeler.

  2. Şimdi Arduino'nuzu takın ve Raspberry'nin tanıması için yaklaşık 2 saniye bekleyin. yazarak

    python -m serial.tools.list_ports bir kez daha size portları gösterecektir. Ek bir listenin göründüğünü görebilirsiniz - gerçekten durum buysa, bu yeni giriş Arduino'nuzun bağlı olduğu giriştir. Bu muhtemelen "/dev/ttyUSB0" olacaktır.

  3. python3.7 client.py'yi çalıştırarak python kodunu sanal ortamınızda çalıştırmayı deneyin. Birkaç saniye bekleyin (en fazla on) - bir istisna ile karşılaşırsanız, bu, ahududu pi üzerindeki com portumuzun değerini değiştirmemiz gerektiği anlamına gelir. Kodun "Gönderilen payload:…" ile başlayan bir satır yazdırdığını görürseniz, Grafana ile son adıma geçmeniz iyi olacaktır. İpucu: çalıştırdığınızdan emin olun

    ekran -S piton python istemcisini başlatmadan önce, aksi takdirde, ahududu pi'nizle bağlantınızı sonlandırdığınızda, çalışan python programınızı kaybedersiniz. Teknik olarak, son parametre olarak kesinlikle "python" kullanmanıza gerek yok, ancak ekran oturumlarımı buna göre adlandırmayı seviyorum.

    1. COM bağlantı noktasının değerini değiştirmek için, kodu çalıştırmadan önce bir ortam değişkeni ayarlamanız gerekecektir. Bunu, python -m serial.tools.list_ports'u çalıştırırken elde ettiğiniz her olası çıktı değeri için denemeniz gerekecek. Örneğin, elde ettiğim girdilerin miktarı ikiyse ve aşağıdakiler olsaydı:

      • /dev/ttyUSB6
      • /dev/acm0

o zaman çalıştıracağım komutlar şöyle olurdu:

PORT="/dev/ttyUSB6" python3.7 client.py, ve eğer bu işe yaramazsa, daha sonra

PORT="/dev/acm0" python3.7 client.py

Bu adımları tamamladığınızda, kod, Grafana'ya bağlandığında panomuzu görüntülememize izin verecek olan influxdb veritabanı örneğimize veri işleyecektir.

Adım 6: Grafana Yapılandırması ve Pano Görüntüleme

Grafana Yapılandırması ve Pano Görüntüleme
Grafana Yapılandırması ve Pano Görüntüleme

Pekala, artık son bölümdeyiz! Şimdi basit bir gösterge tablosu oluşturmak için Grafana'yı kullanacağız.

  1. Grafana örneğinize bağlanın. Orijinal dzone makalesindeki adımları izlediğinizden, yönetici kullanıcınızla oturum açabilmeniz gerekir. Devam edin ve giriş yapın.
  2. Sol bölmede, "gösterge tabloları" simgesinin (dört kare) üzerine gelin. "Yönet" e tıklayın.
  3. Yeni sayfada, "Yeni Gösterge Tablosu"na tıklayın. Ayrıca, "Yeni panel ekle"yi tıklayın.
  4. Bu, Grafana düzenleyicisini açar. Tek bir metriği gösteren basit bir görünüm oluşturacağız.

    1. Sağ bölmede, panel başlığını "Mutfak Okumaları" gibi anlamlı bir şeyle değiştirin. İsteğe bağlı bir Açıklama da girebilirsiniz.
    2. Sol alttaki "Sorgu"da tek bir zaman serisi ekleyeceğiz. Grafana, tıklama tabanlı bir arayüzle kolayca SQL ifadeleri oluşturabildiğimiz için burada gerçekten parlıyor. "Varsayılan" altında, InfluxDB'yi seçin.
    3. Şimdi, "A" okumak için - FROM yan tümcesinde, "airtestt" ölçümünü seçin. arduinosensor.py'nin get_values işlevindeki orijinal python koduna bakarsanız, bu airtestt tablosunu kod içinde tanımladığımızı göreceksiniz.
    4. Bir örnek için, "SELECT" yan tümcesine gidelim ve field(mq4)'ü seçelim. Aslında panomuz bize "ortalama ()" seçeneğini verecektir - bu seçeneğe tıklayın ve "Kaldır"ı seçin. ardından artı işaretine tıklayın ve "Toplamalar" altında "distinct()" öğesini seçin. Bu, belirli zaman noktalarını gösterecektir. Başka önlemler seçebiliriz, ancak şimdilik panelimiz mq4'ten farklı okumalar gösterecektir.
    5. Sağ üstteki Kaydet'e tıklayın ve işiniz bitti!

Sorun yaşamanız durumunda, ekteki ekran görüntüsündekilerle ayarlarınızı doğrulayabilirsiniz.

7. Adım: Tamamlayın

Sarmak
Sarmak

Bu öğreticide, tek bir düğüm ve aracıdan oluşan sağlam bir MQTT ağı kurabildiniz. Ayrıca Grafana'yı kullanarak IOT verilerinizi görselleştirebildiniz. Son olarak, bu basit sistem mimarisini (umarım) tarayıcınızın ve PC'nizin rahatlığından bir SSH bağlantısı kullanarak oluşturabildiniz.

Geliştirmek isteyebileceğimiz bazı şeyler var.

  • Grafiğimizdeki sensör okumaları aslında doğru sensör okumaları değildir - bunlar sensörümüzden gelen çıkış voltajıdır. Kalibre edilmeleri gerekiyor, daha fazla ayrıntı için bu blog gönderisine bakın.
  • Raspberry pi konfigürasyonumuz, arduino'ya bağlı bir ESP8266 kartı kullanılarak ve pi'yi tamamen kaldırarak çok daha hafif hale getirilebilir. ESP8266 modülüne bir girişe göz atın.
  • Belirli olaylar için uyarılar eklemek isteyebiliriz. Neyse ki, Grafana bunu yapmanın bir yolunu sunuyor.

IOT dünyasıyla hayal gücünüzü cezbetmek için biraz daha okuma bırakacağım. Bir sonraki talimatta sizi görmeyi dört gözle bekliyorum!

Daha fazla okuma:

Önerilen: