Como realizar atualizações por via aérea (OTA) usando o Microcontrolador ESP32 e seu ESP-IDF
Contributed By DigiKey's North American Editors
2021-08-10
Os projetistas de produtos de Internet das Coisas (IoT) precisam avaliar continuamente a plataforma e a seleção de componentes com o objetivo de diminuir o custo e a potência enquanto melhoram o desempenho e aceleram o projeto de aplicações de conectividade. Existem atualmente algumas soluções a escolher, mas os projetistas enfrentam o desafio de realizar atualizações sem fio e por via aérea (OTA) para manter o firmware do dispositivo atualizado, uma vez implantado.
O importante é olhar as plataformas disponíveis para ver com que ferramentas adicionais e suporte elas vêm para apoiar as atualizações OTA. Tal apoio pode simplificar muito o processo, mas pode precisar de alguma atenção inicial.
Este artigo discute os fundamentos OTA e por que é uma função crítica que quase todo sistema IoT precisa suportar, apesar dos desafios que os desenvolvedores enfrentam. Em seguida, utiliza o microcontrolador ESP32 da Espressif Systems habilitados por Bluetooth e Wi-Fi, com módulos associados, kits e Framework de desenvolvimento IoT ESP (ESP-IDF), para mostrar como criar uma partição OTA e utilizar o script otatool.py para realizar uma atualização de firmware enquanto um aplicativo ainda está em execução.
Introdução às atualizações OTA
O foco central para a maioria das equipes de desenvolvimento é implementar suas características específicas de produto, ou seja, a lógica comercial que diferencia seu produto. Entretanto, cada produto IoT tem um conjunto de características básicas que precisa ser implantado, configurado e mantido durante toda a vida útil do dispositivo. As atualizações de segurança são um bom exemplo. Dada a necessidade de realizar estas atualizações, um recurso importante, mas facilmente negligenciado ao avaliar uma plataforma de desenvolvimento adequada é o carregador de inicialização (bootloader) ou a atualização do firmware OTA (FOTA) (às vezes chamado apenas de OTA).
A OTA fornece aos engenheiros a capacidade de manter e atualizar remotamente seus produtos em resposta tanto aos requisitos técnicos como comerciais, sem a necessidade de enviar pessoal de manutenção ao dispositivo ou fazer com que o cliente final faça algo ativamente com o dispositivo para atualizá-lo. Em vez disso, todos esses custos podem ser removidos fazendo com que os dispositivos atualizem silenciosamente seu firmware em segundo plano, ou durante as horas de "inatividade" operacional, como no meio da noite.
As arquiteturas OTA podem vir em muitas formas e configurações diferentes, desde soluções personalizadas até implementações padrão fornecidas pelo provedor da nuvem. Um exemplo arquitetônico típico pode ser visto na Figura 1.
Figura 1: Uma visão geral da arquitetura OTA que mostra um processo de exemplo para atualizar o firmware da aplicação no campo para dispositivos implantados. (Fonte da imagem: Beningo Embedded Group)
Neste exemplo, um OEM está usando o núcleo IoT da Amazon Web Services (AWS) para carregar novas versões de firmware e, em seguida, usa as capacidades de trabalho embutidas para implementar atualizações nos dispositivos em campo. Este é apenas um dos muitos exemplos, e quase todo provedor de nuvem tem uma solução semelhante.
Há muitas opções de microcontroladores disponíveis hoje em dia que suportam a OTA. Um microcontrolador popular tanto para sistemas de baixo custo quanto entre os criadores é o ESP32. Há várias razões pelas quais o ESP32 tem sido tão popular, inclusive:
- Possui um microcontrolador integrado com módulos de certificação Wi-Fi/Bluetooth disponíveis
- Baixo custo
- Ambiente de desenvolvimento de código aberto e estruturas de software como o ESP-IDF e ESP Audio Development Framework (ESP-ADF)
- Muitos exemplos de aplicações existentes disponíveis gratuitamente na web
Seleção de um módulo ESP32 para testes OTA
Há vários módulos ESP32 diferentes e placas de desenvolvimento disponíveis que os usuários podem adquirir para passear pelos exemplos da OTA. Tomemos, por exemplo, a placa Adafruit 3405 ESP32 Huzzah Feather (Figura 2). Esta é uma placa de desenvolvimento de baixo custo que inclui todos os circuitos para programar um ESP32 e alimentá-lo através de um conector USB.
Figura 2: A placa 3405 Huzzah Feather contém um módulo Wi-Fi/Bluetooth certificado ESP32 WROOM-32D com 4 Mbytes de flash. A placa inclui todo o hardware necessário para programar e se comunicar com o módulo através de USB. (Fonte da imagem: Adafruit)
No núcleo do 3405 está um módulo ESP32-WROOM-32D que vem com 4 Mbytes de flash, Wi-Fi, Bluetooth e um conjunto periférico completo para quase todas as aplicações.
Outra placa de desenvolvimento que pode ser usada é a placa de áudio ESP32-LYRATD-SYNA da Espressif Systems (Figura 3). Esta placa de desenvolvimento inclui o módulo ESP32-WROVER-B.
Figura 3: A placa ESP32-LYRATD-SYNA é baseada em um módulo Wi-Fi/Bluetooth certificado ESP32 WROVER-B com 4 Mbytes de flash. Além de permitir que os projetistas programem e se comuniquem com o módulo através de USB, ela também tem os circuitos necessários para desenvolver aplicações de áudio. (Fonte da imagem: Espressif Systems)
O módulo ESP32-LYRATD-SYNA também tem 4 Mbytes de flash, bem como todos os circuitos para aplicações de áudio. A placa inclui um codec de áudio, um amplificador de áudio e jacks de fone de ouvido e de alto-falante para testar completamente uma aplicação de áudio.
Uma última placa de desenvolvimento que pode ser usada para testes OTA é a placa de desenvolvimento Espressif ESP32-S2-SAOLA-1RI (Figura 4). Quando se trata de placas de desenvolvimento, esta não é tão cara. A placa contém um módulo ESP32 Wrover junto com o circuito para programar o chip. Não há nenhum tipo de prega a não ser o fato de conter pinos que permitem que ela seja facilmente colocada em uma matriz de contatos para testes.
Figura 4: A ESP32-S2-SAOLA-1RI, baseada no módulo Wrover, é uma placa de desenvolvimento com terminais expostos que é de baixo custo, mas inclui circuitos suficientes para programar o módulo na placa. (Fonte da imagem: Espressif Systems)
A placa específica selecionada para os testes não importa muito porque cada módulo ESP32 alavanca o ESP-IDF. Esta estrutura foi projetada para facilitar as atividades de desenvolvimento de software para desenvolvedores, incluindo drivers, middleware, um RTOS e — importante para os propósitos deste artigo — bootloaders, e bibliotecas OTA.
O bootloader permite aos desenvolvedores aproveitar as atualizações OTA e particionar sua memória para atualizar o firmware enquanto a aplicação principal ainda está em execução, o que ajuda a minimizar o tempo de inatividade. A configuração do bootloader pode parecer complicada no início, mas é simples se for guiada adequadamente.
O fluxo de trabalho de desenvolvimento OTA
O fluxo de trabalho de desenvolvimento OTA para o ESP32 vai variar ligeiramente com base nas necessidades comerciais e na seleção de componentes do produto. Por exemplo, uma equipe alavancando o AWS provavelmente usará os exemplos e guias de início rápido do AWS para colocar sua solução ESP32 OTA em funcionamento. Uma empresa que está personalizando sua própria solução, por outro lado, provavelmente aproveitará a documentação ESP32. Neste artigo, vamos olhar as peças no nível ESP32 e não na nuvem. A razão é que estas peças são genéricas e se aplicam à OTA com o ESP32, independentemente de qual provedor de nuvem ou solução for utilizada.
Em geral, o processo para estabelecer uma atualização OTA sobre a ESP32 envolve os seguintes passos:
- Configure a tabela de partição ESP32
- Baixe o firmware que suporta OTA
- Desenvolva uma ferramenta para agir como um servidor e implemente um novo firmware
- Baixe o firmware mais recente para o ESP32
- Mude para a nova aplicação
Obviamente, esta é a abordagem simplificada. Os desenvolvedores devem olhar novamente para a Figura 1 para uma visão geral do processo de atualização do firmware. Este processo pode ser bastante complicado, por isso é aconselhável aproveitar os exemplos ESP32 OTA existentes localizados no GitHub. Estes exemplos fornecem vários casos críticos, como:
- OTA HTTPS
- OTA nativa
- OTA simples
- Ferramenta OTA (exemplo de scripts em python)
A Figura 5 mostra as etapas do processo de implantação e atualização. Um desenvolvedor precisará executar as etapas em vermelho primeiro para implantar a solução OTA no módulo ESP32. As etapas em laranja são as próximas e são executadas para facilitar uma atualização OTA.
Figura 5: Os exemplos de atualização OTA da Espressif Systems localizados no GitHub fornecem aos desenvolvedores vários exemplos simples para que seus ESP32 realizem atualizações OTA. (Fonte da imagem: Espressif Systems)
Configuração de uma aplicação ESP32 para OTA
O ESP32 contém uma tabela de partição que descreve que tipo de dados estão localizados no microcontrolador e onde ele vive. Por exemplo, uma tabela de partição ESP32 padrão parece algo como a Tabela 1:
Tabela 1: Uma tabela de partição padrão ESP32 mostrando o tipo de dados e onde eles estão localizados no microcontrolador. (Fonte da tabela: Beningo Embedded)
Há a aplicação de fábrica e depois uma seção para a biblioteca NVS e os dados de inicialização (init) da camada física (PHY). Para usar a funcionalidade OTA, esta tabela precisa ser atualizada para que haja locais de memória especificados para o firmware de atualização OTA, além da aplicação primária (de fábrica). Para a OTA, há normalmente duas partições que são alocadas para atualizações. Um para o firmware ativo atualizado, e outro para o firmware que está sendo baixado e que se tornará a versão mais recente. Isto permite que a aplicação de fábrica permaneça intacta. Uma tabela de partição OTA atualizada pareceria algo como a Tabela 2.
Tabela 2: Típica tabela de partição OTA ESP32 atualizada. (Fonte da tabela: Beningo Embedded)
Como mostrado, há agora uma seção de aplicação ota_0 e uma ota_1 que tem 1 Mbyte de tamanho, além de uma seção de dados (otadata) que é RAM alocada para o processo de atualização. Esta tabela pode ser modificada e atualizada pelo desenvolvedor para se adequar à aplicação.
Para executar o exemplo OTA, há um conjunto simples de instruções que estão listadas no GitHub sob a seção "Como usar os exemplos". Isto descreve como compilar e programar a aplicação.
Há também o otatool que pode ser usado para atualizar o firmware. Este script é normalmente usado para:
- Ler, escrever e apagar as partições OTA
- Trocar as partições de inicialização
- Trocar para a partição de fábrica
O script de exemplo pode ser executado simplesmente rodando o exemplo em um terminal usando o comando:
./otatool_example.sh
Ou usando Python:
python otatool_example.py
Quando se trata de configurar o ESP32 para OTA, certificar-se de que as partições sejam estabelecidas numa etapa crítica.
Dicas e truques para usar
A solução EPS32 OTA pode acelerar e simplificar uma solução de atualização de firmware do desenvolvedor. Para evitar que a solução se torne um fardo de desenvolvimento, há várias "dicas e truques" que devem ser levados em conta:
- Se possível, aproveitar uma estrutura OTA existente incluída com o provedor de nuvem da empresa. Isto pode simplificar drasticamente o desenvolvimento e a integração.
- Use uma placa de desenvolvimento de baixo custo para testar as capacidades OTA e os carregadores de inicialização. O ESP32 tem várias opções, e pode ser necessário alguma experimentação para determinar qual é a melhor para a aplicação em questão.
- Para soluções personalizadas, aproveite os exemplos ESP32 OTA no GitHub.
- Para aplicações onde o produto atua como hub ou roteador Wi-Fi, considere fazer o download da imagem do firmware para a memória externa e realizar uma atualização a partir de um dispositivo de armazenamento em massa.
- Passe algum tempo revisando a documentação do ESP32 sobre tabelas de partição. Isto é um pouco diferente da típica implementação de microcontroladores.
- Por razões de segurança, é melhor desativar a reversão da aplicação. Se a aplicação puder reverter para versões anteriores, os possíveis invasores poderiam empurrar uma versão com uma exploração conhecida e comprometer o sistema.
Os desenvolvedores que seguem estas "dicas e truques" descobrirão que poupam algum tempo e sofrimento ao tentarem alavancar o ESP32, ou qualquer outra solução OTA, conforme aplicável.
Conclusão
As atualizações OTA são uma característica crítica para um número crescente de sistemas embarcados e IoT. Os desenvolvedores precisam ter um bom controle de como fazê-lo de forma eficaz, a fim de economizar tempo antecipadamente durante o processo de projeto e desenvolvimento, e depois que o produto for enviado.
O microcontrolador sem fio ESP32 encontrou seu caminho em uma ampla gama de dispositivos e, como mostrado, tem uma solução OTA pronta para uso. Aproveitando o ESP-IDF e módulos e plataformas associadas, e usando algumas dicas e truques baseados em experiência, os desenvolvedores podem aliviar drasticamente seu tempo de projeto e ter sua própria solução OTA pronta para uso.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




