Mündəricat:
- Addım 1: Nə lazımdır
- Addım 2: İkili proqramları saxlamaq üçün bir depo yaradın
- Addım 3: İkili faylları yaradın
- Addım 4: Server axını yaradın
- Addım 5: Server Məntiqini əlavə edin
- Addım 6: Yeniləmə tələb etmək üçün Eskizə Kod əlavə edin
- Addım 7: Nəhayət, Yeniləməyə başlayın
Video: Bir ESP8266 Avtomatik Yeniləmə Serverini Qurun: 7 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:48
İndi bir çox insan ev avtomatlaşdırma sistemləri üçün ESP8266-nı bir çox görünüşlərində (ESP-01S, Wemos D1, NodeMCU, Sonoff və s.) İstifadə edir. Öz kodunuzu (mənim etdiyim kimi) yazsanız, bunların hər birini OTA (havada) vasitəsilə ayrıca yeniləmək bir qədər yorucu olur.
Mənim öz sistemim, məsələn, 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV və ortaq kod bazasını paylaşan bir NodeMCU-ya malikdir, buna görə də sadə bir kod hazırladığımda yenilənəcək 33 cihaz var. dəyişdirmək.
Ancaq daha asan bir yol var: "yeniləmə serveri". Mükəmməl Arduino IDE + ESP8266 nüvəsində işlərin çoxunu yerinə yetirmək üçün bir kitabxana var (ESP8266httpUpdate), ancaq işləmək üçün öz serverinizi necə quracağınızı bilməlisiniz.
Bu Təlimat NODE-RED serverinin necə istifadə edildiyini göstərir, lakin eyni məntiq seçdiyiniz hər hansı bir server texnologiyasına aiddir. Apache + PHP və s
Addım 1: Nə lazımdır
- Arduino IDE
- ESP8266 nüvəsi
- 1M və ya daha çox flash RAM ilə hər hansı bir ESP8266 inkişaf etdirici kartı
- Veb Server (hətta təvazökar bir moruq Pi də edəcək - İstifadə etdiyim budur)
- Bir SPIFFS fayl sistemi görüntüsünü avtomatik yeniləmək istəyirsinizsə (isteğe bağlı) mkspiffs aləti
Addım 2: İkili proqramları saxlamaq üçün bir depo yaradın
Serverimdə, müxtəlif cihaz proqramlarını və SPIFFS şəkillərini saxlayan/home/pi/trucFirmware adlı qovluğum var.
Hər bir hardware növü üçün ayrı bir ikili saxlayıram (bir neçə #defines olan bir mənbə faylından) və yeni bir buraxılış hazır olduqda, hər bir hədəf cihaz üçün Arduino IDE "tərtib edilmiş İxrac İkili" menyu əmrindən istifadə edirəm. 5 fərqli donanım növü olsa da, yalnız iki SPIFFS ikili var: 1M və 4M versiyası - mkspiffs vasitəsi ilə hazırlanmışdır - çünki bütün cihazlarda ya 1M, ya da 4M flaş var.
Addım 3: İkili faylları yaradın
Arduino IDE menyu eskiz/İxrac Edilmiş İkili seçimindən istifadə edərək, yeniləmə serverindən istədiyi zaman cihaza yüklənəcək firmware yaradın.
Bir SPIFFS ikili ehtiyacınız varsa, mkspiffs alətini quraşdırmalısınız.
Sahib olduqdan sonra SPIFFS ikili qurmaq çox sadədir. Versiya nömrəsini parametr olaraq qəbul edən 1M versiyası üçün bir satırlıq toplu faylım var (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
və 4M versiyası üçün başqa:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Daha sonra bütün tərtib edilmiş ikili faylları və SPIFFS.binary fayllarını depoya kopyalayıram
Addım 4: Server axını yaradın
NODE-RED istifadə edirəm, amma hər hansı bir server texnologiyasında / dildə sadə məntiq eyni olacaq.
a) ESP8266httpUpdate sorğusunu dinləyəcək bir url təyin edin. Mənim raspberryPi serevrim 192.168.1.4 -dədir və əlavə edilmiş hardware növü ilə /yenilənməsi üçün 1880 portunda dinləyir. Beləliklə, bir Wemos D1 Mini üçün ikili sənəd istəyəcəyəmsə, url belə bitir:
192.168.1.4:1880/update/d1_mini
b) Aşağıdakı məntiqi idarə etmək üçün kod yaradın:
ESP8266: "Salam, a.b.c firmware versiyasını işlədirəm, daha yeni bir versiyanız varmı?" Server: "Görüm … ah bəli, a.b.d var - bura gəlir …"
Daha yeni bir versiya varsa, server onu http cavabında ikili məlumat yükü olaraq göndərir. ESP8266httpUpdate sinfi, ikili quruluşu yaddaşa kopyalamağın çətin hissəsini yerinə yetirir, firmware açılış ünvanını yeni kodu dəyişdirmək üçün (tələb olunarsa) cihazı yeni kodu işə salmaq üçün yenidən başladın.
Digər tərəfdən daha yüksək bir versiya yoxdursa, bu, effektiv şəkildə "sizin üçün heç bir şeyim yoxdur" deyən bir http 304 xətası ilə cavab verir və kodunuz normal işləməyə davam edir.
Addım 5: Server Məntiqini əlavə edin
Axındakı ilk qovşaq, əlavə edilmiş cihaz növü ilə https://192.168.1.4:1880/update url üçün http sorğusunu "dinləyir". Bunu aşağıdakı JavaScript kodu olan "Axtarış yolunu qur" funksiya qovşağına keçir:
msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-versiya"];
msg.mode = h ["x-esp8266-mode"];
if (msg.mode == "eskiz") {msg.payload = "/home/pi/trucFirmware/*. ino."+msg.type+". bin"; } başqa {var sz = h ['x-esp8266-çip ölçüsü']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } msg qaytar;
Bu, sadəcə işləyən sys funksiyası üçün joker ilə uyğun yolu qurur
ls - r
Çıxış daha sonra "Versiyaları müqayisə et" funksiyası qovşağına verilir:
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
əgər (msg.mode == "eskiz") {
f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } başqa {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.yeri (/_ / dM \.bin/, ""); }
if (msg.version <f) {
node.warn ("təkmilləşdirmə tələb olunur");
node.warn ("qayıdacaq"+msg.filename); msg qaytar; } node.warn ("təkmilləşdirmə yoxdur"); msg.statusCode = 304; msg.payload = ;
msg qaytar;
Keçid düyünü daha sonra 304 "yeniləməyə ehtiyac yoxdur" mesajının göndərilməsini və ya faktiki yeni ikili sənədin geri qaytarılmasını və cihaza geri göndərilməsini təmin edir.
Addım 6: Yeniləmə tələb etmək üçün Eskizə Kod əlavə edin
Növbəti versiya nömrəsini artırdığınız zaman eskizin avtomatik olaraq yenilənməsi üçün aşağıdakı kodun olması lazımdır:
#daxil edin
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE, əvvəlcədən hw növünü təyin edən // müxtəlif tərtib müddətlərindən asılı olaraq əvvəlcədən təyin olunur // #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // bu mənim moruq Pi serverimdir, 1880 standart NODE-RED portudur // /yeniləmə serverin "dinləməsi" üçün seçdiyim url, sonra cihaz növü… bool actualUpdate (bool eskiz = yalan) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (yalan); əgər (eskiz) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** "İşlə məşğul olan" xətti} başqa {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } əgər (ret! = HTTP_UPDATE_NO_UPDATES) {əgər (ret == HTTP_UPDATE_OK) {
Serial.printf ("UPDATE SUCCEEDED");
doğru qayıtmaq; } başqa {əgər (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Yeniləmə uğursuz oldu");
}}} false qaytar; }
Addım 7: Nəhayət, Yeniləməyə başlayın
Yükləmə zamanı və ya bəlkə də bir MQTT mesajına cavab olaraq (etdiyim kimi) aşağıdakı kodu işlədin:
if (_actualUpdate (true)) ESP.restart ();
// və ya SPIFFS üçün…
if (_actualUpdate (false)) ESP.restart ();
Cihaz özünü yeniləyəcək və serverdən ən son kodu işlədərək yenidən başlayacaq. Mənim üçün 33 cihazı əl ilə yeniləməkdən daha asandır!
Ev Otomasyonu, IOT və ESP8266 proqramlaşdırma haqqında daha çox faydalı məlumatı Blogumda tapa bilərsiniz
Tövsiyə:
Raspberry Pi -də Shinken Şəbəkə Monitorunu Qurun və Qurun: 14 Addım
Raspberry Pi -də Shinken Şəbəkə Monitorunu Qurun və Qurun: QEYD: shinken sonuncu dəfə MAR2016 -da 2.4.3 sabit bir versiyası olaraq yeniləndi. Beləliklə, bir neçə il əvvəl ev şəbəkəsi monitorinqinin başqa yollarına keçdim. Əlavə olaraq, php5 -in mövcud olmadığı görünür, buna görə də bu təlimatı istifadə etməyin
Bir hissəcik elektronundan istifadə edərək bir enerji monitor cihazı qurun: 5 addım (şəkillərlə)
Bir hissəcik elektronundan istifadə edərək bir Enerji Monitor Cihazı yaradın: Əksər müəssisələrdə Enerjini bir iş xərci hesab edirik. Hesab faktiki olaraq e -poçtumuzda və ya ləğv tariximizdən əvvəl ödənilir. IoT və ağıllı cihazların ortaya çıxması ilə Enerji bir iş balasında yeni bir yer tutmağa başlayır
WiFi ilə DIY Özünü sulayan bir qazan qurun - Avtomatik olaraq bitkiləri sulayır və Su az olduqda xəbərdarlıq göndərir: 19 addım
WiFi ilə DIY Özünü Suvarma Tenceresi qurun - Avtomatik olaraq bitkiləri suya çəkir və Su az olduqda xəbərdarlıq göndərir: Bu təlimat köhnə bir bağ əkinçisindən, zibil qutusundan, bir az yapışqan və özünü istifadə edərək, WiFi ilə əlaqəli öz -özünə suvarma qurğusunun necə qurulacağını göstərir. Adosia -dan Sulama qabı alt montaj dəsti
Yarım saatdan az bir müddətdə bir Raspberry Pi və RTL-SDR Dongle istifadə edərək Həvəskar Radio APRS RX Yalnız IGate qurun: 5 addım
Yarım Saatdan Az Bir Raspberry Pi və RTL-SDR Dongle istifadə edərək Həvəskar Radio APRS RX Yalnız IGate qurun: Nəzərə alın ki, bu indi olduqca köhnədir, buna görə də bəzi hissələr səhv və köhnəlmişdir. Redaktə etməyiniz lazım olan fayllar dəyişdi. Sizə görüntünün son versiyasını vermək üçün linki yenilədim (açmaq üçün 7-zipdən istifadə edin) amma tam təlimat üçün
Xbox 360 Tablosuna Xüsusi Bir Şəkil Necə Qoymaq olar. (Payızdan əvvəl 08 Yeniləmə): 8 Addım
Xbox 360 Tablosuna Xüsusi Bir Şəkil Necə Qoymaq olar. (Payızdan əvvəl 08 Yeniləmə): Bu təlimatlı kitabda xbox 360 -a arxa plan olaraq xüsusi bir şəkil qoymağın yollarını göstərəcəyəm. Bunu etmək üçün eyni addımlar var. yeni və köhnə tablosuna. fürsət tapanda hər şeyi yeni şəkillərlə yeniləyəcəyəm