Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Pembukaan
Artikel ini mendokumentasikan ruggedisation praktis dan pengembangan selanjutnya dari Instructable sebelumnya: 'Pimping' Perangkat WiFi IoT pertama Anda. Bagian 4: IoT, Otomasi Rumah termasuk semua fungsionalitas perangkat lunak yang diperlukan untuk memungkinkan penerapan yang sukses di lingkungan rumah domestik.
pengantar
Seperti disebutkan di atas, Instruksi ini menjelaskan penggabungan contoh IoT sebelumnya dengan desain sistem yang andal yang memungkinkan penanganan kasus penggunaan praktis yang berhasil seperti; Kehilangan daya yang dahsyat, kegagalan MQTT Broker, kegagalan WiFi N/W, konfigurasi ulang sensor jarak jauh, strategi pelaporan yang dapat dikonfigurasi untuk mengurangi lalu lintas jaringan dan kalibrasi sensor yang dipesan lebih dahulu.
Sebanyak 6 perangkat off dibuat (lihat gambar 1 di atas) dan didistribusikan di sekitar rumah saya untuk membentuk jaringan sensor IoT pertama saya.
Instructable juga melihat tinjauan konvensi penamaan MQTT seperti yang digunakan dalam seri IoT Home Automation awal yang memberi jalan pada struktur praktis yang lebih seimbang yang memungkinkan debugging lalu lintas IoT yang lebih sederhana di lingkungan perangkat multi-IoT.
Berikut ini adalah detail desain lengkap dari sensor IoT termasuk; konstruksi, kode sumber, strategi pengujian, dan konfigurasi OpenHAB.
Bagian apa yang saya butuhkan?
- 1 diskon ESP8266-01,
- 2 off 1uF Kapasitor Elektrolit,
- 3 dari resistor 10K,
- 1 dari resistor 330R,
- 1 dari 3mm diameter. LED,
- 1 dari LD1117-33v, 3v3 LDO VReg. (Farnell di sini),
- 1 dari Sensor Suhu / Kelembaban DHT22,
- 1 off Dual 4way 0.1 "Konektor,
- 1 dari CAMDENBOSS RX2008/S-5 Kandang Plastik, Kotak Pot, ABS, 38 mm, 23 mm (Farnell di sini),
- 1 lepas Konektor Daya DC, Steker, 1 A, 2 mm, Pemasangan Panel (Farnell di sini),
- 1 off TO-220 Heatsink 24,4 °C/W (Farnell di sini),
- Berbagai tabung panas menyusut (kuning, Ebay di sini),
- Berbagai panjang kabel pita IDC,
- Senyawa heatsink,
- Veroboard,
- Perangkat pemrograman ESP8266-01. Lihat disini; Konstruksi Sirkuit Praktis dengan Papan Strip, Langkah 9 dan seterusnya.
Perangkat lunak apa yang saya butuhkan?
- Arduino IDE 1.6.9
- Arduino IDE dikonfigurasi untuk memprogram ESP8266-01. Lihat disini; Menyiapkan Arduino IDE untuk Memprogram ESP8266-01
Alat apa yang saya butuhkan?
- besi solder,
- Bor & berbagai bit,
- File,
- Gergaji besi,
- Wakil yang kokoh,
- senapan panas,
- DM.
Keterampilan apa yang saya butuhkan?
- Menguasai elektronik minimal,
- Pengetahuan tentang Arduino dan IDE-nya,
- Keahlian fabrikasi dasar (menyolder, menggergaji, mengarsipkan, mengebor, dll.),
- Beberapa Kesabaran,
- Beberapa pemahaman tentang jaringan rumah Anda.
Topik yang dibahas
- Ikhtisar sirkuit
- Ikhtisar Sistem Perangkat Lunak
- Ikhtisar Perangkat Lunak
- Kalibrasi Sensor
- Konvensi Penamaan Topik MQTT
- Konfigurasi OpenHAB
- Menguji Desain
- Kesimpulan
- Referensi yang Digunakan
Tautan Seri
Untuk Bagian 7: Study Lights Controller (dikerjakan ulang). Bagian 7: IoT, Otomatisasi Rumah
Ke Bagian 9: Pengendali Listrik IoT. Bagian 9: IoT, Otomatisasi Rumah
Langkah 1: Ikhtisar Sirkuit
Gambar 1 di atas menunjukkan desain rangkaian lengkap untuk sensor IoT.
Di jantung perangkat IoT adalah ESP8266-01 yang terhubung ke sensor suhu/kelembaban DHT22 melalui resistor pull up 10K ke GPIO2. 5v eksternal bersumber dengan suplai mode yang diaktifkan dan diumpankan ke perangkat melalui soket pemasangan panel DC 2mm dan diatur secara lokal dengan regulator tegangan LD1117-33v, 3v3 LDO yang dipasang ke unit pendingin eksternal dengan sekrup dan mur kepala pan BZP M3.
Desainnya mencakup led merah 3mm yang terhubung ke GPIO0 yang digunakan untuk memberikan indikasi lokal tentang status perangkat IoT selama start up atau kondisi kesalahan berikutnya. Ini juga dapat digunakan untuk mengidentifikasi perangkat dengan aktivasi manual melalui antarmuka openHAB.
Desain lengkap terpasang rapi ke dalam kotak pot ABS seperti yang ditunjukkan di atas pada gambar 2 dan ditata secara khusus untuk memastikan sensor sejauh mungkin dari regulator untuk mencegah bias karena efek pemanasan lokal (gambar 7 di atas).
Papan sirkuit adalah satu bagian dari veroboard, dipotong sesuai bentuk dan dibuat agar sesuai dengan penutupnya (gambar 3 di atas). Papan ini dipasang pada posisinya dengan sekrup nilon countersunk M3 dan dua mur yang pas dengan bagian bawah sensor, sehingga memungkinkannya untuk duduk di permukaan yang rata.
Gambar 4 … 6 menunjukkan berbagai keadaan konstruksi.
Langkah 2: Ikhtisar Sistem Perangkat Lunak
Perangkat penginderaan suhu dan kelembaban IoT ini berisi enam komponen perangkat lunak utama seperti yang ditunjukkan pada gambar 1 di atas.
SPIFFS
Ini adalah Sistem Pengarsipan Flash SPI on-board dan digunakan untuk menyimpan informasi berikut (lihat gambar 2 di atas);
- Ikon dan html 'Halaman Beranda Konfigurasi Sensor': Dilayani oleh perangkat IoT ketika tidak dapat terhubung ke jaringan WiFi IoT Anda (biasanya karena informasi keamanan yang salah) dan memberi pengguna sarana untuk mengonfigurasi sensor dari jarak jauh tanpa perlu untuk memprogram ulang atau mengunggah konten SPIFFS baru.
- Informasi Keamanan: Ini menyimpan informasi yang digunakan saat dihidupkan oleh perangkat IoT untuk terhubung ke jaringan WiFi IoT dan Pialang MQTT Anda. Informasi yang dikirimkan melalui 'Halaman Beranda Konfigurasi Sensor' ditulis ke file ini ('secvals.txt').
- Informasi Kalibrasi: Informasi yang terkandung dalam file ini ('calvals.txt') digunakan untuk mengkalibrasi sensor suhu/kelembaban on-board jika diperlukan. Konstanta kalibrasi hanya dapat ditulis ke perangkat IoT melalui perintah MQTT dari broker MQTT.
Catatan: Untuk awalnya mengatur perangkat, lihat di sini untuk detail lengkap tentang cara menggunakan SPIFFS dengan Arduino IDE.
Server mDNS
Fungsionalitas ini dipanggil ketika perangkat IoT gagal terhubung ke jaringan WiFi Anda sebagai stasiun WiFi dan sebagai gantinya telah menjadi titik akses WiFi sesuatu yang mirip dengan router WiFi domestik. Dalam kasus router seperti itu, Anda biasanya akan terhubung dengannya dengan memasukkan Alamat IP seperti 192.168.1.1 (biasanya dicetak pada label yang ditempelkan pada kotak) langsung ke bilah URL browser Anda di mana Anda akan menerima halaman login untuk masuk nama pengguna dan kata sandi untuk memungkinkan Anda mengonfigurasi perangkat.
Untuk ESP8266 dalam mode AP (mode Titik Akses) perangkat default ke alamat IP 192.168.4.1, namun dengan server mDNS berjalan Anda hanya perlu memasukkan nama ramah manusia 'SENSORSVR.local' ke dalam bilah URL browser untuk melihat 'Halaman Beranda Konfigurasi Sensor'.
Klien MQTT
Klien MQTT menyediakan semua fungsionalitas yang diperlukan untuk; terhubung ke broker MQTT jaringan IoT Anda, berlangganan topik pilihan Anda dan publikasikan muatan ke topik tertentu. Singkatnya, ini menyediakan fungsionalitas inti IoT.
Server Web
Seperti disebutkan di atas, jika perangkat IoT tidak dapat terhubung ke jaringan WiFi yang SSID, P/W, dll. ditentukan dalam file Informasi Keamanan yang disimpan di SPIFFS, perangkat akan menjadi Titik Akses. Setelah terhubung ke jaringan WiFi yang disediakan oleh Access Point, kehadiran HTTP Web Server memungkinkan Anda untuk langsung terhubung ke perangkat dan mengubah konfigurasinya melalui penggunaan HTTP Web Browser. Tujuannya adalah untuk melayani 'Sensor Configuration Home Halaman web halaman yang juga diadakan di SPIFFS.
Stasiun WiFi
Fungsionalitas ini memberi perangkat IoT kemampuan untuk terhubung ke jaringan WiFi domestik menggunakan parameter dalam file Informasi Keamanan, tanpa ini perangkat IoT Anda tidak akan dapat berlangganan/memublikasikan ke Pialang MQTT
Titik Akses WiFi
Kemampuan untuk menjadi Titik Akses WiFi adalah cara perangkat IoT memungkinkan Anda untuk terhubung dan membuat perubahan konfigurasi melalui stasiun WiFi dan browser (seperti Safari di Apple iPad).
Titik akses ini menyiarkan SSID = "SENSOR" + 6 digit terakhir dari alamat MAC perangkat IoT. Kata sandi untuk jaringan tertutup ini secara imajinatif bernama 'PASSWORD'
Langkah 3: Ikhtisar Perangkat Lunak
PembukaanUntuk berhasil mengkompilasi kode sumber ini, Anda memerlukan pustaka tambahan berikut;
PubSubClient.h
- Oleh: Nick O'Leary
- Tujuan: Memungkinkan perangkat untuk mempublikasikan atau berlangganan topik MQTT dengan Broker tertentu
- Dari:
DHT.h
- Oleh: Adafruit
- Tujuan: Perpustakaan untuk Sensor Suhu/Kelembaban DHT
- Dari:
Ikhtisar Kode
Perangkat lunak ini menggunakan mesin negara seperti yang ditunjukkan pada gambar 1 di atas (salinan lengkap dari sumber yang diberikan di bawah). Ada 5 negara bagian utama seperti di bawah ini;
-
INIT
Status inisialisasi ini adalah status pertama yang dimasukkan setelah power up
-
NOCONFIG
Status ini dimasukkan jika setelah dinyalakan, file secvals.txt yang tidak valid atau hilang terdeteksi
-
TERTUNDA NW
Status ini bersifat sementara, dimasukkan saat tidak ada koneksi jaringan WiFi
- MQTT TERTUNDA
Status ini bersifat sementara, dimasukkan setelah koneksi jaringan WiFi dibuat dan sementara tidak ada koneksi ke broker MQTT di jaringan itu
-
AKTIF
Ini adalah status operasional normal yang dimasukkan setelah koneksi jaringan WiFi dan koneksi MQTT Broker dibuat. Selama keadaan ini, fungsi suhu dan kelembaban sensor dipublikasikan ke MQTT Broker
Peristiwa mengendalikan transisi antar negara dijelaskan dalam gambar 1 di atas. Transisi antar negara bagian juga diatur oleh parameter SecVals berikut;
- Alamat IP Pialang MQTT Pertama. Dalam bentuk desimal bertitik AAA. BBB. CCC. DDD
- Pelabuhan Pialang MQTT ke-2. Dalam bentuk bilangan bulat.
- Koneksi Broker MQTT ke-3 mencoba dilakukan sebelum beralih dari mode STA ke mode AP. Dalam bentuk bilangan bulat.
- SSID Jaringan WiFi ke-4. Dalam teks bentuk bebas.
- Kata Sandi Jaringan WiFi ke-5. Dalam teks bentuk bebas.
Seperti disebutkan di atas jika perangkat IoT tidak dapat terhubung sebagai Stasiun WiFi ke jaringan WiFi yang SSID dan P/W-nya ditentukan dalam secvals.txt yang disimpan di SPIFFS, perangkat IoT akan menjadi Titik Akses. Setelah terhubung ke jalur akses ini, ia akan menampilkan 'Halaman Beranda Konfigurasi Sensor' seperti yang ditunjukkan di atas pada Gambar 2 (dengan memasukkan 'SENSORSVR.local' atau 192.168.4.1 ke bilah alamat URL browser Anda). Halaman beranda ini memungkinkan konfigurasi ulang sensor melalui browser
Akses Jarak Jauh saat dalam keadaan AKTIF
Setelah terhubung ke MQTT Broker, Anda juga dapat mengkalibrasi ulang dan mengkonfigurasi ulang perangkat melalui publikasi topik MQTT. File calvals.txt memiliki akses R/W dan secvals.txt memiliki akses hanya tulis yang terbuka.
Debug pengguna
Selama urutan boot, perangkat IoT yang dipimpin memberikan umpan balik debug berikut:
- 1 Flash singkat: Tidak ada file Config yang terletak di SPIFFS (secvals.txt)
- 2 Kilatan singkat: Perangkat IoT mencoba terhubung ke jaringan WiFi
- Penerangan terus menerus: Perangkat IoT mencoba terhubung ke MQTT Broker
- Mati: Perangkat aktif
- Catatan 1: 'Halaman Beranda Konfigurasi Sensor' tidak menggunakan soket aman dan karena itu bergantung pada keamanan jaringan Anda.
- Catatan 2: Untuk memprogram setiap perangkat IoT, string MQTT akan memerlukan pengeditan sebelum mengunduh. Ini karena nomor sensor telah disematkan ke dalam string topik MQTT. yaitu. 'WFD/THSen/100/HumdStatus/1' untuk 6 perangkat saya masing-masing diberi nomor 1…6.
Langkah 4: Kalibrasi Sensor
Saat perangkat IoT menyala, sebagai bagian dari urutan boot, file bernama 'cavals.txt' dibaca dari SPIFFS. Isi file ini adalah konstanta kalibrasi seperti yang ditunjukkan di atas pada gambar 1. Konstanta kalibrasi ini digunakan untuk menyesuaikan pembacaan yang diperoleh dari sensor agar sesuai dengan perangkat referensi. Ada satu nilai lebih lanjut yang mendefinisikan strategi pelaporan untuk perangkat dan dijelaskan di bawah ini bersama dengan prosedur yang diikuti untuk mengkalibrasi sensor.
Strategi Pelaporan Parameter ini menentukan bagaimana sensor jarak jauh melaporkan setiap perubahan parametrik sekitar secara lokal. Jika nilai 0 dipilih, sensor jarak jauh akan mempublikasikan perubahan apa pun yang dilihatnya dalam nilai suhu atau kelembaban setiap kali sensor dibaca (kira-kira setiap 10 detik). Nilai lainnya akan menunda publikasi perubahan sebesar 1…60 menit. Memodifikasi parameter ini memungkinkan pengoptimalan lalu lintas jaringan MQTT.
Kalibrasi suhu
Untuk mengkalibrasi sensor mereka ditempatkan dalam jarak fisik yang dekat satu sama lain seperti yang ditunjukkan di atas pada gambar 2. Di sampingnya saya menempatkan DMM dengan termokopel terkalibrasi terpasang (Fluke 87 V) dan kemudian memantau output dari setiap perangkat melalui suhu OpenHAB halaman tren selama sehari untuk mendapatkan perubahan suhu yang baik. Saya mencatat offset statis (meningkatkan nol 'C') dan laju perubahan setiap perangkat (gain, atau kemiringan grafik 'M') relatif terhadap nilai yang berasal dari termokopel yang dikalibrasi. Saya kemudian menghitung hubungan y=mx+c sederhana (saya menemukan itu cukup linier untuk menjadi pendekatan yang dekat dengan grafik garis lurus) dan memprogram koreksi yang diperlukan ke dalam konstanta kalibrasi melalui MQTTSpy.
Perangkat kemudian dipantau selama 24 jam lebih lanjut untuk memastikan kalibrasi berhasil. Indikasinya adalah jejak suhu pada halaman tren suhu OpenHAB semuanya cukup banyak di atas satu sama lain.
Tentu saja jika Anda hanya tertarik pada perkiraan suhu, Anda dapat membiarkan semua nilai kalibrasi sebagai default.
Kalibrasi Kelembaban
Karena saya tidak memiliki sarana untuk secara akurat merekam atau bahkan mengontrol kelembaban sekitar lokal, untuk mengkalibrasi sensor saya menggunakan pendekatan serupa yang di atas, dengan menempatkan semua perangkat dalam jarak fisik yang dekat (gambar 2) dan hanya memantau outputnya melalui OpenHAB Halaman cenderung kelembaban. Saya kemudian memilih perangkat #1 sebagai referensi kalibrasi dan mengkalibrasi semua perangkat relatif terhadap ini.
Langkah 5: Konvensi Penamaan Topik MQTT
Setelah banyak coba-coba, saya menetapkan konvensi penamaan topik yang diuraikan dalam gambar 1 di atas.
Yaitu, 'AccessMethod/DeviceType/WhichDevice/Action/SubDevice'
Ini tidak sempurna tetapi memungkinkan filter yang berguna untuk diterapkan untuk melihat semua output sensor untuk nilai parametrik yang diberikan sehingga memungkinkan perbandingan yang mudah seperti pada gambar 2 di atas dengan MQTTSpy. Ini juga mendukung pengelompokan fungsi logis yang dapat diperluas secara wajar dalam perangkat IoT yang diberikan.
Dalam mengimplementasikan topik-topik ini dalam perangkat lunak, saya menggunakan string topik berkode keras dengan pengidentifikasi numerik yang tetap dan tertanam untuk setiap perangkat sebagai lawan untuk menghasilkan topik secara dinamis pada waktu berjalan untuk menghemat RAM dan menjaga kinerja tetap tinggi.
Catatan: Jika Anda tidak yakin bagaimana menggunakan MQTTSpy, lihat di sini 'Menyiapkan Pialang MQTT. Bagian 2: IoT, Otomatisasi Rumah'
Langkah 6: Konfigurasi OpenHAB
Saya memodifikasi konfigurasi OpenHAB yang diberikan dalam Instructable saya sebelumnya (di sini) dan menambahkan entri individual untuk;
- Garasi,
- Aula,
- Ruang keluarga,
- Dapur
- Kamar tidur tamu
- Kamar tidur utama
Pada peta situs lihat gambar 1 di atas.
Untuk masing-masing entri ini saya menambahkan peta situs individual yang mengekspos nilai ambien lokal (Lihat gambar 2 di atas);
- Suhu
- Kelembaban
- Indeks panas
Saya juga menyertakan sakelar untuk mengontrol led lokal yang dipasang di dalam sensor.
Gambar 3 …5 menunjukkan jejak hidup individu selama periode 24 jam untuk suhu, kelembaban, dan RSSI (Indikasi Kekuatan Sinyal yang Diterima, pada dasarnya ukuran seberapa baik sensor dapat melihat jaringan WiFi).
Gambar 6 memberikan contoh tren kelembaban jangka panjang selama periode seminggu.
Catatan 1: Jika Anda tidak yakin bagaimana menggunakan OpenHAB, lihat di sini 'Mengatur dan Mengonfigurasi OpenHAB. Bagian 6: IoT, Otomatisasi Rumah'
Catatan 2: Salinan peta situs yang dimodifikasi, file aturan dan item, Ikon, dll. diberikan di bawah ini.
Langkah 7: Menguji Desain
Untuk sebagian besar saya menguji perangkat IoT melalui koneksi MQTT dengan MQTT Spy, memantau output yang dipimpin dan lalu lintas debug pada antarmuka serial. Ini memungkinkan saya untuk menggunakan semua topik langganan yang tersedia dan memeriksa tanggapan yang dipublikasikan. Meskipun ini dicapai secara manual dan terkadang menjadi sedikit membosankan, ini memungkinkan cakupan 100%.
Namun mesin negara bagian utama terbukti sedikit sulit untuk diuji karena mengandalkan ada atau tidak adanya jaringan WiFi, akses yang memerlukan set parameter tertentu. Tidak praktis menggunakan jaringan rumah untuk ini.
Untuk mengatasi masalah ini, saya membuat jaringan dummy saya sendiri menggunakan ESP8266-01 yang dikonfigurasi sebagai Access Points (gambar 1) dengan SSID masing-masing 'DummyNet1' dan 'DummyNet2'. Menggunakan rangkaian pada gambar 2 di atas led memberikan indikasi jika perangkat IoT telah terhubung. Meskipun ini bukan solusi pengujian yang sempurna (yaitu, masing-masing jaringan Wi-Fi dummy ini tidak berisi server MQTT), dimungkinkan untuk menguji mesin status sepenuhnya.
Saya telah menyertakan salinan kode sumber di bawah ini.
Langkah 8: Kesimpulan
Umum
Perangkat lunak di perangkat IoT telah bekerja dengan andal selama berbulan-bulan sekarang pulih dari pemadaman listrik rumah tangga (terutama disebabkan oleh saya sendiri). Secara keseluruhan mereka adalah perangkat yang cukup kuat yang memberikan data yang konsisten dan akurat.
Perbaikan
Dalam mengembangkan rutinitas perangkat lunak untuk membaca dan menulis ke SPIFFS saya menulis kode yang di belakang mungkin sedikit lebih maju daripada yang saya maksudkan, menggunakan pointer kosong, menyusun ulang dan pointer ke pointer. Meskipun sangat fleksibel dan melakukan pekerjaan dengan baik, lain kali saya dapat menggunakan JSON sesuatu di sepanjang baris ConfigFile.ino untuk membuatnya sedikit lebih sederhana.
-
Arduino GIT HUB Inti
https://github.com/esp8266/Arduino
-
Sumber ConfigFile.ino
https://github.com/esp8266/Arduino/tree/master/libraries/esp8266/examples/ConfigFile
Daftar keinginan
Saya bermaksud menggunakan klien mDNS untuk terhubung ke Broker tetapi perpustakaannya terlalu rapuh. Inilah sebabnya mengapa perlu untuk menentukan alamat IP Broker MQTT sebagai lawan dari 'MQTTSVR.local'. Jika perpustakaan mDNS menjadi lebih stabil di masa mendatang, saya akan menambahkan kemampuan ini ke perangkat.
Akan lebih baik jika memiliki sarana untuk memantau dan mengontrol kelembaban sekitar secara akurat untuk mengkalibrasi sensor. Namun demikian, metode kalibrasi yang dipilih memberikan pembacaan relatif yang baik dan tampaknya cukup akurat sesuai dengan spesifikasi dalam lembar data DHT22.
Akhirnya, mengingat kompleksitas perangkat lunak yang saya temukan sepenuhnya menguji kode setelah perubahan besar menjadi memakan waktu. Saya dapat mempertimbangkan pengujian otomatis di kemudian hari.
Langkah 9: Referensi Digunakan
Saya menggunakan sumber berikut untuk menyatukan Instructable ini;
PubSubClient.h
- Oleh: Nick O'Leary
- Dari:
DHT.h
- Oleh: Adafruit
- Dari:
Lembar Data DHT22