Daftar Isi:
- Langkah 1: Peralatan + Pengaturan
- Langkah 2: Menyiapkan Sirkuit
- Langkah 3: Kode Arduino dan Flashing
- Langkah 4: Kode Raspberry Pi
- Langkah 5: Menyatukan Semuanya
- Langkah 6: Konfigurasi Grafana dan Tampilan Dasbor
- Langkah 7: Selesaikan
Video: Lacak Kualitas Udara Menggunakan Grafana dan Raspberry Pi: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
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
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.
-
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
-
Di dalam terminal raspberry Pi, lakukan perintah change directory (cd) menjadi "raspberry_client":
cd raspberry_client.
-
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.
-
Sekarang, kita perlu memasuki lingkungan virtual kita. Lari:
sumber env/bin/aktifkan. Anda sekarang siap untuk menginstal dependensi proyek.
-
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.
- 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:
-
Di terminal Raspberry Pi Anda, jalankan
python -m serial.tools.list_ports. Ini akan mencantumkan semua port USB yang mendukung komunikasi serial.
-
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".
-
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.
-
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
Baiklah, kita sekarang berada di peregangan terakhir! Sekarang kita akan menggunakan Grafana untuk membuat dashboard sederhana.
- 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.
- Di panel kiri, arahkan kursor ke ikon "dasbor" - empat kotak. Klik "Kelola".
- Di halaman baru, klik "Dasbor Baru". Selanjutnya, klik "Tambahkan panel baru".
-
Ini akan membuka editor Grafana. Kami akan membuat tampilan sederhana yang menunjukkan satu metrik.
- Di panel kanan, ubah judul panel menjadi sesuatu yang bermakna, seperti "Bacaan Dapur". Anda juga dapat memasukkan Deskripsi opsional.
- 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.
- 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.
- 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.
- 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
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:
Sensor Kualitas Udara Menggunakan Arduino: 4 Langkah
Sensor Kualitas Udara Menggunakan Arduino: Dalam posting ini, kita akan belajar cara membuat sensor kualitas udara yang sederhana namun bermanfaat. Kami akan menggunakan sensor SGP30 bersama dengan Piksey Pico, meskipun sketsa akan bekerja dengan hampir semua papan Arduino yang kompatibel. Video di atas berbicara kepada Anda melalui
Lacak & lacak untuk Toko Kecil: 9 Langkah (dengan Gambar)
Lacak & lacak untuk Toko Kecil: Ini adalah sistem yang dibuat untuk toko kecil yang seharusnya dipasang ke e-bike atau e-skuter untuk pengiriman jarak dekat, misalnya toko roti yang ingin mengantarkan kue kering. Apa yang dimaksud dengan Track and Trace? Track and trace adalah sistem yang digunakan oleh ca
Monitor Kualitas Udara Dengan MQ135 dan Sensor Suhu dan Kelembaban Eksternal Melalui MQTT: 4 Langkah
Monitor Kualitas Udara Dengan MQ135 dan Sensor Suhu dan Kelembaban Eksternal Melalui MQTT: Ini untuk tujuan pengujian
Pemantauan Kualitas Udara Menggunakan Foton Partikel: 11 Langkah (dengan Gambar)
Pemantauan Kualitas Udara Menggunakan Foton Partikel: Dalam proyek ini sensor partikel PPD42NJ digunakan untuk mengukur kualitas udara (PM 2.5) yang ada di udara dengan Foton Partikel. Tidak hanya menampilkan data di Particle console dan dweet.io tetapi juga menunjukkan kualitas udara menggunakan LED RGB dengan mengubahnya
Cubesat Dengan Sensor Kualitas Udara dan Arduino: 4 Langkah
Cubesat Dengan Sensor Kualitas Udara dan Arduino: Pembuat CubeSat: Reghan, Logan, Kate, dan Joan Pendahuluan Pernahkah Anda bertanya-tanya bagaimana cara membuat pengorbit Mars untuk mengumpulkan data tentang atmosfer dan kualitas udara Mars? Sepanjang tahun ini di kelas fisika kami, kami telah belajar bagaimana memprogram A