Jump to content
  • Sign Up
Støtt hjemmeautomasjon.no!
  • Fermate
    Fermate

    ESP32/MQTT OTA made simple (6)

    Med MQTT biblioteket vi har brukt til nå er OTA latterlig enkelt. Bare legg til en (eller begge) av disse linjene:
     

    Sitat
      MQTTclient.enableHTTPWebUpdater("meg","hemmelig"); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overridded with enableHTTPWebUpdater("user", "password").
      MQTTclient.enableOTA("pwd"); // Enable OTA (Over The Air) updates. Password defaults to MQTTPassword. Port is the default OTA port. Can be overridden with enableOTA("password", port).
     
     

    OTA (Over The Air (update)) er muligheten til å laste opp nye programmer til ESP32en over WiFi uten å måtte koble til en kabel.
    Det kan jo være veldig greit om prosessoren sitter i en boks i garasjen eller på loftet.

     

    Jeg har vært litt redd for å gå løs på dette siden jeg regnet med at det var komplisert og mye å lære seg, men i dag satte jeg meg ned for å se på det og oppdaget til min store glede at dette jo er kjempelett med det biblioteket vi har brukt for MQTT i denne guide serien 😄 

     

    Det er to måter å gjøre det på, jeg skal beskrive begge:

     

    Metode #1 Arduino IDE
     

    Legg til denne linjen rett etter setKeepAlive kallet

     MQTTclient.enableOTA("pwd");

     

    og endre PWD til ditt eget passord.

     

    Du kan bruke ditt eget program eller dette programmet for å teste:
     

    Sitat
    #include <EspMQTTClient.h>
     
    #define ONBOARD_LED 2 // Onboard LED
     
    //MQTT
    EspMQTTClient MQTTclient(
      "ThePromisedLAN", // SSID
      "Hallelujah!", // WiFi Password
      "192.168.1.2",  // MQTT Broker server ip
      "",   // MQTTUsername Can be omitted if not needed
      "",   // MQTTPassword Can be omitted if not needed
      "OTATestClient",     // Client name that uniquely identify your device
      1883              // The MQTT port, default to 1883. this line can be omitted
    );
     
    int blinkTime;
     
    // *********************************************************************
    void setup() {
     
      // Set pin mode for test LED
      pinMode(ONBOARD_LED,OUTPUT);
      digitalWrite(ONBOARD_LED,HIGH);
     
      // MQTTclient.setKeepAlive();
      MQTTclient.setKeepAlive(60);
      MQTTclient.enableHTTPWebUpdater("meg","hemmelig"); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overridded with enableHTTPWebUpdater("user", "password").
      MQTTclient.enableOTA("pwd"); // Enable OTA (Over The Air) updates. Password defaults to MQTTPassword. Port is the default OTA port. Can be overridden with enableOTA("password", port).
     
      MQTTclient.enableLastWillMessage("OTATestClient/status","OffLine");
    }
     
    // *********************************************************************
    void loop() {
        MQTTclient.loop();
     
      blinkTime=1000;
     
        // Onboard LED Status
        if (MQTTclient.isMqttConnected()) {
         // Blink for å vise at vi lever
         digitalWrite(ONBOARD_LED,LOW);
         delay(blinkTime);
         digitalWrite(ONBOARD_LED,HIGH);
         delay(blinkTime);
        } else {
         digitalWrite(ONBOARD_LED,HIGH); //Venter på MQTT connect
        }
     
      }
     
    // ********************** SUBS ***********************************************
    void onConnectionEstablished()
     {
     Serial.println("onConnectionEstablished");
     MQTTclient.publish("OTATestClient/status", "OnLine");  
      }


     

     

    Koble ESP32en til med kabel som vanlig og kompiler og last opp programmet. 
    Sjekk at programmet virker (testprogrammet blinker).

    Trekk nå ut USB kabelen av ESP32en og sett den på en strømforskyning (5V mellom VIN og GND)

    Eller du kan jo bruke en Mobillader og plugge USBen i den.

     

    Nå skal vi gjøre en oppdatering og laste den opp OTA:

    Endre blinkTime=1000til blinkTime=200;

     
    Ettet at ESP32en startet skal du nå ha fått et nytt valg i PORT menyen:
     
    image.png
     

    Velg denne og ikke bry deg om denne feilmeldingen:

    image.png

    Nå kan du trykke på "Upload" knappen og da skal du få opp Passordbildet:
    (Om det ikke kommer opp, prøv å restarte IDE)
     
    image.png
     
    Da er det bare å skrive inn passordet du satte i enableOTA kallet (eks. "pwd") og trykke UPLOAD.
     
    Nå kan du få noen brannmur advarsler som du svarer OK på og om alt går bra kommer meldingen:

     

    image.png

     

    Og opplastingen starter:

     

    image.png

     

    Nå skal lyset blinke mye raskere for å vise at ESPen har fått et oppdatert program 🙂 

     

    Metode #2 HTTP Webupdater

     

    I denne metoden legger du til denne linjen

    MQTTclient.enableHTTPWebUpdater("meg","hemmelig");

    med et passende brukernavn og passord.

     

    Når du har endret programmet og er klar til å laste det opp bruker du dette menyvalget:

    image.png

     

    Den vil da lage en mappe "build\esp32.esp32.esp32" under prosjektmappen og legge BIN filen der.

     

    image.png

     

     

    Du kan nå gå i en browser og skrive inn IP adressen til ESP32en som du fant i PORT valget tidligere og få login til Web serveren som nå kjører på ESP32en:

     

    image.png


    Når du har logget på får du denne flotte siden:

     

    image.png

     

     

    hvor du kan velge den ".bin" filen vi akkurat produserte og laste den opp med Update:

     

    Tada! Ferdig.

     

    Det skal finnes løsninger der ESP32en selv går å henter nye filer men det får hellere DERE lære meg.

    Jeg har altså akkurat funnet ut av dette 🙂
    Tanken var å slippe en LEGO klass en gang i uka men dette er så viktig så jeg må bare slippe denne her med en gang 🙂 

     

     

    User Feedback

    Recommended Comments

    Den var jo super. Nøyaktig samme funksjon som jeg hadde funnet på nett men betydelig enklere. Veldig greit med et allerede definert passord også...

     

    "Min" variant hadde noen svært få kodelinjer (som måtte plasseres litt strategisk om deler av progammet brukte lang tid) i tillegg til OTA.h som inneholder alle nødvendige funksjoner og som bare måtte inkluderes.

    Link to comment
    Share on other sites



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.