Manual

do

Maker

.

com

ESP8266 - Upload sem cabos (OTA)

ESP8266 - Upload sem cabos (OTA)

Upload sem cabos - Em primeiro lugar, essa board não é um Arduino, mas sim um ESP8266-EX, e a board se chama Wemos. A Wemos tem algumas características bem específicas pelo visto, mas não entendi precisamente a razão de ter um include de board exclusivamente para ela na IDE do Arduino. Não é transparente, você precisará instalar o suporte a ESP8266 na sua IDE. Existem duas maneiras de instalar o suporte, e o mais simples é através do board manager, o outro (não tão complexo) é através do Git. Vamos nos ater à primeira opção. Mas antes, preciso acrescentar que o procedimento adotado aqui serve para outras versões do ESP8266, bastando apenas escolher seu tipo no menu. Inclusive, a referência para download do suporte ao Wemos na IDE do Arduino vem do repositório do ESP8266.

Incluir suporte a novas boards na IDE do Arduino

Para fazê-lo através da própria IDE, abra-a e vá ao menu 'File→Preferences'. Haverá um campo 'Additional Boards Manager URLs', onde você deverá inserir essa URL:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Essa URL pode ser incluida junto a outras, bastando separá-las com vírgula. Feito isso (não é necessário dizer que você precisa confirmar em 'Ok', certo?) vá ao menu 'Tools→Board→Board Manager'. As boards serão carregadas e você pode filtrar para encontrar as boards pretendidas; clicando sobre ela, aparecerá um botão 'Install'. Confirme.

Após instalada, a board estará disponível na lista de placas, bastando rola até o fim (ou próximo dele):

Repare que Existem 3 opções, mas duas lhe serão seguramente válidas; o ESP-12EX e o Wemos D1. Até aqui somente a instalação, mas como você pode ver, é a coisa mais simples do mundo, de modo que em seguida você estará programando pela serial ou, como é pretendido explicar nesse post -  através de OTA (OVer-The-Air).

Velocidade de upload

Eu sei que vai parecer estranho, mas a velocidade recomendada é de 921600. Pra facilitar a leitura: 921.600. Mas isso é por OTA, o que significa que subir uma imagem por esse meio é mais rápido que pela serial! E livrar-se do cabo USB é outra coisa que não tem preço.

Você pode baixar uns exemplos aqui, então descomprimí-lo no diretório de sketches. O diretório criado dentro de Sketchbook se chamará 'D1_mini_Examples'. Reinicie a IDE do Arduino e posteriormente você terá disponível o exemplo em 'File→Sketchbook→D1_mini_Examples'. Para esse tutorial, usei apenas o exemplo BasicOTA, como você verá mais adiante.

O que é OTA

OTA é o acrônimo de Over-The-Air, tratando-se de carga de firmware através da conexão WiFi. Pode ser que você não precise, mas convenhamos que é muito prático não precisar de fios para fazer upload, não?

O legal é que você pode fazer OTA por três meios distintos, o que torna o processo incrivelmente mais divertido! Estes meios são:

  • Pela IDE do Arduino
  • Através de um browser
  • Através de um servidor web.

Eu poderia fazer um link direto para cada uma das funções, mas por favor, leia calmamente antes de implementar, desfrute da leitura e depois monte sua estratégia.

A primeira fase é a implementação, e para isso vamos usar a IDE do Arduino. Após implementado o suporte, pode-se brincar com os demais  métodos.

ArduinoOta

Essa biblioteca deverá estar disponível na sua IDE. Se porventura não estiver, da mesma forma que a board, é possível instalar novas bibliotecas em 'Sketch→Include Library→Manage Libraries'.

Uma redução de riscos pode ser implementada com alguns parâmetros disponíveis na biblioteca. Tirado do exemplo OTA para ESP8266 mesmo, os parâmetros que devem ser definidos são:

void setPort(uint16_t port);
void setHostname(const char* hostname);
void setPassword(const char* password);

A importância disso é prover uma segurança mínima, colocando uma porta fora de qualquer padrão e uma boa senha. Um nome de host estranho pode ter alguma serventia também. Enfim, sigamos.

Apesar de já provado que há colisão de MD5, esse é o método oferecido para autenticar o upload. Convenhamos que SHA512 não é algo necessário para coisas pequenas.

Os recursos do ESP8266 são eximidos e dedicados ao upload, portanto tenha em mente que durante esse tempo não haverá interação. Automaticamente o módulo reinicia, executando então o novo sketch.

São dicas importantes que encontrei na documentação, por isso faço questão de citar - tenha em mente também que se o dispositivo estiver em campo, agendamento de OTA pode não ser uma boa idéia, exceto você o faça em um momento "fora do expediente" do dispositivo. Imagine um dispositivo controlando válvula de pressão; alguns minutos pode ser tempo suficiente para virar notícia televisiva.

ArduinoOTA

A biblioteca oferece validadores auxiliares ao processo, que são:

void onStart(OTA_CALLBACK(fn));
void onEnd(OTA_CALLBACK(fn));
void onProgress(OTA_CALLBACK_PROGRESS(fn));
void onError(OTA_CALLBACK_ERROR (fn));

A memória flash tem que possuir espaço suficiente para o sistema corrente e para o novo sistema. Deve-se então certificar previamente a possibilidade do upload:

ESP.getFreeSketchSpace();

Não acho que seja necessário citar, mas para fins informativos e para evitar contestação, lembre-se de que o computador e o ESP8266 devem estar na mesma rede. O sketch subirá configurando o ESP8266 em modo Station, de forma que você deixará de vê-lo em suas conexões WiFi. Se seu router não tiver uma página de monitoramento de hosts, você pode simplesmente reiniciar o módulo matendo uma conexão serial e verá o IP que o dispositivo recebeu.

A última recomendação é que você utilize  a IDE 1.6.7 que utiliza a biblioteca ArduinoOTA, invés da OTA tradicional.

Uma coisa muito importante e que pode lhe confundir é que a biblioteca ArduinoOTA só aparacerá depois de selecionada a board. Se você estiver com a board Arduino UNO selecionada por exemplo, não verá a biblioteca disponível em 'Include Library'.  Além disso, você deve ir em 'Tool→Board→Boards manager; instalar a última versão do pacote para ESP8266.

Ao reiniciar a interface, você já deverá receber um aviso de atualização de boards e bibliotecas. Faça as devidas atualizações e mais uma vez, reinicie.

Para fazer upload, você deverá previamente configurar o modo de transferência e selecionar a porta. As próximas duas imagens tratam disso.

BasicOTA

No video ao final do post você pode ver o upload do BasicOTA no nível estúpido e no nível normal. O nível estúpido foi uma distração minha e eu mantive para mostrar que é fácil se recuperar da situação.

Basicamente, não se esqueça de abrir uma porta, colocar o nome de host e deixe a senha de fora nesse momento - eu não consegui rodar de primeira com senha.

Eu fiz mais uma coisa que pode parecer estranho no primeiro momento, mas vou explicar agora, assim você assiste o video e vai curtir sem duvidas com os procedimentos. Repare que após subir o firmware, eu faço mais um upload do mesmo sketch pra mostrar o progresso do upload pela serial. Só que estou usando a IDE do Arduino para fazer o upload via OTA, portanto não seria possível utilizá-la simultaneamente para fazer acompanhamento pela serial. Desse modo, utilizei o programa GTKTerm (poderia ser QTerm, KTerm, minicom ou qualquer outro programa de comunicação serial) e nele fiz a comunicação serial. Enquanto o programa está sendo enviado via OTA, você consegue acompanhar o progresso no terminal serial. Agora curta o video e veja como é simples, interessante  e muito, muito rápido fazer o upload por OTA.

Desfrute do vídeo upload por OTA.

Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.

Próximo post a caminho!

Inscreva-se em nosso canal Dobitaobyte no Youtube!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.