Sisällysluettelo:
- Vaihe 1: Mitä tarvitset
- Vaihe 2: Luo arkisto binääristen laiteohjelmistojen säilyttämiseksi
- Vaihe 3: Luo binääritiedostot
- Vaihe 4: Luo palvelinvirta
- Vaihe 5: Lisää palvelinlogiikka
- Vaihe 6: Lisää koodi luonnokseen päivityksen pyytämiseksi
- Vaihe 7: Aloita lopuksi päivitys
Video: ESP8266 -automaattisen päivityspalvelimen määrittäminen: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:04
Monet ihmiset käyttävät nyt ESP8266: ta monissa muodoissaan (ESP-01S, Wemos D1, NodeMCU, Sonoff jne.) Kotiautomaatiojärjestelmiin. Jos kirjoitat oman koodisi (kuten minäkin), näiden päivittäminen erikseen jopa OTA: n kautta (langattomasti) tulee hieman työlääksi.
Esimerkiksi omassa järjestelmässäni on 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV ja NodeMCU, joilla on yhteinen koodikanta, joten päivitettäviä laitteita on yhteensä 33 muuttaa.
Mutta on olemassa helpompi tapa: "päivityspalvelin". Erinomaisessa Arduino IDE + ESP8266 -ytimessä on kirjasto, joka suorittaa suurimman osan työstä (ESP8266httpUpdate), mutta sinun on tiedettävä, kuinka perustaa oma palvelin, jotta se toimisi.
Tämä opas näyttää kuinka NODE-RED-palvelinta käytetään, mutta sama logiikka koskee mitä tahansa valitsemasi palvelintekniikkaa, esim. Apache + PHP jne
Vaihe 1: Mitä tarvitset
- Arduino IDE
- ESP8266 ydin
- Mikä tahansa ESP8266 -kehityskortti, jossa on 1M tai enemmän flash -muistia
- Verkkopalvelin (jopa nöyrä vadelma Pi tekee - sitä käytän)
- (valinnainen) mkspiffs-työkalu, jos haluat päivittää SPIFFS-tiedostojärjestelmän kuvan automaattisesti
Vaihe 2: Luo arkisto binääristen laiteohjelmistojen säilyttämiseksi
Palvelimessani on kansio/home/pi/trucFirmware, joka sisältää erilaisia laiteohjelmistoja ja SPIFFS -kuvia
Ylläpidän erillistä binääriä kullekin laitteistotyypille (yhdestä lähdetiedostosta, jossa on muutama #defines) ja kun uusi julkaisu on valmis, käytän Arduino IDE "sketch/Export compiled Binary" -valikkokomentoa kullekin kohdelaitteelle. Huomaa, että jopa vaikka on olemassa 5 erilaista laitteistotyyppiä, on vain kaksi SPIFFS -binääriä: 1M- ja 4M -versio, joka on rakennettu mkspiffs -työkalulla - koska kaikissa laitteissa on joko 1M- tai 4M -salama.
Vaihe 3: Luo binääritiedostot
Luo laiteohjelmisto, joka ladataan laitteelle, kun se pyytää sitä päivityspalvelimelta, käyttämällä Arduino IDE -valikkoluonnosta/Vie käännetty binääri.
Jos tarvitset SPIFFS -binaarin, sinun on asennettava mkspiffs -työkalu.
Kun olet saanut sen, SPIFFS -binaarin rakentaminen on yksinkertaista. Minulla on yksirivinen erätiedosto 1M-versiolle, joka ottaa versionumeron parametriksi (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
ja toinen 4M -versiolle:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Kopioin sitten kaikki kootut binääritiedostot ja SPIFFS.binaaritiedostot arkistoon
Vaihe 4: Luo palvelinvirta
Käytän NODE-REDia, mutta yksinkertainen logiikka on sama kaikilla palvelintekniikoilla / kielillä.
a) Määritä URL -osoite, joka kuuntelee ESP8266httpUpdate -pyyntöä. RaspberryPi serevr on 192.168.1.4 ja kuuntelee porttia 1880 for /update ja laitteistotyyppi on liitetty. Joten jos aion pyytää binääriä Wemos D1 Minille, URL -osoite päättyy seuraavasti:
192.168.1.4:1880/update/d1_mini
b) Luo koodi seuraavan logiikan käsittelemiseksi:
ESP8266: "Hei, minulla on laiteohjelmistoversio a.b.c, onko sinulla uudempi versio?" Palvelin: "Anna minun nähdä … ah kyllä, minulla on a.b.d - tässä se tulee …"
Jos uudempi versio on olemassa, palvelin lähettää sen vain binaaridatan kuormana http -vastauksessa. ESP8266httpUpdate -luokka tekee vaikean osan binaarin kopioimisesta muistiin ja muuttaa laiteohjelmiston käynnistysosoitteen uuteen koodiin kuin (pyydettäessä) laitteen uudelleenkäynnistys uuden koodin suorittamiseksi.
Jos toisaalta ei ole korkeampaa versiota, se vastaa http 304 -virheellä, joka sanoo käytännössä: "Minulla ei ole sinulle mitään" ja koodisi toimii edelleen normaalisti.
Vaihe 5: Lisää palvelinlogiikka
Vuon ensimmäinen solmu "kuuntelee" http -pyyntöä URL -osoitteeseen https://192.168.1.4:1880/update laitetyypin kanssa. Se välittää tämän "Rakenna hakupolku" -funktiosolmuun, jolla on seuraava javascript -koodi:
msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-version"];
msg.mode = h ["x-esp8266-mode"];
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"; } palauta viesti;
Tämä vain määrittää sopivan polun, jossa on jokerimerkki seuraavaa sys -toimintoa varten, joka yksinkertaisesti suoritetaan
ls - r
Tulos syötetään sitten "Vertaa versioita" -toimintasolmuun:
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
jos (msg.mode == "luonnos") {
f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } else {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.korvaa (/_ / dM \.bin/, ""); }
jos (msg.version <f) {
node.warn ("päivitys vaaditaan");
node.warn ("palauttaa"+viesti.tiedostonimi); palauta viesti; } node.warn ("ei päivitystä"); msg.statusCode = 304; msg.payload = ;
palauta viesti;
Kytkinsolmu varmistaa sitten, että joko 304 "päivitystä ei tarvita" -viesti lähetetään tai varsinainen uusi binääri palautetaan ja lähetetään takaisin laitteelle.
Vaihe 6: Lisää koodi luonnokseen päivityksen pyytämiseksi
Luonnoksessa on oltava seuraava koodi, jotta se päivittyy automaattisesti seuraavan kerran, kun lisäät versionumeroa:
#sisältää
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// TÄMÄ_LAITE asetetaan aikaisemmin riippuen eri kääntämisajan määritelmistä //, jotka lopulta määrittävät hw-tyypin, esim. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // tämä on minun vadelma Pi-palvelimeni, 1880 on NODE-RED-oletusportti // /päivitys on URL-osoite, jonka valitsin palvelimelle "kuunneltavaksi", ja sen jälkeen laitetyyppi … bool factUpdate (bool sketch = false) {Merkkijonoviesti; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (epätosi); if (luonnos) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // ***************** Tämä on rivi, joka "tekee liiketoimintaa"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } jos (ret! = HTTP_UPDATE_NO_UPDATES) {jos (ret == HTTP_UPDATE_OK) {
Serial.printf ("UPDATE SUCCEEDED");
palaa tosi; } muu {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Päivitys epäonnistui");
}}} return false; }
Vaihe 7: Aloita lopuksi päivitys
Käynnistyshetkellä tai ehkä vastauksena MQTT -viestiin (kuten minäkin) suorita seuraava koodi:
if (_actualUpdate (true)) ESP.restart ();
// tai SPIFFS…
if (_actualUpdate (false)) ESP.restart ();
Laite päivittää itsensä ja käynnistää uusimman koodin palvelimelta. Se on minulle paljon yksinkertaisempaa kuin 33 laitteen manuaalinen päivittäminen!
Paljon enemmän hyödyllistä tietoa kodin automaatiosta, IOT: sta ja ESP8266: n ohjelmoinnista löytyy Omasta blogistani
Suositeltava:
Raspberry Pi: n määrittäminen Azure IoT Hubin avulla: 5 vaihetta
Raspberry Pi: n käyttöönotto Azure IoT Hubin avulla: Tämän ohjeen tarkoitus on saada käytännön käytännönläheinen altistuminen Azure IoT Hubin ominaisuuksille. Artikkeli kattaa rekisteröitymisen Azure IoT Hubiin, Raspberry Pi: n määrittämisen ja Pi: n yhdistämisen Azure IoT Hubiin telemetrian lähettämiseksi
Allekirjoituksen määrittäminen Mobile Outlook -sovelluksessa: 5 vaihetta
Allekirjoituksen määrittäminen Mobile Outlook -sovelluksessa: Jos työskentelet yritysmaailmassa, olet todennäköisesti tutustunut hyvin hyvin Microsoft Outlookin työpöytäversioon. Outlook on loistava työkalu, jonka avulla voit lähettää sähköpostiviestejä, tallentaa tiedostoja, ajoittaa kokouksia ja mukauttaa haluamallasi tavalla
FreeRTOSin määrittäminen alusta alkaen STM32F407 Discovery Kit -sovelluksessa: 14 vaihetta
FreeRTOSin määrittäminen alusta alkaen STM32F407 Discovery Kit -sovelluksella: FreeRTOSin valitseminen reaaliaikaiseksi käyttöjärjestelmäksi upotetulle projektillesi on loistava valinta. FreeRTOS on todella ilmainen ja tarjoaa monia yksinkertaisia ja tehokkaita RTOS -ominaisuuksia. Mutta freeRTOSin asentaminen tyhjästä voi olla vaikeaa tai voin sanoa bi
Ohjelmoinnin määrittäminen C/C ++: ssa: 5 vaihetta
Ohjelmoinnin määrittäminen C/C ++: ssa: C ja C ++ ovat suosittuja ohjelmointikieliä, jotka tarjoavat nopean pääsyn kaavojen tekemiseen ja monimutkaisten ongelmien ratkaisemiseen minimaalisilla resursseilla. Ongelmana on löytää tapa kääntää ja tehdä ohjelma suoritettavaksi. Yksi vaihtoehdoista voi olla
Twitch -virran määrittäminen: 7 vaihetta
Twitch -virran määrittäminen: Tänään aion näyttää vaiheet, joilla voit aloittaa suoratoiston twitch.tv -ohjelmassa Open Broadcasting Software -ohjelmiston avulla. Tätä käytetään teknisessä kirjoitusprojektissa. Toivottavasti tämä auttaa sinua striimisi määrittämisessä. *** Muistettavaa: Et voi suoratoistaa