ESP32 – Um grande aliado para o Maker IoT 3

O ESP8266 foi um divisor de águas no mundo dos Embarcados e de Internet das Coisas por ser “BBB” – Bom, Bonito e Barato. Dotado de um poderoso microcontrolador de 32 bits com WiFi integrado, tornou-se famoso por vir presente em toda sorte de placa, com destaque  para uma placa barata e de fácil acesso chamada NodeMCU, além de ter integração com Arduino IDE e assim ter suporte a muitas bibliotecas compatíveis, contando com a facilidade de programação carregada pela interface do Arduino. E agora, é bom saber e anunciar que a Espressif, fabricante do ESP8266, não ficou parada e resolveu trazer um novo integrante para a família, mais poderoso e cheio de recursos: o ESP32.

Fig 1: Módulo ESP32

Comparação do ESP32 com o Irmão mais Velho

O ESP32 é tudo que o ESP8266 é, mas muito mais. Tem WiFi integrado, tem muito sinais de GPIO (36 contra 17 do ESP8266), e de quebra vem com Bluetooth 4.2 (BLE) e mais sinais de PWM possíveis e mais canais em seu conversor Analógico-Digital. Para você ter uma ideia da diferença entre ambos, veja a tabela apresentada na Figura 2, do site CNX-Software. Essa figura compara recurso a recurso e mostra as diferenças.

Comparativo ESP8266 e ESP32
Figura 2 – Tabela comparativa entre ESP32 e ESP8266. Fonte: https://www.cnx-software.com/2016/03/25/esp8266-and-esp32-differences-in-one-single-table/

O que chama mais a atenção é que o ESP32 é dual-core (isso mesmo, um microcontrolador com 2 núcleos!), e vem com cerca de 500 kBytes de memória SRAM, o que permite executar programas mais complexos.

E se você é dos entusiastas que gostam de recursos mais “sofisticados”, ele conta também com controlador de Rede CAN, o que permite o módulo interagir com redes CAN (tais como as presentes em veículos, caminhões e tratores), lembrando que é necessário usar em conjunto um transceiver de Rede CAN, ok? E complementando os recursos a mais, ele também possui interface Ethernet MAC, o que significa que é possível colocar o módulo em uma rede Ethernet cabeada, lembrando também que pra isso é preciso usar em conjunto um PHY Ethernet também!

E mais alguns adicionais interessantes são o sensor de temperatura, que permite monitorar a temperatura do microcontrolador, a presença de interface para Sensor de Toque, o que facilita o uso do microcontrolador com teclados ou botões capacitivo, e a presença de um conversor Digital Analógico (DAC).

No que tange à memória Flash, não houve mudança significativa, até porque depende de uma memória externa usada pelo microcontrolador, e ambos, tanto ESP8266 quando ESP32, podem usar memórias Flash de até 16 MBytes. Aí vai depender do fabricante escolher qual utilizar.

Em vista do módulo principal (e mais comum, o ESP-WROOM-32), segue na Figura 3 um apanhado dos sinais presentes e suas legendas, mostradas no topo da Figura. Muitos dos seus pinos são multi-funções. E diferente do ESP8266, o ESP32 possui interface JTAG, o que permite seu uso com Debuggers para monitorar a execução de códigos no microcontrolador em tempo-real.

Sinais ESP32
Figura 3 – Legenda dos sinais do Módulo ESP-WROOM-32 – Observe o módulo sem a proteção metálica. Fonte: https://www.sparkfun.com

Vamos aos detalhes

O ESP32 reúne um apanhado de recursos que tornam seu uso em Internet das Coisas algo bem interessante, dado que agora a presença de mais periféricos permite a sua integração com mais dispositivos e componentes diversos. Dentre as interfaces de comunicação, ele possui suporte a SPI, UART e I2C (protocolos relativamente comuns), como também tem suporte a Infravermelho (IR) e SDIO (para interface com cartão de memória), e começa a se diferenciar, como mencionei antes, tendo CAN, Ethernet, DAC, Sensor de Toque, e I2S, que é uma interface de comunicação útil para comunicar com dispositivos de áudio. Um apanhado do “LEGO” de componentes que fazem parte do ESP32 estão apresentados na Figura 4.

Ele também possui hardware para aceleração de criptografia embutido. Até o presente momento, ainda não fiz uso dos recursos, mas você pode dar uma olhada nos códigos do IDF disponíveis nesta página do GitHub, mas a julgar pelos códigos, há suporte para SHA1 e AES, ou seja, você pode “criptografar” as mensagens e demais informações que seu ESP32 troca, agregando mais segurança à sua solução. Falarei mais sobre esse “IDF” adiante.

Diagrama de blocos
Figura 4 – Diagrama de blocos de componentes internos do ESP32. Fonte: https://www.sparkfun.com

Um ponto que chamou a atenção de outra parcela de desenvolvedores é a presença do coprocessador de ultra-baixo consumo (ULP Coprocessor), que permite delegar algumas tarefas (simples) para execução enquanto os processadores principais estão desligados. Em outras palavras, o ESP32 tem modos de “sleep” mais sofisticados que o ESP8266 (mais detalhes dos modos de Sleep nesse link).

Sobre a conectividade sem-fio, WiFi o ESP8266 já tinha. O ESP32 tem WiFi assim como seu irmão mais velho, e… tem Bluetooth 4.2 capaz de BLE (modo de baixo consumo). O que isso pode mudar sua vida?! Simplesmente na maior cobertura de dispositivos e componentes compatíveis, pelo fato de suportar Bluetooth, e suporte a um modo de transmissão de dados sem-fio de baixo consumo, que é o BLE.

Usando BLE você pode implementar com o ESP32 um wearable (dispositivo vestível, como essas pulseiras inteligentes, acessório de roupa, etc) capaz de responder a requisições Bluetooth nos moldes do BLE, onde cada “característica” tem sua assinatura, tal como temperatura, batimento cardíaco, posições x,y,z de um acelerômetro, etc. Eu particularmente recomendo você, leitor, a gastar uns minutinhos pesquisando no oráculo (Google) sobre Bluetooth Low Energy, pois é uma tendência para a Internet das Coisas.

Num breve resumo das características do ESP32 (a priori estou referenciando o ESP-WROOM-32), veja a listagem a seguir, tirada da página do produto no FilipeFlop:

Especificações:

Em complemento com o datasheet, achei no site ESP32.net as especificações do ESP32 de forma bem resumida e ao mesmo tempo suficientemente detalhadas. Traduzi, e veja adiante:

  • Documentação do Espressif ESP32 – datasheet
  • Processadores (sim, no plural):
    • Processador Principal: Microprocessador Tensilica Xtensa 32-bit LX6
      • Núcleo: 2 ou 1 (depende da variação)
        Todos os chips na série ESP32 são dual-core, com exceção do modelo ESP32-S0WD, que é single-core.
      • Frequência de Clock: até 240 MHz
      • Performance: até 600 DMIPS
    • Ultra low power co-processor: Um coprocessador auxiliar, que consome bem pouca energia, e que é capaz de interagir com componentes tais como conversor ADC, realizar algumas instruções e tarefas enquanto os núcleos principais estão em modo deep sleep.
  • Conectividade Sem-Fio:
    • Wi-Fi: 802.11 b/g/n/e/i (802.11n @ 2.4 GHz até 150 Mbit/s)
    • Bluetooth: v4.2 BR/EDR e Bluetooth Low Energy (BLE)
  • Memória:
    • Internal memory:
      • ROM: 448 KiB –  Usada em Boot e funções principais do ESP32
      • SRAM: 520 KiB – Usada para dados e instruções (programas)
      • RTC slow SRAM: 8 KiB – Para acesso do co-processador em modo deep-sleep.
      • RTC fast SRAM: 8 KiB – Para armazenamento de dados e uso de CPU em boot de RTC (relógio de tempo-real) do modo deep-sleep.
      • eFuse: 1 Kbit – Dos quais 256 bits são usados para sistema (endereço MAC e configurações do chip), e os restantes 768 bits são reservados para aplicações incluindo criptografia da Flash e Chip-ID.
    • Flash Externa:
      • Suporte a até 16 MB de memória externa (4 MBytes na versão ESP-WROOM-32)
  • Periféricos de Entrada/Saída:
    • Periféricos de comunicação com suporte a DMA.
    • 10 GPIOs com suporte a toque capacitivo.
    • 16 canais de conversor SAR ADCs (conversor analógico-digital) de 12-bits.
    • 2 canais de 8 bits DACs (conversor digital-analógico).
    • 2 Interfaces I²C (Inter-Integrated Circuit).
    • 2 interfaces UART (universal asynchronous receiver/transmitter).
    • Controlador CAN 2.0 (Controller Area Network).
    • 4 interfaces SPI (Serial Peripheral Interface).
    • 2 interfaces I²S (Integrated Inter-IC Sound).
    • RMII (é a parte Ethernet do ESP32).
    • 16 canais de PWM (modulação por largura de pulso).
  • Segurança:
    • Conectividade IEEE 802.11 com suporte a protocolos de segurança WFA, WPA/WPA2 and WAPI.
    • Boot seguro.
    • Criptografia de Flash.
    • Aceleração de Criptografia em Hardware usando: AES, SHA-2, RSA, ECC e RNG.

Uma placa para facilitar o desenvolvimento

A não ser que você seja um projetista experiente, usar o ESP-WROOM-32 nativamente pode ser uma tarefa difícil, dado que você teria que soldar os pinos do módulo “na mão”, além de cuidar da fonte de alimentação e comunicação com o computador. E para facilitar nossa vida, criaram uma placa parecida à NodeMCU para o ESP32, onde estão presentes o módulo principal (claro, né!), regulador de tensão para alimentação do módulo com a interface USB e/ou sinais externos, e conversor USB-Serial para comunicação com o módulo usando PC. O nome formal para esse padrão de placa é ESP32-DevKitC, nome este dado pela própria Espressif.

Como vocês viram na Figura 3, o ESP32 tem muitos sinais. Como então eles ficaram organizados na placa ESP32-DevKitC? Veja na Figura 4 como cada um dos sinais estão organizados. Caso não veja por completo na página, recomendo ver a figura de forma ampliada.

Figura 5 – Figura com legenda dos sinais para ESP32-DevKitC (observe o módulo sem a proteção metálica). Fonte: https://www.esp32.com

Analogamente à NodeMCU, a placa possui botões de Boot e Reset (na Figura 4 o Reset é o botão indicado por “EN”). E graças ao espaçamento de pinos em 2.54mm, é possível encaixar a placa em uma protoboard comum, o que facilita a prototipagem e elaboração de provas de conceito.

Desenvolvimento com IDF

IDF é a abreviação de “IoT Development Framework“, um framework liberado e mantido pela Espressif com foco primariamente no ESP32. E pelo que tenho acompanhado, o ESP32 tem se tornado a “menina dos olhos” da Espressif, ou seja, um produto-alvo de muito investimento para desenvolvimento e suporte.

Isso tanto é verdade que há toda uma página com bastante documentação sobre o ESP32, e os códigos-fonte de suporte para o IDF contam com atualização constante, vide o GitHub do Framework.

Entenda que o IDF corresponde a toda sorte de códigos e utilitários para você desenvolver aplicações para o ESP32. Você pode fazer isso “na raça” mesmo, usando pura e simplesmente um editor de texto, ou configurar um ambiente IDE para operar com os compiladores, bibliotecas e utilitários para desenvolver aplicações para o ESP32. Um grande exemplo disso, citado como referência no próprio IDF, é o Eclipse IDE, que é um ambiente versátil, poderoso, e adotado por toda sorte de fabricantes para programação de seus sistemas embarcados.

Veja que há toda uma página com guia de configuração do Eclipse para ESP32 usando IDF neste link. E na Figura 6 podemos ver um exemplo do Eclipse IDE em modo de depuração, ou seja, acompanhando a execução de código.

IDF
Figura 6 – Ambiente Eclipse IDE configurado para o IDF para ESP32. Fonte: http://esp-idf.readthedocs.io

O interessante de usar o Eclipse para desenvolvimento de projetos é porque é uma ferramenta, sem sombra de dúvida, profissional. Tem funcionalidades para autocompletar textos conforme você vai digitando código, além de realizar buscas avançadas por termos e referências no seu código, tem integração com mecanismos de controle de versão tais como Git, e muitas funcionalidades mais.

Todavia, é uma interface para desenvolvedores mais acostumados a lidar com mais código, com muitos comandos, atalhos de teclado, sem medo de passar por todo um ritual de configuração para começar a usar. Eu, particularmente, recomendo que você leitor interessado em ter uma ESP32 gaste um tempo se aventurando no Eclipse, vai valer a pena e você vai se sentir no controle da “coisa” 😉

Para o módulo vendido no FilipeFlop, será possível você compilar e carregar programas usando o Eclipse IDE.

A placa ESP32-DevKitC expõe os sinais de JTAG, mas não vem com o adaptador de JTAG. Dessa forma, somente é possível programar a placa, ok? Caso queira saber mais detalhes do processo de depuração com JTAG na ESP32, veja este link da Espressif: https://esp-idf.readthedocs.io/en/latest/api-guides/jtag-debugging/index.html

Desenvolvimento com Arduino IDE

Bom, espero que você não tenha ficado muito assustado com toda essa conversa de Eclipse, IDF e tudo mais. Saiba que para quem é iniciante ou quer uma coisa realmente rápida, há suporte para o ESP32 no Arduino IDE, tal como há para o ESP8266.

A biblioteca de suporte e sua documentação estão na página Arduino-ESP32 do GitHub, e a página Arduino e Cia já fez um tutorial ensinando como configurar o Arduino IDE para desenvolver para ESP32.

Pra mostrar que não é mentira (rsrsrs), apresento a Figura 6 mostrando meu Arduino IDE configurado para ESP32, e com o exemplo “SimpleWiFiServer” carregado, que basicamente torna o ESP32 um Access Point de WiFi (exemplo muito usado para criar uma página-web embarcada no microcontrolador, por exemplo).

Figura 6 – Arduino IDE configurado para ESP32.

O suporte ao ESP32 para o Arduino IDE ainda não está 100%, mas tem tido progressos a passos largos e amplo suporte da comunidade, inclusive já há um eBook sobre ESP32 disponível gratuitamente na Editora LeanPub (em inglês, ok?). O autor contribuiu com mais suporte às funcionalidades de BLE para o ESP32.

De todo jeito, muita coisa (ou praticamente tudo?) que você já era capaz de fazer com o ESP8266 usando o Arduino IDE, também é possível fazer no setup para ESP32.

Considerações Finais

Eu sou um cara que gosta de toda sorte de plaquinhas, e admito que estava bem ansioso para a chegada da ESP32, tanto como lançamento da Espressif, como na sua chegada ao Brasil.

Em se tratando de um kit para Internet das Coisas, é com razão que a Espressif tem investido bastante no suporte ao ESP32, pois é um microcontrolador que promete muito, dadas as suas características e preço bem acessível, principalmente quando colocado na balança tudo o que possui.

Sobre as possibilidades de projeto com o ESP32, já pensou em fazer um monitoramento veicular com ele? É possível, pois possui CAN e BLE/WiFi. E algum sistema mais sofisticado de controle para automação? Ele possui ADC, DAC e PWMs diversos. Um sistema de som via WiFi? Ele tem I2S. Trazer um ar mais sofisticado ao projeto com botões capacitivos (touch)? Ele suporta.

E para dar aquele gostinho de “quero mais”, veja essa listagem de exemplos de projetos feitos com ESP32, disponível no GitHub: https://github.com/espressif/esp-iot-solution

Meu veredito final? Assim como o nome desse artigo, é: ESP32 – Um grande novo aliado para o Maker IoT!

Gostou? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. Não se esqueça de visitar nosso Fórum!

Posts Relacionados

Deixe uma resposta

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

3 Comentários

  1. André, parabéns pelo conteúdo, muito rico e esclarecedor. As especificações técnicas do ESP32 o qualificam para usos mais robustos.

  2. Olá Professor!

    Parabéns por mais um artigo instrutivo e abrangente. Realmente o ESP32 ainda vai dar o que falar!
    Entretanto, toda vez que me deparo com um artigo de módulo com qualquer tipo de rádio me vem a lembrança da temida ANATEL. Enquanto estou comprando esses módulos para adquirir conhecimento e experiência, pode até ser os não homologados pois ainda não irão constituir um produto. Só que, quem brinca com eles, depois quer transformar sua brincadeira num projeto comercial e ganhar dinheiro com isso. Daí vem os entraves burocráticos. Não basta, por exemplo, comprar uma RPi3 da Filipe-Flop já homologada pela ANATEL. Seu equipamento inteiro também tem que ser homologado pelo orgão, o que inviabiliza muitos equipamentos de terem um simples BLE para se comunicarem localmente com um Smartphone por exemplo. Assim, o que espero é que um dia as autoridades que criam as normas criem um caminho mais fácil para esse novo mundo IOT, sem fio, que nos cerca. Abraços e aguardo o próximo artigo!

  3. Fala André, tudo bem? ótimo artigo, bem completo !!! =D

    Mas é bem isso mesmo que Ivan Assaritti falou, se não é homologado pela anatel tem um caminho bem grande até lançar um produto no mercado e precisa ter $$$ se utilizar um módulo homologado dá para atalhar um pouco esse caminho.