İçindekiler:
- Adım 1: İhtiyacınız Olan Şey
- Adım 2: İkili Ürün Yazılımlarını Tutmak için Bir Depo Oluşturun
- Adım 3: İkili Dosyaları Oluşturun
- 4. Adım: Sunucu Akışını Oluşturun
- Adım 5: Sunucu Mantığını ekleyin
- Adım 6: Güncelleme Talep Etmek için Çizime Kod Ekleyin
- 7. Adım: Son olarak Güncellemeyi Başlatın
Video: Bir ESP8266 Otomatik Güncelleme Sunucusu Kurun: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Artık birçok kişi, ev otomasyon sistemleri için ESP8266'yı birçok kılıkta (ESP-01S, Wemos D1, NodeMCU, Sonoff vb.) kullanıyor. Kendi kodunuzu yazarsanız (benim yaptığım gibi) bunların her birini OTA (havadan) üzerinden bile ayrı ayrı güncellemek biraz sıkıcı olur.
Örneğin kendi sistemimde 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV ve ortak bir kod tabanını paylaşan bir NodeMCU var, yani basit bir kod yaptığımda güncellenecek toplam 33 cihaz var değiştirmek.
Ancak daha kolay bir yol var: Bir "güncelleme sunucusu". Mükemmel Arduino IDE + ESP8266 çekirdeği, işin çoğunu yapmak için bir kütüphaneye sahiptir (ESP8266httpUpdate), ancak çalışması için kendi sunucunuzu nasıl kuracağınızı bilmeniz gerekir.
Bu Eğitim Tablosu size bir NODE-RED sunucusunu nasıl kullanacağınızı gösterir, ancak aynı mantık seçtiğiniz herhangi bir sunucu teknolojisi için de geçerlidir; Apache + PHP vb.
Adım 1: İhtiyacınız Olan Şey
- Arduino IDE'si
- ESP8266 çekirdek
- 1M veya daha fazla flash RAM'e sahip herhangi bir ESP8266 geliştirme kartı
- Bir Web Sunucusu (mütevazı bir ahududu Pi bile yapacak - Ben bunu kullanıyorum)
- (isteğe bağlı) bir SPIFFS dosya sistemi görüntüsünü otomatik olarak güncellemek istiyorsanız mkspiffs aracı
Adım 2: İkili Ürün Yazılımlarını Tutmak için Bir Depo Oluşturun
Sunucumda, çeşitli aygıt yazılımlarını ve SPIFFS görüntülerini tutan /home/pi/trucFirmware adlı bir klasör var.
Her donanım türü için ayrı bir ikili dosya tutuyorum (birkaç #tanım içeren tek bir kaynak dosyadan) ve yeni bir sürüm hazır olduğunda her hedef cihaz için Arduino IDE "sketch/Export derlenmiş Binary" menü komutunu kullanıyorum. 5 farklı donanım türü olmasına rağmen, yalnızca iki SPIFFS ikili dosyası vardır: 1M ve 4M sürümü - mkspiffs aracıyla oluşturulmuştur - çünkü tüm cihazlarda 1M veya 4M flash bulunur.
Adım 3: İkili Dosyaları Oluşturun
Arduino IDE menü seçeneği Sketch/Export Compiled Binary'yi kullanarak, güncelleme sunucusundan talep ettiğinde cihaza yüklenecek firmware'i oluşturun.
Bir SPIFFS ikili dosyasına ihtiyacınız varsa, mkspiffs aracını yüklemeniz gerekecektir.
Bir kez sahip olduğunuzda, SPIFFS ikili dosyasını oluşturmak basittir. 1M sürümü için sürüm numarasını parametre olarak alan tek satırlık bir toplu iş dosyam var (%1)
mkspiffs -c veri/ spiffs_%1_1M.bin
ve 4M versiyonu için bir tane daha:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c veri/ spiffs_%1_4M.bin
Daha sonra derlenmiş tüm ikili dosyaları ve SPIFFS.binary dosyalarını depoya kopyalarım
4. Adım: Sunucu Akışını Oluşturun
NODE-RED kullanıyorum, ancak basit mantık herhangi bir sunucu teknolojisinde/dilinde aynı olacaktır.
a) ESP8266httpUpdate isteğini dinleyecek bir url tanımlayın. RaspberryPi serevr'im 192.168.1.4'te ve eklenen donanım türüyle /update için 1880 numaralı bağlantı noktasını dinliyor. Yani bir Wemos D1 Mini için bir ikili dosya talep edeceksem, url şu şekilde biter:
192.168.1.4:1880/update/d1_mini
b) Aşağıdaki mantığı işlemek için kod oluşturun:
ESP8266: "Merhaba, a.b.c donanım yazılımı sürümünü çalıştırıyorum, daha yeni bir sürümünüz var mı?"Sunucu: "Bir bakalım…ah evet a.b.d var - işte geliyor…"
Daha yeni bir sürüm varsa, sunucu onu http yanıtında bir ikili veri yükü olarak gönderir. ESP8266httpUpdate sınıfı, ikili dosyayı belleğe kopyalamanın zor kısmını yapar, bellenim önyükleme adresini yeni kodla değiştirir (istenirse) yeni kodu çalıştırmak için aygıtı yeniden başlatmaktansa.
Öte yandan, daha yüksek bir sürüm yoksa, etkin bir şekilde "Senin için hiçbir şeyim yok" yazan bir http 304 hatasıyla yanıt verir ve kodunuz normal şekilde çalışmaya devam eder.
Adım 5: Sunucu Mantığını ekleyin
Akıştaki ilk düğüm, eklenen aygıt türüyle https://192.168.1.4:1880/update url'sine yönelik bir http isteğini "dinler". Bunu, aşağıdaki javascript koduna sahip "Arama yolu oluştur" işlev düğümüne iletir:
msg.type=msg.req.params.type;var h=msg.req.headers; msg.version=h["x-esp8266-sürüm"];
msg.mode=h["x-esp8266-modu"];
if(msg.mode=="sketch"){ 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"; } mesaj gönder;
Bu, takip eden ve basitçe çalışan sys işlevi için joker karakterli uygun yolu ayarlar.
ls - r
Çıktı daha sonra "Sürümleri karşılaştır" işlev düğümüne beslenir:
var f=msg.payload.split("\n")[0];msg.filename=f;
if(msg.mode=="eskiz"){
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("yükseltme gerekli");
node.warn("+msg.dosyaadı döndürür"); dönüş mesajı; } node.warn("yükseltme yok"); msg.statusCode=304; msg.payload=;
dönüş mesajı;
Anahtar düğümü daha sonra ya 304 "güncelleme gerekli değil" mesajının gönderilmesini ya da gerçek yeni ikili sistemin döndürülmesini ve cihaza geri gönderilmesini sağlar.
Adım 6: Güncelleme Talep Etmek için Çizime Kod Ekleyin
Sürüm numarasını bir sonraki artırışınızda otomatik olarak güncellenmesi için çizimde aşağıdaki kodun bulunması gerekir:
#Dahil etmek
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// BU_DEVICE, sonunda hw türünü tanımlayan çeşitli derleme zamanı tanımlamalarına bağlı olarak daha erken ayarlanır, örn. #define BU_DEVICE "d1_mini" const char * updateUrl="https://192.168.1.4:1880/update/"BU_CİHAZ; // bu benim ahududu Pi sunucum, 1880 varsayılan NODE-RED bağlantı noktasıdır // /update, sunucunun "dinlemesi" için seçtiğim url'dir, ardından aygıt türü gelir … bool factUpdate(bool sketch=false) { Dize mesajı; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate(yanlış); if(sketch){ ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // **************** "İşi yapan" satır budur } else { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } if(ret!=HTTP_UPDATE_NO_UPDATES){ if(ret==HTTP_UPDATE_OK){
Serial.printf("GÜNCELLEME BAŞARILI");
true döndür; } else { if(ret==HTTP_UPDATE_FAILED){
Serial.printf("Yükseltme Başarısız");
} } } false döndür; }
7. Adım: Son olarak Güncellemeyi Başlatın
Önyükleme sırasında veya belki bir MQTT mesajına yanıt olarak (benim yaptığım gibi) aşağıdaki kodu çalıştırın:
if(_actualUpdate(true)) ESP.restart();
// veya SPIFFS için…
if(_actualUpdate(false)) ESP.restart();
Cihaz kendini güncelleyecek ve sunucudan en son kodu çalıştırarak yeniden başlatacaktır. Benim için 33 cihazı manuel olarak güncellemekten çok daha kolay!
Ev Otomasyonu, Nesnelerin İnterneti ve ESP8266'nın programlanması hakkında daha birçok yararlı bilgiyi Blogum'da bulabilirsiniz.
Önerilen:
(GÜNCELLEME - KÜÇÜK BİR SORUN VAR) PC İÇİN USB OYUN KONTROL CİHAZI: 10 Adım (Resimlerle)
(GÜNCELLEME - KÜÇÜK BİR SORUN VAR) PC İÇİN USB OYUN KONTROL CİHAZI: HER OYUN İÇİN BİR OYUN KONTROL CİHAZI(HEMEN)
Bir Raspberry Pi'ye Tam Windows 10 Kurun!: 5 Adım
Bir Raspberry Pi'ye Tam Windows 10 yükleyin!: Raspberry Pi, birçok şey yapmak için harika bir tahtadır. IOT, Ev otomasyonu vb. gibi şeyler hakkında birçok talimat var. Bu talimatta size Raspberry PI 3B'nizde tam Windows masaüstünü nasıl çalıştırabileceğinizi göstereceğim
Bir WiFi Erişim Noktası Oluşturun ve NodeMCU V3'te Bir Web Sunucusu Sağlayın: 4 Adım
Bir WiFi Erişim Noktası Oluşturun ve NodeMCU V3'te bir Web Sunucusu Sağlayın: Bir önceki makalede NodeMCU ESP8266'nın nasıl kullanılacağından bahsetmiştim. Bu yazımda NodeMCU ESP8266'yı Arduini IDE'ye nasıl ekleyeceğimi anlatıyorum. NodeMCU ESP8266 kullanarak internet üzerinden iletişim kurmanın birkaç yolu var. NodeMCU'yu bir
Bir Ticaret Kartı Makinesi için Kart Sıralayıcısı (Güncelleme 2019-01-10): 12 Adım (Resimlerle)
Bir Ticaret Kartı Makinesi için Kart Sıralayıcısı (Güncelleme 2019-01-10): Bir Ticaret Kartı Makinesi için Kart SıralayıcısıDeğişim Günlüğü son adımda bulunabilir.Arka PlanProjemin motivasyonunu Kart Besleyici makalesinde zaten açıkladım. Ama kısacası, çocuklarım ve ben çok miktarda Trading Card topladık
140 $ 'dan Az Bir Ahududu Pi Bilgisayarı Kurun: 17 Adım
140$'dan Az Bir Fiyata Raspberry Pi Bilgisayar Oluşturun: Mart 2017 güncellemesi: Lise öğrenci sınıfında kullanım için düşük fiyata kabul edilebilir performansa sahip Raspberry Pi tabanlı bir bilgisayar oluşturun. Çoğu kişi Windows veya MAC işletim sistemlerine aşinadır. Linux farklı bir işletim sistemidir. Bu öğreticinin bir amacı