Isi kandungan:

Jejak Kualiti Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah
Jejak Kualiti Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah

Video: Jejak Kualiti Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah

Video: Jejak Kualiti Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah
Video: Руководство по Grafana 101: интерактивность, создание шаблонов и обмен информацией 2024, Julai
Anonim
Jejak Kualiti Udara Menggunakan Grafana dan Raspberry Pi
Jejak Kualiti Udara Menggunakan Grafana dan Raspberry Pi

Saya mencari projek IOT kecil dan seorang rakan mengesyorkan saya melihat tutorial ini:

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

Saya sangat mengesyorkan mengikuti tutorial untuk diikuti dalam menyiapkan Raspberry Pi untuk pemantauan. Tutorial ini akan melengkapkan langkah selanjutnya dalam reka bentuk peranti IoT sederhana yang memungkinkan toleransi ralat yang tinggi, serta betapa bergunanya Raspberry Pi ketika dipasangkan dengan Arduino.

Saya juga melihat keberkesanan dan sedikit had model MQ * sensor udara. Sensor MQ * murah dan cukup berkesan, dan sangat senang dipasang.

Secara keseluruhan ini akan membantu anda untuk memulakan penyambungan Arduino ke internet dengan cara semudah mungkin, dan menetapkan cara untuk menggunakan modul jejak kaki yang lebih ringan (semula: ESP8266).

Berseronok!

Langkah 1: Peralatan + Persediaan

Peralatan

  • Raspberry Pi dengan Raspbian dipasang
  • Bekalan kuasa Raspberry Pi
  • Arduino Uno / Setaraf
  • Lelaki hingga lelaki USB jenis B hingga Jenis A (harus disertakan dengan Arduino anda)
  • Mana-mana sensor MQ * (saya menggunakan MQ-2, 4, 5, dan 135)
  • Wayar pelompat pelbagai
  • papan roti mini

Sediakan

Tutorial ini bertujuan sebagai pengenalan yang lembut untuk menggunakan Arduino dan Raspberry Pi - ia akan membantu mengetahui cara menggunakan terminal linux. Namun, saya tidak memerlukan banyak pengalaman dengan mengusahakan Arduino atau Raspberry Pi - yang anda perlukan hanyalah peralatan yang disediakan dan sikap ingin tahu.

  • Anda perlu menyelesaikan langkah-langkah dalam tutorial ini.
  • Saya cadangkan anda menggunakan Secure Shell (SSH) untuk berinteraksi dengan Raspberry Pi, kerana ini membolehkan anda memasukkan perintah dengan mudah. Menyambung melalui SSH berbeza sama ada anda menggunakan Windows, Linux atau Mac. Linux dan Mac cukup mudah digunakan dalam hal ssh (perintah untuk membuka SSH secara harfiah ssh). Lihat Putty untuk Windows. Saya mengesyorkan anda melihat skrin sebagai cara untuk mengekalkan sesi anda semasa projek.
  • Anda juga perlu memasang Python pada Raspbian. Apabila saya menyelesaikan langkah-langkah ini, saya membuat salinan kad SD lama yang saya letakkan dari projek sebelumnya, yang sudah dipasang Python. Sekiranya pengedaran NOOBS / Raspbian anda tidak mempunyai Python 3.7 atau lebih tinggi, lihat langkah-langkah ini untuk menyusun Python dari sumber.
  • Ketahui git dan pasang sekiranya ia belum dipasang dalam pengedaran Raspbian anda.

Langkah 2: Menyiapkan Litar

Menyiapkan Litar
Menyiapkan Litar

Terdapat satu litar yang perlu anda siapkan di Arduino.

Saya telah memberikan skema yang boleh anda gunakan sebagai rujukan.

Keindahan semua sensor gas MQ- * adalah bahawa apabila sambungan 5 Volt dan Ground dibuat, rintangan input pin analog Arduino membolehkan sensor berfungsi dengan betul.

Berhati-hati untuk memastikan bahawa sambungan Analog dari papan pemecah pada sensor disambungkan ke Arduino dan bukan sambungan digital. Sekiranya anda menghadapi rentang nilai yang sangat sempit semasa menguji, saya cadangkan anda memeriksa sambungan anda di sini terlebih dahulu.

Langkah 3: Arduino Code and Flashing

Pada langkah yang berikut, kita akan menghubungkan papan Arduino ke Raspberry Pi. Sebelum melakukan ini, kita perlu memancarkan Arduino dengan kod untuk membaca sensor serta menghantar data sensor ke Raspberry Pi. Ini dapat dilakukan dengan cara apa pun yang biasanya anda tekankan kod ke Arduino. Saya menggunakan alat pihak ketiga selain dari Arduino IDE - oleh itu, saya memasukkan perpustakaan Arduino di bahagian atas. Ini tidak diperlukan untuk projek lain.

Periksa kod yang akan disalin / ditampal di hujung bahagian ini.

Apa yang dilakukan oleh kod

Kod ini disediakan untuk mendapatkan data dari empat sensor yang berbeza - jika anda menggunakan jenis sensor yang berbeza, masuk akal untuk mengubah penamaan pada isyarat output yang dihantar dari port Serial.

Dalam lingkaran kami memeriksa apakah Raspberry Pi meminta data dari kami. Oleh itu, kami menggunakan konfigurasi Master / Slave yang sangat sederhana di mana Raspberry Pi akan terus membuat permintaan ke Arduino untuk mendapatkan data. Ini jauh lebih sederhana daripada mempunyai kaunter dalam kod Arduino kerana lebih mudah untuk menguji nilai apa yang berfungsi dari Raspberry Pi, daripada harus memancarkan nilai baru ke Arduino.

Arduino, setelah menerima permintaan data, akan memformat output sebagai parameter GET - ini berkaitan dengan kaedah HTTP dan hanya merupakan pilihan reka bentuk. Sekiranya anda merancang skema komunikasi dari Arduino melalui Serial Port, anda boleh mencari yang lain dengan mudah, asalkan anda merancangnya sehingga data dapat dipisahkan secara wajar. Saya memilih GET kerana sudah biasa dan mantap.

Ujian mudah…

Setelah Arduino dimuat dan kod berjalan, buka Monitor Serial Arduino IDE. Sekiranya anda menghantar watak tunggal "H" (pastikan modalnya!) Anda akan mendapat muatan data. Tahniah, berjaya!

Contoh, pengumpul data MQ- * yang tidak segerak

#sertakan
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int masukByte;
kekosongan () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/ * valuePrint mencetak nilai untuk label ini.
* Membuat kesan sampingan sahaja.
*/
voidvaluePrint (Label rentetan, bacaan int) {
Cetakan bersiri (label);
Serial.print ("=");
Serial.print (membaca);
}
kekosongan () {
// lihat apakah ada data bersiri yang masuk:
jika (Bersiri. tersedia ()> 0) {
// baca bait tertua dalam penyangga bersiri:
// "Apabila anda memanggil Serial.read byte dikeluarkan dari buffer penerimaan dan dikembalikan ke kod anda"
incomingByte = Serial.read ();
// jika itu adalah modal H (ASCII 72), baca nilainya dan hantarkan ke host raspberry.
// TODO: pastikan mesejnya sama panjangnya setiap masa
jika (masukByte == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
Cetakan bersiri ("?");
valuePrint ("mq2", mq2Membaca);
Cetakan bersiri ("&");
valuePrint ("mq4", mq4Reading);
Cetakan bersiri ("&");
valuePrint ("mq5", mq5Membaca);
Cetakan bersiri ("&");
nilaiPrint ("mq135", mq135Membaca);
Cetakan bersiri ("\ n");
}
}
// baca siri hanya setiap saat
kelewatan (1000);
}

lihat rawmain.cpp dihoskan dengan ❤ oleh GitHub

Langkah 4: Kod Pi Raspberry

Sekarang setelah anda mengkonfigurasi Raspberry Pi mengikut https://dzone.com/articles/raspberry-pi-iot-sensor…, kini anda dapat menjalankan kod Raspberry Client yang akan mengirim data melalui MQTT ke pangkalan data kami, yang juga bersambung dengan Grafana.

  1. Pastikan raspberry anda disambungkan ke internet dan kemudian lakukan perintah git clone untuk menyalin keseluruhan kod ke Raspberry Pi. Perintah anda akan kelihatan seperti:

    klon git

  2. Di dalam terminal raspberry Pi, jalankan arahan direktori perubahan (cd) menjadi "raspberry_client":

    cd raspberry_client.

  3. Anda perlu menggunakan persekitaran maya *. Ringkas. Lari

    python3 -m venv env. Ini akan mewujudkan persekitaran maya yang disebut "env" yang akan kita gunakan untuk memasang pergantungan.

  4. Sekarang, kita perlu memasuki persekitaran maya kita. Jalankan:

    sumber env / bin / aktifkan. Anda kini bersedia untuk memasang pergantungan projek.

  5. Dalam pakej yang baru anda kloning ada fail yang disebut requirements.txt. Buka fail ini; anda akan melihat bahawa kami memerlukan paho-mqtt dan pyserial package, serta versi masing-masing. Anda boleh melihat kandungan fail dengan menjalankan

    keperluan kucing.txt. Untuk memasang pakej ini, ru

    memasang pip -r syarat.txt.

  6. Ini menyelesaikan konfigurasi.

Secara harfiah setiap tutorial yang menggunakan python menyebut Virtual env, dan walaupun untuk projek kecil ini, saya akan membuat sebutan. Persekitaran maya membolehkan anda memisahkan versi kebergantungan, dan juga memisahkan aliran kerja python anda - Ini cara yang baik untuk membersihkan ruang kerja Python anda. Sekiranya ini pertama kalinya anda menggunakan persekitaran maya, bacalah secara ringkas di sini.

Apa yang dilakukan oleh kod itu …

Fail client.py akan mengimport sekumpulan perpustakaan sederhana termasuk arduinosensor kami sendiri. Dalam fungsi utama, kita akan mendapatkan nilai dari Arduino, menerbitkan data ke broker MQTT, dan kemudian tidur selama 10 saat.

Fail arduinosensor.py adalah sekumpulan kaedah pembantu yang membungkus pustaka paho.mqtt, dan juga menyediakan beberapa skema komunikasi yang berguna untuk berkomunikasi dengan muatan Arduino (lihat: parse_payload). Sudah tentu, kodnya dilampirkan pada akhir bahagian ini.

Pelanggan sederhana yang berkomunikasi dengan item arduino melalui Serial monitor. Berharap untuk menemui kod di sini apabila disiarkan secara umum:

dariimportlibimportimport_module
pengimport
masa import
importarduinosensor
defmain ():
# pelanggan yang ditentukan terbuka
start_time = time.time ()
sementara benar:
membaca = arduinosensor.get_values (os.environ.get ('PORT', "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client", muatan = membaca)
time.sleep (10.0- ((time.time () -start_time)% 10.0))
if_name _ == "_ main_":
utama ()

lihat rawclient.py dihoskan dengan ❤ oleh GitHub

Langkah 5: Menggabungkan Semuanya

Kami telah menyediakan kod Raspberry Python, dan kami menyediakan kod pelanggan Arduino. Mari kita teruskan untuk menghubungkan kedua-dua entiti itu bersama.

Pertama, mari sambungkan Arduino dan sediakan konfigurasi yang betul:

  1. Di terminal Raspberry Pi anda, jalankan

    python -m serial.tools.list_ports. Ini akan menyenaraikan semua port USB yang menyokong komunikasi bersiri.

  2. Sekarang, pasangkan Arduino anda dan tunggu sekitar 2 saat untuk Raspberry mengenalinya. Menaip di

    python -m serial.tools.list_ports sekali lagi akan menunjukkan port anda lagi. Anda mungkin melihat penyenaraian tambahan muncul - jika memang demikian, maka entri baru ini adalah entri yang disambungkan oleh Arduino anda. Ini kemungkinan akan menjadi "/ dev / ttyUSB0".

  3. Cuba jalankan kod python dalam persekitaran maya anda dengan menjalankan python3.7 client.py. Tunggu beberapa saat (paling banyak sepuluh) - jika anda menghadapi pengecualian, ini bermakna kita harus menukar nilai untuk port com kita pada raspberry pi. Sekiranya anda melihat bahawa kod tersebut mencetak garis yang bermula dengan "Dikirim setelah muatan: …" Kemudian, anda akan baik untuk meneruskan langkah terakhir dengan Grafana. Petua: pastikan berjalan

    skrin -S python sebelum anda memulakan klien python, jika tidak, apabila anda menamatkan sambungan ke pi raspberry anda, anda akan kehilangan program python yang sedang berjalan. Secara teknikal, anda tidak perlu menggunakan "python" sebagai parameter terakhir, tetapi saya suka menamakan sesi skrin saya dengan sewajarnya.

    1. Untuk mengubah nilai port COM, anda harus menetapkan pemboleh ubah persekitaran sebelum menjalankan kod. Anda mesti mencuba ini untuk setiap nilai output yang anda dapat semasa menjalankan python -m serial.tools.list_ports. Sebagai contoh, jika jumlah penyertaan yang saya perolehi adalah dua, dan berikut:

      • / dev / ttyUSB6
      • / dev / acm0

maka arahan yang akan saya jalankan adalah:

PORT = "/ dev / ttyUSB6" python3.7 client.py, dan jika itu tidak berfungsi, saya akan merosakkan

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

Setelah anda menyelesaikan langkah-langkah ini, kod akan memberikan data ke contoh pangkalan data influxdb kami yang, apabila disambungkan ke Grafana, akan membolehkan kami melihat papan pemuka kami.

Langkah 6: Konfigurasi Grafana dan Paparan Papan Pemuka

Konfigurasi Grafana dan Paparan Papan Pemuka
Konfigurasi Grafana dan Paparan Papan Pemuka

Baiklah, kita kini berada di tahap akhir! Kami sekarang akan menggunakan Grafana untuk membuat papan pemuka ringkas.

  1. Sambung ke contoh Grafana anda. Oleh kerana anda mengikuti langkah-langkah dari artikel dzone yang asal, anda seharusnya dapat log masuk dengan pengguna pentadbir anda. Teruskan dan log masuk.
  2. Di panel kiri, arahkan kursor ke ikon "papan pemuka" - empat petak. Klik pada "Urus".
  3. Di halaman baru, klik "Papan Pemuka Baru". Selanjutnya, klik "Tambah panel baru".
  4. Ini membuka editor Grafana. Kami akan membuat paparan ringkas yang menunjukkan satu metrik.

    1. Di panel kanan, ubah tajuk panel menjadi sesuatu yang bermakna, seperti "Bacaan Dapur". Anda juga boleh memasukkan Huraian pilihan.
    2. Di kiri bawah, "Pertanyaan", kami akan menambahkan satu siri masa. Grafana benar-benar bersinar di sini kerana kami dapat membuat pernyataan SQL dengan mudah dengan antara muka berdasarkan klik. Di bawah "lalai", pilih InfluxDB.
    3. Sekarang, untuk membaca "A" - dalam klausa FROM, pilih pengukuran "airtestt". Sekiranya anda melihat kod python asal dalam fungsi get_values arduinosensor.py, anda akan melihat bahawa kita menentukan jadual ujian udara ini dalam kod tersebut.
    4. Sebagai contoh, mari kita pergi ke klausa "PILIH" dan pilih bidang (mq4). Pada asalnya papan pemuka kami akan memberi kami pilihan "mean ()" - klik pada pilihan ini dan pilih "Buang". kemudian, klik pada tanda tambah dan, di bawah "Gabungan" pilih "berbeza ()". Ini akan menunjukkan titik waktu tertentu. Kami boleh memilih langkah lain tetapi buat masa ini, panel kami akan menunjukkan bacaan yang berbeza dari mq4.
    5. Klik Simpan di sebelah kanan atas, dan anda sudah selesai!

Sekiranya anda menghadapi masalah, anda dapat mengesahkan tetapan anda dengan yang ada di tangkapan skrin yang dilampirkan.

Langkah 7: Selesaikan

Kemaskan
Kemaskan

Dalam tutorial ini, anda dapat menubuhkan rangkaian MQTT yang kuat yang terdiri daripada satu nod dan broker. Anda juga dapat memvisualisasikan data IOT anda menggunakan Grafana. Terakhir, anda dapat menyusun seni bina sistem mudah ini dari (semoga) keselesaan penyemak imbas dan PC anda melalui penggunaan sambungan SSH.

Terdapat beberapa perkara yang mungkin ingin kita perbaiki.

  • Bacaan sensor dalam grafik kami sebenarnya bukan bacaan sensor yang tepat - ia adalah voltan keluaran dari sensor kami. Mereka perlu dikalibrasi, rujuk catatan blog ini untuk maklumat lebih lanjut.
  • Konfigurasi raspberry pi kami dapat dibuat lebih ringan dengan menggunakan papan ESP8266 yang disambungkan ke arduino, dan mengeluarkan pi sepenuhnya. Lihat pengenalan modul ESP8266.
  • Kami mungkin mahu menambahkan makluman untuk acara tertentu. Syukurlah, Grafana menawarkan cara untuk melakukannya.

Saya akan meninggalkan bacaan lebih lanjut untuk menarik imajinasi anda dengan dunia IOT. Saya tidak sabar untuk melihat anda dalam arahan seterusnya!

Bacaan selanjutnya:

Disyorkan: