ESP8266/32 – Programação sem fio (OTA)

Quando estamos desenvolvendo projetos utilizando ESP8266 ou mesmo ESP32 podemos nos deparar com alguns obstáculos na forma de fazer upload do código, por exemplo no Post sobre o Arduino Mega com WiFi tínhamos que configurar diversas chaves para alternar entre o Atmega2560 e o ESP8266 para fazer o upload. Em casos assim podemos utilizar uma forma de upload sem fio conhecida como OTA. Existem diferentes formas de fazer este tipo atualização nas placas ESP, neste post trataremos da mais comum durante o desenvolvimento que é utilizando o Arduino IDE.

O que é OTA

OTA é o acrônimo de Over-the-air que se refere a uma forma de atualização de software sem fio e de forma remota. OTA é um excelente recurso para aplicações IoT, pois os dispositivos podem ter firmwares e/ou configurações alterados sem a necessidade de serem recolhidos nem desmontados para serem reprogramados. Apesar desse recurso ser extremamente útil, é papel do desenvolvedor garantir que a fonte do novo firmware é confiável.

Os ESP8266 e ESP32 tem suporte para esse recurso, e não só isso, também já existe uma biblioteca com exemplos para o framework Arduino.

Existem 3 formas possíveis de atualização OTA:

  • OTA via Arduino IDE: É a forma mais simples porque o upload é feito diretamente da Arduino IDE.
  • OTA via upload de Imagem: O ESP mantém um pequeno servidor web e o usuário faz o upload dentro da interface desse servidor diretamente pelo navegador web.
  • OTA via Servidor HTTP: Neste método existe um servidor HTTP que Hospeda o firmware e sempre que a alteração deste o ESP faz o download do firmware.

Durante processo de upload OTA o ESP cumpre 4 etapas:

  1. O novo sketch será armazenado no espaço entre o sketch antigo e a spiff;
  2. Na próxima reinicialização, o “eboot” bootloader verifica os comandos;
  3. O novo sketch agora é copiado “sobre” o antigo;
  4. O novo sketch é iniciado;

Figura 1: Divisão da memoria durante o upload OTA.

Mãos à obra

Nesse post utilizarei o Arduino Mega com WiFi mas você pode utilizar outras placas baseadas no ESP8266 como Wemos D1 Mini, placa Mega 2560 Wifi R3 ou placas baseadas no ESP32 também como a Wemos D1 ESP32.

Também é necessário ter o Arduino IDE na versão 1.6.7 ou mais recente devidamente configurado para as placas ESP, veja no Guia sobre GPIO do ESP32 e no post sobre Mega WiFi como configurar a IDE para trabalhar essas placas. Todos os códigos e testes desse post foram feitos utilizando a versão 1.8.12.

Primeiro upload – USB

Seja qualquer a forma de update OTA, o primeiro upload de firmware deve ser feito através de uma porta serial.

O código abaixo funcionará tanto para ESP8266 quanto para ESP32, ele é baseado no exemplo BasicOTA.ino.

Faça o upload do código e após a conclusão verifique o endereço ip impresso no  Monitor Serial.

Figura 2: Saída do serial monitor.

Pronto agora seu ESP está pronto a receber futuras atualizações via OTA.

Segundo upload – OTA

Nesse exemplo vamos abrir duas instancias da Arduino IDE. Usaremos uma janela para fazer o upload e outra para observar as mensagens impressas no Monitor Serial.

Abra uma janela e verifique se o ESP aparece na opções de porta de rede. Caso não encontre a porta de rede, feche e abra novamente a Arduino IDE.

Figura 3: Porta de rede.

Abra uma outra janela da Arduino IDE e abra o Monitor Serial por ela. Usaremos uma janela para fazer o upload e outra para o observar as mensagens impressas no Monitor Serial.

Nesse segundo exemplo vamos alterar um pouco o primeiro código, vamos adicionar o blink como exemplo para esse post.

 

Observe no console da primeira janela o andamento do upload.

Figura 4: Console com o progresso do upload.

Observe no Monitor Serial o progresso do upload. Essas são as mensagens que configuramos nos callbacks da primeira versão do código.

 

Figura 5: Mensagens de status do update OTA.

Vale destacar que para manter a funcionalidade OTA, as futuras versões devem obrigatoriamente trazer as mesmas funções e Callbacks OTA contidas no primeiro código.

Entendendo o Código

A seguir uma breve explanação sobre as partes do primeiro código.

Inclusão das bibliotecas

Aqui fazemos a inclusão das bibliotecas que necessitamos. Note que temos as diretivas #ifdef e #else para incluir somente as bibliotecas compatíveis para cada tipo de processador.

Credenciais de rede

Função setup()

Aqui encontramos a maior parte das configurações e funções para upload OTA.

Inicialização da porta Serial

Conexão com a rede por WiFi

Aqui inicializamos o ESP no modo estação. Logo após ele tentará se conectar a rede que informamos anteriormente. Caso não consiga, o ESP será reiniciado.

Segurança(Opcional)

Esta é uma etapa opcional neste exemplo, mas você pode escolher algums parâmetros como o hostname e a porta que será utilizada no upload. Ainda poderá configurar uma senha para upload, podendo ser simples ou utilizando hash MD5.

Callbacks do processo OTA

Função loop()

Espere por um upload

Por hoje é só, aguardo você no próximo post. Qualquer dúvida ou sugestão deixe registrado no campo de comentários.

Yure Albuquerque

Graduando em Tecnologia Mecatrônica Industrial. Tenho experiência com Arduino e Raspberry Pi. Atualmente experimentando novas tecnologias como ESP32 e compartilhando no blog da Smart Kits.

Post navigation

5 Comentários

  • Saudações Yure, primeiramente, obrigado pelo tutorial explicativo.
    Há algum tempo atrás, eu já havia tentado por esse método mas, dava muito problema; não encontrava o IP, etc. Agora, com o seu tutorial, fiz todo o procedimento e deu certo mas, tenho uma questão sobre o Python 3.x. Você diz que este deve ser instalado manualmente ok? Então, eu não instalei o Python e, mesmo assim, funcionou, então, para me certificar, eu fiz uma pesquisa na Lupa de pesquisa do Windows e foi encontrado aplicativos do Python3, inclusive no pacote do esp8266, na pasta ‘AppData\Local\Arduino15\staging\packages’, está lá o python-3.7.2.post1-embed-win32v2. Sendo assim, não há necessidade de instalar, não é?
    Eu havia tb tentado com o método AsyncElegantOTA que, segundo o Rui, do canal Random Nerds, diz que é o método mais eficiente mas, não consegui, enfim, obrigado mais uma vez.

  • Olá Yure, primeiramente, obrigado pelo tutorial.
    A principio, qdo eu carreguei o primeiro código com o BasicOTA, ele mostrou o endereço IP do ESP na aba Porta da IDE do Arduino, então carreguei com sucesso um outro código com as funções OTA via WiFi. No outro dia, abri a IDE do Arduino mas, o IP já não aparece mais na porta. Fui na placa ESP e apertei o botão RST mas, nada. Será que isso tem a ver com o Windows Defender Firewall? Vc tem ciência sobre esse problema? Obg

  • Perdoe minha pergunta de novato… Naquela imagem onde aparece a porta e logo abaixo o endereço para nova conexão… Esse endereço não apareceu… Onde será que estou errando? Obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Blynk – Medição de temperatura com DS18B20

Blynk IoT – Monitoramento com ESP8266 e Sensor de Umidade do Solo (Higrômetro)

Introdução a tecnologia LoRa