Passa ai contenuti principali

Wemos D1 mini ESP8266 - Aggiornamenti OTA


Wemos D1 mini - Aggiornamenti OTA


Cosa è

Può risultare scomodo dover collegare con un cavo usb un ESP8266 e derivati (come in questo caso un Wemos D1 mini) ad un pc per un semplice aggiornamento software. 
OTA sta per "Over The Air".
Con questa tecnologia si ha la possibilità di modificare il firmware di questi microcontrollori mediante la wi-fi. 

Come funziona

Per ottenere questa funzionalità ci si è inventato un meccanismo molto semplice: il nostro microcontrollore, dotato della capacità di aggiornamenti OTA, ha in carico un firmware che all'avvio non fa altro che, usando la libreria ArduinoOTA, collegarsi alla wi-fi (della quale avremo fornito SSID e Password) e mediante il "Multicast DNS" dichiara la sua presenza sulla WI-FI LAN, l'Ide di Arduino rileva questa presenza e ci fornisce il supporto alla comunicazione mediante wi-fi (la porta di rete rilevata prenderà il nome del modello e l'ultima parte del suo mac-address per identificarlo, se non risulta chiudere e rilanciare Arduino IDE), a quel punto potremo caricare i nuovi firmware direttamente dalla Wi-Fi, senza il bisogno di collegare alla porta USB il dispositivo:


Un'occhiata al codice

Prima di tutto diamo una occhiata al codice del firmware OTA, BasicOTA, che è possibile trovare nel menu  Funzioni > Esempi > ArduinoOTA:



Il codice è questo:


#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

#ifndef STASSID
#define STASSID "****SSID DELLA VOSTRA WI-FI*********"
#define STAPSK  "****PASSWORD DELLA VOSTRA WI-FI*********"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

// ***** DICHIARAZIONE VARIABILI

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  ArduinoOTA.setHostname("****IDENTIFICATIVO DEL DISPOSITIVO*********");

  ArduinoOTA.setPassword("****PASSWORD DI PROTEZIONE*********");


  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else { // U_FS
      type = "filesystem";
    }

    Serial.println("Start updating " + type);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) {
      Serial.println("Auth Failed");
    } else if (error == OTA_BEGIN_ERROR) {
      Serial.println("Begin Failed");
    } else if (error == OTA_CONNECT_ERROR) {
      Serial.println("Connect Failed");
    } else if (error == OTA_RECEIVE_ERROR) {
      Serial.println("Receive Failed");
    } else if (error == OTA_END_ERROR) {
      Serial.println("End Failed");
    }
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // ***** CODICE DA ESEGUIRE SOLO AL'AVVIO
}

void loop() {
  ArduinoOTA.handle();

  // ***** CODICE DA ESEGUIRE IN LOOP
}

Da notare i commenti con *******
1)  Inserire i dati di accesso alla vostra Wi-Fi
2)  Inserire la dichiarazione delle variabili necessarie al programma
3) Inserire il nome con cui volete ritrovare il dispositivo nell'elenco dei dispositivi OTA in ArduinoIDE ipotizzando di averne tanti sulla stessa lan
4)  Inserire una password per impedire che chiunque si collega alla vostra Wi-Fi possa cambiare il firmware al vostro Iot.
5)  Qui trova posto il codice da eseguire solo all'avvio del dispositivo
6)   Qui trova posto il codice da eseguire in loop

TUTTO IL RESTO DEL CODICE DEVE ESSERE RIPORTATO IN OGNI SKETCH PERCHE' OTA POSSA CONTINUARE A FUNZIONARE.


Installazione

Per rendere tutto funzionante bisogna, solo la prima volta, collegare il dispositivo al pc mediante cavo usb e selzionare la porta:


Effettuare le modifiche a "BasicOTA" come indicato prima:


Compilate e inviate al dispositivo.
Spegnete e riaccendetelo alimentandolo con un alimentatore usb o con un PowerBank e provate a cercarlo fra le porte di ArduinoIDE. Se non dovesse comparire provate a chiudere e riaprire ArduinoIDE. Il pc che esegue ArduinoIDE e il dispositivo con l'OTA devono essere collegati alla stessa rete locale.


Nota

Se non si rileva il dispositivo, nella fase preliminare, collegato mediante usb allora probabilmente ArduinoIDE non è stato dotato dei plugin necessari per gestirlo. 
Da menu File > Impostazioni inserite l'url del repo per il supporto allo specifico dispositivo:




Commenti

Post popolari in questo blog

Telecamere Ip con accesso "nascosto"

Telecamere Ip con accesso "nascosto" Storia triste di un auto-hacking obbligato che mi ha fatto scoprire come la nostra privacy è realmente messa a rischi. Storia Ho acquistato dal mercatino/fiera del Radioamatore di Fasano quattro telecamere IP. La scatola riporta "Smart Camera" LF4810. Ne ho montata una e testata in tutte le sue funzionalità per oltre un mese. Chiaramente la manualistica scarsissima, come da tradizione in questi prodotti cinesi di costo molto concorrenziale, consiste in un "pieghevole" di 4 facciate. Chiaramente non erano documentate le impostazioni necessarie per attivare i protocolli ONVIF e RTSP che mi sono indispensabili per l'uso che ne devo fare. Nonostante questa scarsa documentazione dopo l'installazione base fatta con l'apposita app: tutto sembrava corretto. Chiaramente la prima azione che ho compiuto è stata quella di cambiare la password che di default è "123". Subito dopo h...

Dynamic DNS con Duckdns.org in HTTPS

Obiettivo Avere un dominio https con certificato valido da usare come endpoint pubblico per Homeassistant e per un WebHook per i bot telegram. Fase 1 Registrazione del dominio in un servizio di dynamic DNS come https://www.duckdns.org/   : Scegliere per quale sistema operativo installare il client che si occuperà dell'aggiornamento dell'ip: Seguire la semplice guida per la configurazione del processo cron: Fase 2 Creazione del certificato e installazione sul server. Di tutto questo si occuperà una applicazione che si chiama certbot. $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt install python-certbot-apache $ sudo certbot --apache -d ol3.duckdns.org -d www.ol3.duckdns.org Fase 3 Esporre il servizio https sulla rete pubblica. Aprire o reindirizzare la porta 443 verso l'host sul quale si è fatta la configurazione di certbot dal proprio router. Il certificato di certbot è valido per novanta giorn...

JHipster - Uso base

Cosa è JHipster è un "generatore di applicazioni" che fornisce tutto lo stack necessario ad implementare una applicazione web e/o a microservizi basata su Spring Boot e AngularJs. E' dotato di un marketplace di componenti già pronte: https://www.jhipster.tech/#modules E' dotato di uno strumento web per la modellazione dello schema E-R: https://start.jhipster.tech/jdl-studio/ Prerequisiti - Java 8  - Node.js (usare la versione LTS 64-bit) - NPM viene installato con Node.js ma va aggiornato      $ npm install -g npm - Per usare il JHipster Marketplace, installare Yeoman:       $ npm install -g yo Uso base Gli step, presi dal sito ufficiale sono questi: 1. Installare JHipster:       $ npm install -g generator-jhipster Nota: per installare una versione specifica del generator:   $ npm install -g generator-jhipster@6.0.5 2. Crea una nuova directory ed entra dentro questa:   $ mkdir ...