Inhoudsopgave:
- Stap 1: Wat je nodig hebt
- Stap 2: Maak een opslagplaats voor binaire firmware
- Stap 3: Maak de binaire bestanden
- Stap 4: Creëer de serverstroom
- Stap 5: voeg de serverlogica toe
- Stap 6: Voeg code toe aan de schets om een update aan te vragen
- Stap 7: Start ten slotte de update
Video: Een ESP8266 Automatic Update Server instellen: 7 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Veel mensen gebruiken nu de ESP8266 in zijn vele gedaanten (ESP-01S, Wemos D1, NodeMCU, Sonoff enz.) voor domoticasystemen. Als je je eigen code schrijft (zoals ik), wordt het een beetje vervelend om elk van deze afzonderlijk bij te werken, zelfs via OTA (over-the-air).
Mijn eigen systeem heeft bijvoorbeeld 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV en een NodeMCU die een gemeenschappelijke codebasis delen, dus dat zijn in totaal 33 apparaten om te updaten als ik een eenvoudige code maak verandering.
Maar er is een eenvoudigere manier: een "updateserver". De uitstekende Arduino IDE + ESP8266-kern heeft een bibliotheek om het meeste werk te doen (ESP8266httpUpdate), maar je moet weten hoe je je eigen server moet opzetten om het te laten werken.
Deze Instructable laat je zien hoe je een NODE-RED-server gebruikt, maar dezelfde logica is van toepassing op elke servertechnologie naar keuze, b.v. Apache + PHP enz
Stap 1: Wat je nodig hebt
- Arduino IDE
- ESP8266 kern
- Elk ESP8266-ontwikkelbord met 1M of meer flash-RAM
- Een webserver (zelfs een bescheiden Raspberry Pi is voldoende - dat is wat ik gebruik)
- (optioneel) mkspiffs-tool als u een SPIFFS-bestandssysteemkopie automatisch wilt bijwerken
Stap 2: Maak een opslagplaats voor binaire firmware
Op mijn server heb ik een map met de naam /home/pi/trucFirmware die de verschillende apparaatfirmwares en SPIFFS-afbeeldingen bevat
Ik onderhoud een afzonderlijk binair bestand voor elk hardwaretype (van een enkel bronbestand met een paar #defines) en wanneer een nieuwe release gereed is, gebruik ik de Arduino IDE "sketch/Export compiled Binary" menuopdracht voor elk doelapparaat. Merk op dat zelfs hoewel er 5 verschillende hardwaretypes zijn, zijn er slechts twee SPIFFS-binaire bestanden: een 1M- en een 4M-versie - geconstrueerd met de mkspiffs-tool - aangezien alle apparaten een 1M- of 4M-flitser hebben.
Stap 3: Maak de binaire bestanden
Gebruik de Arduino IDE-menuoptie Sketch/Export Compiled Binary om de firmware te maken die naar het apparaat wordt geüpload wanneer het erom vraagt van de updateserver.
Als je een SPIFFS-binary nodig hebt, moet je de tool mkspiffs installeren.
Als je het eenmaal hebt, is het bouwen van het SPIFFS-binaire bestand eenvoudig. Ik heb een batchbestand van één regel voor de 1M-versie met het versienummer als parameter (%1)
mkspiffs -c data/spiffs_%1_1M.bin
en nog een voor de 4M-versie:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Ik kopieer vervolgens alle gecompileerde binaire bestanden en de SPIFFS.binary-bestanden naar de repository
Stap 4: Creëer de serverstroom
Ik gebruik NODE-RED, maar de eenvoudige logica zal hetzelfde zijn op elke servertechnologie / taal.
a) Definieer een url die luistert naar het ESP8266httpUpdate-verzoek. Mijn raspberryPi serevr staat op 192.168.1.4 en luistert op poort 1880 naar /update met het hardwaretype toegevoegd. Dus als ik een binair bestand voor een Wemos D1 Mini ga aanvragen, eindigt de url als:
192.168.1.4:1880/update/d1_mini
b) Maak code om de volgende logica te verwerken:
ESP8266: "Hallo, ik gebruik firmwareversie a.b.c, heb je een nieuwere versie?" Server: "Laat me eens kijken … ah ja ik heb a.b.d - hier komt het…"
Als er een nieuwere versie bestaat, stuurt de server deze gewoon als een lading binaire gegevens in het http-antwoord. De ESP8266httpUpdate-klasse doet het lastige deel van het kopiëren van het binaire bestand naar het geheugen, waarbij het opstartadres van de firmware wordt gewijzigd in de nieuwe code en vervolgens (indien gevraagd) het apparaat opnieuw wordt opgestart om de nieuwe code uit te voeren.
Als er aan de andere kant geen hogere versie is, antwoordt deze met een http 304-fout die in feite zegt: "Ik heb niets voor jou" en je code blijft normaal draaien.
Stap 5: voeg de serverlogica toe
Het eerste knooppunt in de stroom "luistert" naar een http-verzoek naar de URL https://192.168.1.4:1880/update met het apparaattype toegevoegd. Het geeft dit door aan het functieknooppunt "Zoekpad samenstellen" met de volgende javascript-code:
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-grootte']; msg.payload="/home/pi/trucFirmware/spiffs_*_"+(sz/1048576)+"M.bin"; } bericht terugsturen;
Dit stelt gewoon het juiste pad in met wildcard voor de sys-functie die volgt, die eenvoudig wordt uitgevoerd
ls - r
De output wordt dan naar het functieknooppunt "Vergelijk versies" gevoerd:
var f=msg.payload.split("\n")[0];msg.bestandsnaam=f;
if(msg.mode=="schets"){
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(bericht.versie <f){
node.warn("upgrade vereist");
node.warn("zal "+msg.bestandsnaam" teruggeven); bericht terugsturen; } node.warn("geen upgrade"); msg.statusCode=304; msg.payload=;
bericht terugsturen;
Het schakelknooppunt zorgt er vervolgens voor dat ofwel het 304-bericht "geen update nodig" wordt verzonden of dat het daadwerkelijke nieuwe binaire bestand wordt geretourneerd en teruggestuurd naar het apparaat.
Stap 6: Voeg code toe aan de schets om een update aan te vragen
De schets moet de volgende code bevatten, zodat deze automatisch wordt bijgewerkt de volgende keer dat u het versienummer verhoogt:
#erbij betrekken
#definieer TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE wordt eerder ingesteld, afhankelijk van verschillende compile-time-definities // die uiteindelijk het hw-type definiëren, b.v. #define THIS_DEVICE "d1_mini" const char * updateUrl="https://192.168.1.4:1880/update/"THIS_DEVICE; // dit is mijn Raspberry Pi-server, de 1880 is de standaard NODE-RED-poort // /update is de url die ik heb gekozen voor de server om naar te "luisteren", gevolgd door het apparaattype … bool actualUpdate(bool sketch=false) { Tekenreeksbericht; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate(false); if(schets){ ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // **************** Dit is de regel die "de zaken doet" } else { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } if(ret!=HTTP_UPDATE_NO_UPDATES){ if(ret==HTTP_UPDATE_OK){
Serial.printf("UPDATE IS GESLAAGD");
retourneer waar; } else { if(ret==HTTP_UPDATE_FAILED){
Serial.printf ("Upgrade mislukt");
} } } onwaar retourneren; }
Stap 7: Start ten slotte de update
Voer tijdens het opstarten, of misschien als reactie op een MQTT-bericht (zoals ik doe), de volgende code uit:
if(_actualUpdate(true)) ESP.restart();
// of voor SPIFFS…
if(_actualUpdate(false)) ESP.restart();
Het apparaat zal zichzelf updaten en opnieuw opstarten met de nieuwste code van de server. Het is voor mij een stuk eenvoudiger dan het handmatig updaten van 33 apparaten!
Veel meer nuttige informatie over domotica, IOT en het programmeren van de ESP8266 is te vinden op Mijn blog
Aanbevolen:
Een handtekening instellen op een mobiele Outlook-app: 5 stappen
Een handtekening instellen op een mobiele Outlook-app: als u in de zakenwereld werkt, bent u hoogstwaarschijnlijk zeer vertrouwd geraakt met de desktopversie van Microsoft Outlook. Outlook is een geweldige tool waarmee u e-mails kunt verzenden, bestanden kunt opslaan, vergaderingen kunt plannen en op elke gewenste manier kunt aanpassen
Een Twitch-stream instellen: 7 stappen
Een Twitch-stream opzetten: vandaag laat ik de stappen zien om te beginnen met streamen op twitch.tv met behulp van Open Broadcasting Software. Dit wordt gebruikt voor een technisch schrijfproject. Ik hoop dat dit je helpt bij het instellen van je stream. ***Iets om in gedachten te houden: je kunt niet streamen o
Een Bluetooth-dongle instellen op een Macbook Pro: 6 stappen
Hoe een Bluetooth-dongle op een Macbook Pro in te stellen: Achtergrond: Na veel zoeken en graven door verouderde forums en ondersteuningsthreads (meestal doorspekt met spottend en nutteloos commentaar), slaagde ik erin om met succes een Bluetooth-dongle op mijn Macbook in te stellen. Er schijnen veel mensen te zijn
CircuitPython met een Itsybitsy M4 Express 1: instellen: 9 stappen
CircuitPython met een Itsybitsy M4 Express 1: Setup: nieuw bij codering? Heb je alleen Scratch gebruikt en wil je overstappen op een tekstuele taal die gemakkelijk toegang geeft tot fysiek computergebruik met LED's, schakelaars, displays en sensoren? Dan is dit misschien iets voor jou. Ik heb gemerkt dat deze site veel Instructables bevat ab
Een FTP-server instellen met Filezilla!: 7 stappen
Een FTP-server opzetten met Filezilla!: 1. Wat is een FTP-server? 2. Waarom zou ik er een willen maken? 1. File Transfer Protocol (FTP) is een netwerkprotocol dat wordt gebruikt om gegevens van de ene computer naar de andere over te dragen via een netwerk, zoals internet. FTP is een protocol voor bestandsoverdracht voor bijv