Daftar Isi:

Lacak Kualitas Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah
Lacak Kualitas Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah

Video: Lacak Kualitas Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah

Video: Lacak Kualitas Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah
Video: Quick Guide to using ADSBexchange Radar website to track Military Aircraft etc in 2021 26aug21 2024, November
Anonim
Lacak Kualitas Udara Menggunakan Grafana dan Raspberry Pi
Lacak Kualitas Udara Menggunakan Grafana dan Raspberry Pi

Saya sedang mencari proyek IOT kecil dan seorang teman merekomendasikan saya untuk melihat tutorial ini:

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

Saya sangat merekomendasikan mengikuti tutorial untuk mengikuti dalam menyiapkan Raspberry Pi untuk pemantauan. Tutorial ini akan menyelesaikan langkah lebih lanjut dalam desain perangkat IoT sederhana yang memungkinkan toleransi kesalahan yang tinggi, serta seberapa berguna Raspberry Pi saat dipasangkan dengan Arduino.

Saya juga membahas efektivitas dan keterbatasan model sensor udara MQ*. Sensor MQ* murah dan cukup efektif, serta sangat mudah disiapkan.

Secara keseluruhan, ini akan membantu Anda untuk memulai menghubungkan Arduino ke internet dengan cara yang paling sederhana, dan menetapkan cara untuk menggunakan modul footprint yang lebih ringan (re: ESP8266).

Selamat bersenang-senang!

Langkah 1: Peralatan + Pengaturan

Peralatan

  • Raspberry Pi dengan Raspbian diinstal
  • Catu daya Raspberry Pi
  • Arduino Uno/Setara
  • USB pria ke pria tipe B ke Tipe A (harus disertakan dengan Arduino Anda)
  • Setiap sensor MQ* (saya menggunakan MQ-2, 4, 5, dan 135)
  • Berbagai macam kabel jumper
  • papan tempat memotong roti mini

Mempersiapkan

Tutorial ini dimaksudkan sebagai pengantar yang lembut untuk menggunakan Arduino dan Raspberry Pi - ini akan membantu untuk mengetahui cara menggunakan terminal linux. Namun, saya tidak menganggap banyak pengalaman dengan bekerja di Arduino atau Raspberry Pi - yang Anda butuhkan hanyalah peralatan yang disediakan dan sikap ingin tahu.

  • Anda harus menyelesaikan langkah-langkah dalam tutorial ini.
  • Saya sarankan Anda menggunakan Secure Shell (SSH) untuk berinteraksi dengan Raspberry Pi, karena ini memungkinkan Anda untuk memasukkan perintah dengan mudah. Menghubungkan melalui SSH berbeda apakah Anda menggunakan Windows, Linux atau Mac. Linux dan Mac cukup mudah digunakan dalam hal ssh (perintah untuk membuka SSH secara harfiah adalah ssh). Lihat Putty untuk Windows. Saya sarankan Anda memeriksa layar sebagai cara untuk mempertahankan sesi Anda selama proyek.
  • Anda juga perlu menginstal Python di Raspbian. Ketika saya menyelesaikan langkah-langkah ini, saya membuat salinan kartu SD lama yang saya miliki dari proyek sebelumnya, yang sudah menginstal Python. Jika distribusi NOOBS/Raspbian Anda tidak memiliki Python 3.7 atau lebih tinggi, lihat langkah-langkah ini untuk mengkompilasi Python dari sumber.
  • Kenali git dan instal jika belum diinstal di distribusi Raspbian Anda.

Langkah 2: Menyiapkan Sirkuit

Menyiapkan Sirkuit
Menyiapkan Sirkuit

Ada satu sirkuit yang harus Anda atur di Arduino.

Saya telah menyediakan skema yang dapat Anda gunakan sebagai referensi.

Keindahan dari semua sensor gas MQ-* adalah setelah koneksi 5 Volt dan Ground dibuat, resistansi input pin analog Arduino memungkinkan sensor bekerja dengan benar.

Berhati-hatilah untuk memastikan bahwa koneksi Analog dari papan breakout di sensor terhubung ke Arduino dan bukan koneksi digital. Jika Anda menghadapi rentang nilai yang sangat sempit saat pengujian, saya sarankan Anda memeriksa koneksi Anda di sini terlebih dahulu.

Langkah 3: Kode Arduino dan Flashing

Pada langkah berikut ini, kita akan menghubungkan papan Arduino ke Raspberry Pi. Sebelum kita melakukan ini, kita perlu mem-flash Arduino dengan kode untuk membaca sensor serta mengirimkan data sensor ke Raspberry Pi. Ini dapat dilakukan dengan cara apa pun yang biasanya Anda lakukan dengan memasukkan kode ke Arduino. Saya menggunakan alat pihak ketiga selain Arduino IDE - karenanya, saya menyertakan perpustakaan Arduino di bagian atas. Ini tidak diperlukan untuk proyek lain.

Periksa kode untuk menyalin/menempel di akhir bagian ini.

Apa yang dilakukan kode?

Kode diatur untuk mendapatkan data dari empat sensor yang berbeda - jika Anda menggunakan jenis sensor yang berbeda, akan masuk akal untuk mengubah penamaan pada sinyal output yang dikirim dari port Serial.

Dalam loop kami memeriksa apakah Raspberry Pi meminta data dari kami. Oleh karena itu, kami menggunakan konfigurasi Master/Slave yang sangat sederhana di mana Raspberry Pi akan terus meminta data ke Arduino. Ini jauh lebih sederhana daripada memiliki penghitung dalam kode Arduino karena lebih mudah untuk menguji nilai apa yang bekerja dari Raspberry Pi, daripada harus mem-flash nilai baru ke Arduino.

Arduino, setelah menerima permintaan data, akan memformat output sebagai parameter GET - ini terkait dengan metode HTTP dan hanya merupakan pilihan desain. Jika Anda mendesain skema komunikasi dari Arduino melalui Port Serial, Anda dapat dengan mudah menggunakan yang lain, selama Anda mendesainnya sehingga data dapat dipisahkan secara wajar. Saya memilih GET karena familiar dan kuat.

Tes sederhana…

Setelah Arduino di-flash dan kode berjalan, buka Serial Monitor Arduino IDE. Jika Anda mengirim satu karakter "H" (pastikan modalnya!), Anda akan mendapatkan muatan data. Selamat, berhasil!

Sampel, pengumpul data MQ-* yang tidak sinkron

#termasuk
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int masukByte;
voidsetup() {
pinMode(mq2, INPUT);
pinMode(mq4, INPUT);
pinMode(mq5, INPUT);
pinMode(mq135, INPUT);
Serial.begin(9600);
}
/* valuePrint mencetak nilai untuk label ini.
* Menciptakan efek samping saja.
*/
voidvaluePrint(Label string, pembacaan int) {
Serial.print(label);
Serial.print("=");
Serial.print(membaca);
}
batal () {
// lihat apakah ada data serial yang masuk:
if (Serial.available() >0) {
// baca byte tertua di buffer serial:
// "Ketika Anda memanggil Serial.read, satu byte dihapus dari buffer penerima dan dikembalikan ke kode Anda"
masukByte = Serial.read();
// jika itu adalah huruf kapital H (ASCII 72), baca nilainya dan kirimkan ke host raspberry.
// TODO: pastikan pesan selalu sama panjangnya, setiap kali
if (Byte masuk == 72) {
int mq2Membaca = analogBaca(mq2);
int mq4Membaca = analogBaca(mq4);
int mq5Membaca = analogBaca(mq5);
int mq135Membaca = analogBaca(mq135);
Serial.print("?");
nilaiCetak("mq2", mq2Membaca);
Serial.print("&");
nilaiPrint("mq4", mq4Membaca);
Serial.print("&");
nilaiCetak("mq5", mq5Membaca);
Serial.print("&");
nilaiPrint("mq135", mq135Membaca);
Serial.print("\n");
}
}
// baca serial hanya setiap detik
penundaan (1000);
}

lihat rawmain.cpp dihosting dengan ❤ oleh GitHub

Langkah 4: Kode Raspberry Pi

Sekarang Anda telah mengonfigurasi Raspberry Pi sesuai https://dzone.com/articles/raspberry-pi-iot-sensor…, Anda sekarang dapat menjalankan kode Klien Raspberry yang akan mengirim data melalui MQTT ke database kami, yang juga menghubungkan ke Grafana.

  1. Pastikan raspberry Anda terhubung ke internet dan kemudian lakukan perintah git clone untuk menyalin seluruh kode ke Raspberry Pi. Perintah Anda akan terlihat sedikit seperti:

    git clone

  2. Di dalam terminal raspberry Pi, lakukan perintah change directory (cd) menjadi "raspberry_client":

    cd raspberry_client.

  3. Anda perlu menggunakan lingkungan virtual*. Sederhana. Lari

    python3 -m venv env. Ini akan membuat lingkungan virtual yang disebut "env" yang akan kita gunakan untuk menginstal dependensi.

  4. Sekarang, kita perlu memasuki lingkungan virtual kita. Lari:

    sumber env/bin/aktifkan. Anda sekarang siap untuk menginstal dependensi proyek.

  5. Dalam paket yang baru saja Anda kloning ada file bernama requirements.txt. Buka file ini; Anda akan melihat bahwa kami memerlukan paket paho-mqtt dan pyserial, serta versinya masing-masing. Anda dapat melihat isi file dengan menjalankan

    persyaratan kucing.txt. Untuk menginstal paket-paket ini, ru

    pip install -r requirements.txt.

  6. Ini menyelesaikan konfigurasi.

Secara harfiah setiap tutorial yang menggunakan python menyebutkan Virtual env, dan bahkan untuk proyek kecil ini, saya akan menyebutkannya. Lingkungan virtual memungkinkan Anda untuk memisahkan versi dependensi, serta memisahkan alur kerja python Anda - Ini cara yang bagus untuk merapikan ruang kerja Python Anda. Jika ini adalah pertama kalinya Anda menggunakan lingkungan virtual, bacalah secara singkat di sini.

Apa yang dilakukan kode…

File client.py akan mengimpor satu set pustaka sederhana termasuk arduinosensor kita sendiri. Dalam fungsi utama, kita akan mendapatkan nilai dari Arduino, mempublikasikan data ke broker MQTT, dan kemudian tidur selama 10 detik.

File arduinosensor.py adalah seperangkat metode pembantu yang membungkus pustaka paho.mqtt, serta menyediakan beberapa skema komunikasi yang berguna untuk berkomunikasi dengan muatan Arduino (lihat: parse_payload). Tentu saja, kode dilampirkan di akhir bagian ini.

Klien sederhana yang berkomunikasi dengan item arduino melalui monitor Serial. Harapkan untuk menemukan kode di sini saat go public:

fromimportlibimportimport_module
impor
waktu impor
importarduinosensor
defmain():
# buka klien yang ditentukan
start_time=waktu.waktu()
sementara Benar:
membaca=arduinosensor.get_values(os.environ.get('PORT', "/dev/ttyUSB0"))
arduinosensor.pub("python_client", payload=membaca)
time.sleep(10.0- ((time.time() -start_time) %10.0))
if_name_=="_main_":
utama()

lihat rawclient.py dihosting dengan ❤ oleh GitHub

Langkah 5: Menyatukan Semuanya

Kami telah menyiapkan kode Raspberry Python, dan kami telah menyiapkan kode klien Arduino. Mari kita beralih ke menghubungkan kedua entitas bersama-sama.

Pertama, mari kita hubungkan Arduino dan atur konfigurasi yang benar:

  1. Di terminal Raspberry Pi Anda, jalankan

    python -m serial.tools.list_ports. Ini akan mencantumkan semua port USB yang mendukung komunikasi serial.

  2. Sekarang, colokkan Arduino Anda dan tunggu sekitar 2 detik hingga Raspberry mengenalinya. Mengetik

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

  3. Coba jalankan kode python dalam lingkungan virtual Anda dengan menjalankan python3.7 client.py. Tunggu beberapa detik (paling lama sepuluh) - jika Anda menghadapi pengecualian, ini berarti kami harus mengubah nilai untuk port com kami di raspberry pi. Jika Anda melihat bahwa kode tersebut mencetak baris yang dimulai dengan "Sent following payload:…" Kemudian, Anda dapat melanjutkan ke langkah terakhir dengan Grafana. Kiat: pastikan untuk berlari

    layar -S python sebelum Anda memulai klien python, jika tidak, saat Anda mengakhiri koneksi ke raspberry pi Anda, Anda akan kehilangan program python yang sedang berjalan. Secara teknis, Anda tidak perlu secara ketat menggunakan "python" sebagai parameter terakhir, tetapi saya suka menamai sesi layar saya dengan tepat.

    1. Untuk mengubah nilai port COM, Anda harus mengatur variabel lingkungan sebelum menjalankan kode. Anda harus mencoba ini untuk setiap kemungkinan nilai keluaran yang Anda dapatkan saat menjalankan python -m serial.tools.list_ports. Misalnya, jika jumlah entri yang saya peroleh adalah dua, dan berikut ini:

      • /dev/ttyUSB6
      • /dev/acm0

maka perintah yang saya jalankan adalah:

PORT="/dev/ttyUSB6" python3.7 client.py, dan jika itu tidak berhasil, saya kemudian akan ru

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

Setelah Anda menyelesaikan langkah-langkah ini, kode akan memasukkan data ke instance database influxdb kami yang, ketika terhubung ke Grafana, akan memungkinkan kami untuk melihat dasbor kami.

Langkah 6: Konfigurasi Grafana dan Tampilan Dasbor

Konfigurasi Grafana dan Tampilan Dasbor
Konfigurasi Grafana dan Tampilan Dasbor

Baiklah, kita sekarang berada di peregangan terakhir! Sekarang kita akan menggunakan Grafana untuk membuat dashboard sederhana.

  1. Hubungkan ke instance Grafana Anda. Karena Anda mengikuti langkah-langkah dari artikel dzone asli, Anda seharusnya dapat masuk dengan pengguna administrator Anda. Silakan dan masuk.
  2. Di panel kiri, arahkan kursor ke ikon "dasbor" - empat kotak. Klik "Kelola".
  3. Di halaman baru, klik "Dasbor Baru". Selanjutnya, klik "Tambahkan panel baru".
  4. Ini akan membuka editor Grafana. Kami akan membuat tampilan sederhana yang menunjukkan satu metrik.

    1. Di panel kanan, ubah judul panel menjadi sesuatu yang bermakna, seperti "Bacaan Dapur". Anda juga dapat memasukkan Deskripsi opsional.
    2. Di kiri bawah, "Kueri", kami akan menambahkan satu deret waktu. Grafana benar-benar bersinar di sini karena kita dapat dengan mudah membuat pernyataan SQL dengan antarmuka berbasis klik. Di bawah "default", pilih InfluxDB.
    3. Sekarang, untuk membaca "A" - dalam klausa FROM, pilih pengukuran "airtestt". Jika Anda melihat kode python asli di fungsi get_values dari arduinosensor.py, Anda akan melihat bahwa kami mendefinisikan tabel airtestt ini di dalam kode.
    4. Sebagai contoh, mari kita pergi ke klausa "SELECT" dan pilih field(mq4). Awalnya dasbor kami akan memberi kami pilihan "mean ()" - klik pilihan ini dan pilih "Hapus". kemudian, klik pada tanda plus dan, di bawah "Agregasi" pilih "berbeda ()". Ini akan menunjukkan titik waktu tertentu. Kami dapat memilih ukuran lain tetapi untuk saat ini, panel kami akan menunjukkan pembacaan yang berbeda dari mq4.
    5. Klik Simpan di kanan atas, dan selesai!

Jika Anda mengalami masalah, Anda dapat memverifikasi pengaturan Anda dengan yang ada di tangkapan layar terlampir.

Langkah 7: Selesaikan

Bungkus
Bungkus

Dalam tutorial ini Anda dapat mengatur jaringan MQTT yang kuat yang terdiri dari satu node dan broker. Anda juga dapat memvisualisasikan data IoT Anda menggunakan Grafana. Terakhir, Anda dapat menyusun arsitektur sistem sederhana ini dari (semoga) kenyamanan browser dan PC Anda melalui penggunaan koneksi SSH.

Ada beberapa hal yang mungkin ingin kami perbaiki.

  • Pembacaan sensor dalam grafik kami sebenarnya bukan pembacaan sensor yang akurat - itu adalah tegangan keluaran dari sensor kami. Mereka perlu dikalibrasi, lihat posting blog ini untuk lebih jelasnya.
  • Konfigurasi raspberry pi kami dapat dibuat jauh lebih ringan dengan menggunakan papan ESP8266 yang terhubung ke arduino, dan menghapus pi sepenuhnya. Lihat pengantar modul ESP8266.
  • Kami mungkin ingin menambahkan peringatan untuk acara tertentu. Untungnya, Grafana menawarkan cara untuk melakukan itu.

Saya akan meninggalkan beberapa bacaan lebih lanjut untuk memikat imajinasi Anda dengan dunia IoT. Saya berharap dapat melihat Anda di instruksi berikutnya!

Bacaan lebih lanjut:

Direkomendasikan: