Daftar Isi:
- Langkah 1: Yang Anda Butuhkan
- Langkah 2: Buat Repositori untuk Menyimpan Firmware Biner
- Langkah 3: Buat Binari
- Langkah 4: Buat Aliran Server
- Langkah 5: Tambahkan Logika Server
- Langkah 6: Tambahkan Kode ke Sketsa untuk Meminta Pembaruan
- Langkah 7: Akhirnya, Mulai Pembaruan
Video: Siapkan Server Pembaruan Otomatis ESP8266: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:58
Banyak orang sekarang menggunakan ESP8266 dalam banyak samarannya (ESP-01S, Wemos D1, NodeMCU, Sonoff dll) untuk sistem otomasi rumah. Jika Anda menulis kode Anda sendiri (seperti yang saya lakukan) memperbarui masing-masing secara terpisah bahkan melalui OTA (over the air) menjadi sedikit membosankan.
Sistem saya sendiri, misalnya memiliki 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV dan NodeMCU yang berbagi basis kode yang sama, jadi ada 33 perangkat yang akan diperbarui ketika saya membuat kode sederhana mengubah.
Tetapi ada cara yang lebih mudah: "Server pembaruan". Inti Arduino IDE + ESP8266 yang sangat baik memiliki perpustakaan untuk melakukan sebagian besar pekerjaan (ESP8266httpUpdate), tetapi Anda perlu tahu cara mengatur server Anda sendiri untuk membuatnya berfungsi.
Instruksi ini menunjukkan kepada Anda bagaimana menggunakan server NODE-RED, tetapi logika yang sama berlaku untuk teknologi server apa pun pilihan Anda, mis. Apache + PHP dll
Langkah 1: Yang Anda Butuhkan
- Arduino IDE
- ESP8266 inti
- Papan dev ESP8266 apa pun dengan RAM flash 1M atau lebih
- Server Web (bahkan raspberry Pi yang sederhana akan melakukannya - Itu yang saya gunakan)
- (opsional) alat mkspiffs jika Anda ingin memperbarui gambar sistem file SPIFFS secara otomatis
Langkah 2: Buat Repositori untuk Menyimpan Firmware Biner
Di server saya, saya memiliki folder bernama /home/pi/trucFirmware yang menyimpan berbagai firmware perangkat dan gambar SPIFFS
Saya memelihara biner terpisah untuk setiap jenis perangkat keras (dari satu file sumber dengan beberapa #defines) dan ketika rilis baru sudah siap, saya menggunakan perintah menu "sketsa/Ekspor Biner yang dikompilasi" Arduino IDE untuk setiap perangkat target. Perhatikan bahwa bahkan meskipun ada 5 jenis perangkat keras yang berbeda, hanya ada dua biner SPIFFS: versi 1M dan 4M - dibuat dengan alat mkspiffs - karena semua perangkat memiliki flash 1M atau 4M.
Langkah 3: Buat Binari
Menggunakan sketsa opsi menu Arduino IDE/Export Compiled Binary, buat firmware yang akan diunggah ke perangkat saat memintanya dari server pembaruan.
Jika Anda memerlukan biner SPIFFS, Anda perlu menginstal alat mkspiffs.
Setelah Anda memilikinya, membangun biner SPIFFS itu sederhana. Saya memiliki file batch satu baris untuk versi 1M yang menggunakan nomor versi sebagai parameter (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
dan satu lagi untuk versi 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Saya kemudian menyalin semua binari yang dikompilasi dan file.binary SPIFFS ke repositori
Langkah 4: Buat Aliran Server
Saya menggunakan NODE-RED, tetapi logika sederhananya akan sama pada teknologi/bahasa server apa pun.
a) Tentukan url yang akan mendengarkan permintaan ESP8266httpUpdate. Serevr raspberryPi saya ada di 192.168.1.4 dan mendengarkan di port 1880 untuk /update dengan jenis perangkat keras yang ditambahkan. Jadi jika saya akan meminta biner untuk Wemos D1 Mini, url berakhir sebagai:
192.168.1.4:1880/update/d1_mini
b) Buat kode untuk menangani logika berikut:
ESP8266: "Hai, saya menjalankan versi firmware a.b.c, apakah Anda memiliki versi yang lebih baru?" Server: "Coba saya lihat … ah ya saya punya a.b.d - ini dia …"
Jika versi yang lebih baru memang ada, server hanya mengirimkannya sebagai beban data biner dalam balasan http. Kelas ESP8266httpUpdate melakukan bagian yang sulit dalam menyalin biner ke dalam memori, mengubah alamat boot firmware ke kode baru daripada (jika diminta) me-reboot perangkat untuk menjalankan kode baru.
Jika di sisi lain tidak ada versi yang lebih tinggi, itu membalas dengan kesalahan http 304 yang secara efektif mengatakan: "Saya tidak punya apa-apa untuk Anda" dan kode Anda terus berjalan seperti biasa.
Langkah 5: Tambahkan Logika Server
Node pertama dalam aliran "mendengarkan" permintaan http ke url https://192.168.1.4:1880/update dengan jenis perangkat yang ditambahkan. Ini meneruskan ini ke simpul fungsi "Buat jalur pencarian" yang memiliki kode javascript berikut:
msg.type=msg.req.params.type;var h=msg.req.headers; msg.version=h["x-esp8266-versi"];
msg.mode=h["x-esp8266-mode"];
if(msg.mode=="sketsa"){ msg.payload="/home/pi/trucFirmware/*.ino."+msg.type+".bin"; } else { var sz=h['x-esp8266-chip-size']; msg.payload="/home/pi/trucFirmware/spiffs_*_"+(sz/1048576)+"M.bin"; } kembali pesan;
Ini hanya mengatur jalur yang sesuai dengan wildcard untuk fungsi sys yang mengikuti, yang hanya berjalan
ls - r
Outputnya kemudian diumpankan ke node fungsi "Bandingkan versi":
var f=msg.payload.split("\n")[0];msg.namafile=f;
if(msg.mode=="sketsa"){
f=f.replace("/home/pi/trucFirmware/truc_", ""); f=f.replace(".ino."+msg.type+".bin", ""); } else { f=f.replace("/home/pi/trucFirmware/spiffs_", ""); f=f.replace(/_\dM\.bin/, ""); }
if(msg.version < f){
node.warn("perlu upgrade");
node.warn("akan mengembalikan "+msg.namafile); kembali pesan; } node.warn("tidak ada peningkatan"); msg.statusCode=304; msg.payload=;
kembali pesan;
Node sakelar kemudian memastikan bahwa pesan 304 "tidak diperlukan pembaruan" dikirim atau biner baru yang sebenarnya dikembalikan dan dikirim kembali ke perangkat.
Langkah 6: Tambahkan Kode ke Sketsa untuk Meminta Pembaruan
Sketsa harus memiliki kode berikut yang disertakan di dalamnya sehingga akan diperbarui secara otomatis saat berikutnya Anda menambah nomor versi:
#termasuk
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE diatur lebih awal tergantung pada berbagai definisi waktu kompilasi // yang akhirnya menentukan tipe hw, mis. #define THIS_DEVICE "d1_mini" const char * updateUrl="https://192.168.1.4:1880/update/"THIS_DEVICE; // ini adalah server raspberry Pi saya, 1880 adalah port NODE-RED default // /update adalah url yang saya pilih untuk "didengarkan" oleh server, diikuti oleh jenis perangkat … bool actualUpdate(bool sketch=false) { Pesan string; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate(salah); if(sketsa){ ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // **************** Ini adalah baris yang "melakukan bisnis" } else { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } if(ret!=HTTP_UPDATE_NO_UPDATES){ if(ret==HTTP_UPDATE_OK){
Serial.printf("PEMBARUAN BERHASIL");
kembali benar; } else { jika(ret==HTTP_UPDATE_FAILED){
Serial.printf("Upgrade Gagal");
} } } mengembalikan salah; }
Langkah 7: Akhirnya, Mulai Pembaruan
Saat boot, atau mungkin sebagai tanggapan atas pesan MQTT (seperti yang saya lakukan) jalankan kode berikut:
if(_actualUpdate(true)) ESP.restart();
// atau untuk SPIFFS…
if(_actualUpdate(false)) ESP.restart();
Perangkat akan memperbarui dirinya sendiri dan reboot menjalankan kode terbaru dari server. Ini jauh lebih sederhana bagi saya daripada memperbarui 33 perangkat secara manual!
Banyak lagi informasi berguna tentang Otomasi Rumah, IOT, dan pemrograman ESP8266 dapat ditemukan di Blog Saya
Direkomendasikan:
Pelacak Pembaruan Covid-19 Menggunakan ESP8266: 9 Langkah
Pelacak Pembaruan Covid-19 Menggunakan ESP8266: Ini adalah proyek yang menunjukkan data terkini wabah virus corona dari berbagai kota di negara bagian India secara realtime di layar OLED. Pelacak status langsung ini membantu Anda memantau pembaruan covid-19 realtime di distrik Anda. Proyek ini sepenuhnya b
Pembaruan Status Slack Dengan ESP8266: 5 Langkah (dengan Gambar)
Slack Status Updater Dengan ESP8266: Proyek ini membantu membuat hari Anda sedikit lebih mudah jika Anda seorang pekerja jarak jauh yang menggunakan Slack. Saya akan menunjukkan cara membuatnya menggunakan papan wifi ESP8266. Jangan lewatkan video di atas untuk ikhtisarnya. Baik Anda baru menggunakan Slack atau baru saja menggunakan
Siapkan Server Pelacakan GPS Anda Sendiri di Raspberry Pi: 8 Langkah
Setup Server Pelacakan GPS Anda Sendiri di Raspberry Pi: Dalam proyek ini saya akan menunjukkan cara mengatur server pelacakan GPS Anda sendiri di Raspberry pi. Tidak harus Raspberry pi, karena perangkat lunak yang akan kita gunakan untuk server pelacakan tersedia untuk Windows dan Linux juga
Koneksi SSH / SCP Aman Dari Raspberry Pi ke Server Cloud untuk Pencadangan dan Pembaruan: 3 Langkah
Koneksi SSH / SCP Aman Dari Raspberry Pi ke Server Cloud untuk Pencadangan dan Pembaruan: Tujuan dari instruksi ini adalah untuk menunjukkan kepada Anda bagaimana menghubungkan secara otomatis dan aman dari Raspberry Pi Anda ke server cloud jarak jauh (dan sebaliknya) untuk melakukan pencadangan dan pembaruan, dll. Untuk melakukan ini, Anda menggunakan pasangan kunci SSH yang tidak
Siapkan Server Web Anda Sendiri!: 12 Langkah
Siapkan Server Web Anda Sendiri!: Pernah ingin memiliki tempat di mana Anda dapat menyimpan file Anda dan mengaksesnya di mana pun Anda mendapatkan koneksi Internet? Katakanlah Anda ingin perpustakaan musik Anda tersedia jika Anda ingin memberikan lagu ke salah satu teman Anda, atau mungkin Anda ingin