Índice:
- Etapa 1: O que você precisa
- Etapa 2: Criar um Repositório para Manter Firmwares Binários
- Etapa 3: Criar os binários
- Etapa 4: crie o fluxo do servidor
- Etapa 5: adicionar a lógica do servidor
- Etapa 6: adicionar código ao esboço para solicitar uma atualização
- Etapa 7: finalmente, inicie a atualização
Vídeo: Configurar um servidor de atualização automática ESP8266: 7 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Muitas pessoas agora estão usando o ESP8266 em suas várias formas (ESP-01S, Wemos D1, NodeMCU, Sonoff etc.) para sistemas de automação residencial. Se você escrever seu próprio código (como eu faço), atualizar cada um deles separadamente, mesmo via OTA (pelo ar), torna-se um pouco tedioso.
Meu próprio sistema, por exemplo, tem 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV e um NodeMCU que compartilham uma base de código comum, ou seja, 33 dispositivos ao todo para atualizar quando faço um código simples mudança.
Mas existe uma maneira mais fácil: um "servidor de atualização". O excelente núcleo do Arduino IDE + ESP8266 tem uma biblioteca para fazer a maior parte do trabalho (ESP8266httpUpdate), mas você precisa saber como configurar seu próprio servidor para fazê-lo funcionar.
Este Instructable mostra como usar um servidor NODE-RED, mas a mesma lógica se aplica a qualquer tecnologia de servidor de sua escolha, por exemplo, Apache + PHP etc
Etapa 1: O que você precisa
- IDE Arduino
- ESP8266 core
- Qualquer placa dev ESP8266 com 1M ou mais de RAM flash
- Um servidor da Web (até mesmo um humilde Pi de framboesa serve - é o que eu uso)
- (opcional) ferramenta mkspiffs se você deseja atualizar automaticamente uma imagem do sistema de arquivos SPIFFS
Etapa 2: Criar um Repositório para Manter Firmwares Binários
No meu servidor, tenho uma pasta chamada / home / pi / trucFirmware que contém os diversos firmwares de dispositivos e imagens SPIFFS
Eu mantenho um binário separado para cada tipo de hardware (de um único arquivo de origem com alguns # define) e quando uma nova versão está pronta eu uso o comando de menu "esboço / Exportar binário compilado" do IDE do Arduino para cada dispositivo de destino. Observe que até embora existam 5 tipos de hardware diferentes, existem apenas dois binários SPIFFS: uma versão 1M e uma versão 4M - construída com a ferramenta mkspiffs - uma vez que todos os dispositivos têm flash de 1M ou 4M.
Etapa 3: Criar os binários
Usando a opção de menu do Arduino IDE sketch / Export Compiled Binary, crie o firmware que será carregado para o dispositivo quando ele solicitar do servidor de atualização.
Se precisar de um binário SPIFFS, você precisará instalar a ferramenta mkspiffs.
Depois de obtê-lo, construir o binário SPIFFS é simples. Eu tenho um arquivo em lote de uma linha para a versão 1M que leva o número da versão como parâmetro (% 1)
mkspiffs -c data / spiffs_% 1_1M.bin
e outro para a versão 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data / spiffs_% 1_4M.bin
Em seguida, copio todos os binários compilados e os arquivos SPIFFS.binary para o repositório
Etapa 4: crie o fluxo do servidor
Estou usando o NODE-RED, mas a lógica simples será a mesma em qualquer tecnologia / linguagem de servidor.
a) Defina um url que ouvirá a solicitação ESP8266httpUpdate. Meu serevr raspberryPi está em 192.168.1.4 e escuta na porta 1880 por / atualizar com o tipo de hardware anexado. Portanto, se vou solicitar um binário para um Wemos D1 Mini, a url terminará como:
192.168.1.4:1880/update/d1_mini
b) Crie um código para lidar com a seguinte lógica:
ESP8266: "Olá, estou executando a versão de firmware a.b.c, você tem uma versão mais recente?" Servidor: "Deixe-me ver … ah sim, eu tenho a.b.d - aí vem …"
Se houver uma versão mais recente, o servidor apenas a enviará como um carregamento de dados binários na resposta http. A classe ESP8266httpUpdate faz a parte complicada de copiar o binário na memória, alterando o endereço de inicialização do firmware para o novo código do que (se solicitado) reinicializar o dispositivo para executar o novo código.
Se por outro lado não houver uma versão superior, ele responde com um erro http 304 que efetivamente diz: "Não tenho nada para você" e seu código continua a funcionar normalmente.
Etapa 5: adicionar a lógica do servidor
O primeiro nó no fluxo "escuta" uma solicitação http para url https://192.168.1.4:1880/update com o tipo de dispositivo anexado. Ele passa isso para o nó de função "Construir caminho de pesquisa", que possui o seguinte código javascript:
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"; } return msg;
Isso apenas configura o caminho apropriado com curinga para a função sys que se segue, que simplesmente executa
ls - r
A saída é então enviada para o nó de função "Comparar versões":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (msg.mode == "sketch") {
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 ("atualização necessária");
node.warn ("retornará" + msg.filename); return msg; } node.warn ("sem atualização"); msg.statusCode = 304; msg.payload = ;
return msg;
O nó de comutação então garante que a mensagem 304 "nenhuma atualização necessária" seja enviada ou o novo binário real seja retornado e enviado de volta ao dispositivo.
Etapa 6: adicionar código ao esboço para solicitar uma atualização
O esboço precisa ter o seguinte código incluído para que ele seja atualizado automaticamente na próxima vez que você aumentar o número da versão:
#incluir
# define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE é definido anteriormente dependendo de várias definições de tempo de compilação // que eventualmente definem o tipo de hw, por exemplo, #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // este é meu servidor raspberry Pi, o 1880 é a porta NODE-RED padrão // / update é o url que escolhi para o servidor "ouvir", seguido pelo tipo de dispositivo … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (false); if (esboço) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Esta é a linha que "faz o negócio"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("ATUALIZAÇÃO COM SUCESSO");
return true; } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Falha na atualização");
} } } retorna falso; }
Etapa 7: finalmente, inicie a atualização
No momento da inicialização, ou talvez em resposta a uma mensagem MQTT (como eu), execute o seguinte código:
if (_actualUpdate (true)) ESP.restart ();
// ou para SPIFFS…
if (_actualUpdate (false)) ESP.restart ();
O dispositivo se atualizará e reinicializará executando o código mais recente do servidor. É muito mais simples para mim do que atualizar manualmente 33 dispositivos!
Muitas outras informações úteis sobre Domótica, IOT e programação do ESP8266 podem ser encontradas em Meu Blog
Recomendado:
Atualização barata da broca sem fio!: 4 etapas
Atualização barata da furadeira sem fio!: Desta vez, vou compartilhar como atualizar a bateria barata da furadeira sem fio. A única coisa que vamos atualizar é apenas a própria bateria, uma vez que a furadeira barata tem uma bateria pequena. Vamos adicionar algumas funções na bateria ! Recursos adicionados: Carregue o b
ESP8266 POV Fan com relógio e atualização de texto da página da Web: 8 etapas (com imagens)
ESP8266 POV Fan with Clock e Web Page Text Update: Esta é uma velocidade variável, POV (Persistence Of Vision), Fan que exibe intermitentemente a hora e duas mensagens de texto que podem ser atualizadas " on the fly. &Quot; The POV Fan também é um servidor web de página única que permite que você altere os dois textos me
Como configurar a direção automática John Deere: 5 etapas (com fotos)
Como configurar a direção automática da John Deere: A John Deere criou um sistema de tecnologia que pode ser usado para economizar combustível, economizar tempo, economizar equipamento, economizar dinheiro em custos de insumos e fornecer eficiência às fazendas. Este vídeo vai ensinar as pessoas como instalar essa tecnologia em um trator e fazer
Atualização de firmware Esp8266: 7 etapas
Atualização de firmware Esp8266: O módulo ESP8266 é um módulo sem fio barato. Ele tem SOC (sistema no chip) que é capaz de fornecer wi-fi a qualquer microcontrolador / microprocessador. O esp8266 pode ser usado de duas maneiras. Standalone esp8266 Esp8266 com framboesa pi ou arduino ou
Como configurar o Samba (servidor de arquivos): 6 etapas
Como configurar o Samba (servidor de arquivos): Este Instructable irá guiá-lo através da configuração do Samba. Este Instructable é baseado no Linux Ubuntu 9.04. As instruções sobre como configurá-lo com versões mais recentes serão praticamente idênticas. Vou me concentrar apenas em configurar um servidor de arquivos neste Instr