
Firmware padi
Ini adalah komponen firmware untuk padi, daemon administrasi daya.
Ini menggunakan Arduino C ++, dan dirancang di sekitar mesin negara. Ini dilontarkan langsung pada chip yang didukung. Jenis Arduino yang digunakan untuk proyek ini adalah IoT Nano 33.
Pekerjaan kode ini adalah untuk berinteraksi dengan broker Paddy MQTT melalui Wi-Fi, atau Aplikasi Paddy melalui Bluetooth Low Energy, untuk penanganan pengaturan & kesalahan. Kode juga harus mengontrol perangkat keras yang melakukan:
- On/Off Toggling perangkat pemuatan
- Pengukuran Daya untuk Perangkat Beban, dengan pengiriman statistik berkala.
Diagram Mesin Negara

Ringkasan
Kode mesin negara bagian ini diselenggarakan dengan komponen singleton yang dipakai sekali di firmware dan digunakan kembali sepanjang siklus hidup program. Modul -modul ini seperti berikut:
- BLE: Menangani komunikasi langsung antara daemon dan perangkat pusat.
- Kontrol: Menyalakan atau mematikan perangkat beban tergantung pada perintah yang diterima pada saat itu.
- MQTT: Menangani semua komunikasi dengan broker, dan delegasi bekerja dengan komponen lain atau negara bagian pada pengambilan pesan.
- Daya: Kontrol & Kalibrasi Transformator arus pengukuran daya. Membuat bacaan berkala.
- Penyimpanan: Meniru chip EEPROM karena Arduino IoT Nano 33 yang dipilih tidak memiliki EEPROM yang sebenarnya. Menyimpan kredensial yang diperlukan di atasnya.
- Wi-Fi: Menangani Koneksi Wi-Fi & Pengukuran Kekuatan Sinyal.
Dengan setiap negara memiliki tugas yang telah ditentukan sebelumnya, mudah untuk memahami apa yang dilakukan setiap bagian dari aliran:
- Status boot: Ini adalah keadaan awal yang dimiliki mikrokontroler segera setelah booting. Pemeriksaan perangkat keras dilakukan di sini, khususnya modul Wi-Fi dan modul energi rendah Bluetooth. Jika cek ini berhasil dan daemon dapat menginisialisasi komponen yang disebutkan di atas, maka ia bergerak ke keadaan init. Kalau tidak, ia bergerak ke rusak, berhenti di sana dan mem -flash LED yang menunjukkan kesalahan perangkat keras kepada pengguna.
- Status Init: Keadaan init adalah keadaan perantara pertama yang dimasukkan daemon. Tujuannya adalah untuk menyiapkan perangkat untuk fungsi yang tepat, dengan pertama kali mengkalibrasi modul pengukuran daya dengan bersepeda beberapa kali, membiasakan pembacaan perangkat ke arus saluran. Setelah itu, diverifikasi apakah daemon berisi kredensial yang disimpan dalam EEPROM yang ditiru atau tidak. Daemon bergerak ke keadaan penghubung dengan kredensial tersebut jika yang pertama benar, jika tidak, fase pengaturan dimasukkan.
- Status Pengaturan: Dengan perilaku pemblokirannya, keadaan ini tidak akan berkembang sampai tindakan pengguna selesai. Karena daemon tidak mengandung kredensial apa pun di sini, tidak tahu bagaimana cara terhubung ke Wi-Fi atau broker. Ini berarti bahwa pada tahap ini, daemon tidak dapat menggunakan Wi-Fi untuk transfer data, dan membutuhkan pendekatan langsung. BLE sangat cocok untuk skenario ini, karena menulis dan membaca karakteristik mudah dicapai dari aplikasi padi. Oleh karena itu, kemampuan BLE perangkat digunakan untuk memancarkan karakteristik ini:
- Serial (hanya baca): Karakteristik yang memancarkan nomor seri perangkat.
- SSID (hanya tulis): Pengidentifikasi set layanan untuk jaringan Wi-Fi.
- Kata sandi (hanya tulis): Kata sandi dari titik akses Wi-Fi.
- Perusahaan Nama Pengguna (Hanya Tulis): Jika Wi-Fi membutuhkan teknik otentikasi perusahaan seperti EAP atau PEAP, nama pengguna untuk pengguna.
- Kata Sandi Perusahaan (Hanya Tulis): Jika Wi-Fi memerlukan teknik otentikasi perusahaan seperti EAP atau PEAP, kata sandi untuk pengguna.
- JWT (hanya tulis): Token web JSON yang digunakan oleh daemon untuk terhubung ke broker.
- Reset (hanya menulis): Ketika karakteristik ini ditulis, daemon mengatur ulang kredensialnya.
Untuk melanjutkan, karakteristik JWT dan kredensial harus ditulis oleh perangkat seluler pengguna melalui aplikasi padi. Harus dicatat bahwa untuk kesederhanaan, firmware mendeteksi tahap ini sebagai hanya menulis hanya menulis untuk karakteristik SSID. Dengan demikian, penulisan dapat terjadi dalam urutan apa pun kecuali untuk SSID, yang harus ditulis untuk bertahan untuk perilaku yang dapat diprediksi untuk dicapai. Untuk membedakan antara mode otorisasi, berbagai kombinasi karakteristik tertulis menghasilkan tiga konfigurasi ketika datang ke wi-fi otorisasi: Insecure (hanya SSID), Secure (kata sandi SSID +) dan Enterprise (SSID + Enterprise Username + Enterprise Password).
- Status Menghubungkan: Keadaan ini relatif sederhana, karena hanya berjalan saat daemon terhubung ke broker backend. Pada keberhasilan koneksi, ia menyerahkan negara ke yang online, dan untuk mundur pada kegagalan.
- Status online: Keadaan daemon “bekerja”, ini mewakili pad yang berfungsi penuh. Di sini dapat berinteraksi dengan broker dengan menerima pesan MQTT, dan mengirimnya. Daemon memiliki beberapa tugas saat dalam keadaan ini:
- Dengarkan pesan MQTT, yaitu ON, OFF, OFF, atur ulang dan putar topik. Ketika salah satu pesan ini diterima, ia melakukan tindakan yang tepat.
- Kirim pesan ping tetap hidup ke broker. Pesan -pesan ini murni untuk tujuan statistik dan tidak perlu untuk benar -benar menjaga koneksi tetap hidup; Mereka hanya digunakan untuk melacak status daemon dari aplikasi. Dalam muatan pesan-pesan ini, kekuatan sinyal Wi-Fi disampaikan.
- Secara berkala menyampaikan data penggunaan daya ke broker.
- Periksa apakah perangkat masih terhubung ke broker. Jika perangkat tidak lagi terhubung, buka backoff.
- Backoff State: Sementara keadaan ini berfungsi sebagai bantalan sebelum daemon mencoba kembali koneksi, itu juga merupakan jendela bagi pengguna untuk mengatur ulang daemon melalui koneksi langsung. Misalnya, dalam kasus di mana daemon dipindahkan dari tempat dengan koneksi Wi-Fi lain, itu sudah memiliki kredensial, tetapi mereka salah. Dengan demikian, ketika daemon mencapai status backoff, itu membuka jendela 60 detik di mana pengguna dapat meresetnya melalui BLE secara langsung. Namun, jika penghitung 60 detik habis, daemon akan mencoba lagi untuk terhubung ke server lagi dengan pindah ke status penghubung.
Diagram Sirkuit
