ESP32: Detalhes internos e pinagem



Neste artigo vamos falar sobre os detalhes internos e a pinagem do ESP32. Vou te mostrar como fazer a identificação correta dos pinos olhando o datasheet, quais deles funcionam como OUTPUT/INPUT, como ter uma visão geral sobre os sensores e periféricos que o ESP32 nos oferece, além do boot. Portanto, acredito que, com o vídeo abaixo, vou conseguir sanar diversas dúvidas que tenho recebido em mensagens e comentários sobre as referências do ESP32, entre outras informações.


NodeMCU ESP-WROOM-32


Aqui temos o PINOUT do WROOM-32 que serve como uma boa referência para quando você vai programar. Importante prestar atenção nas GPIOs (General Purpose Input/Output), ou seja, as portas programáveis de entrada e saída de dados que, aqui, ainda podem ser um conversor AD ou um pino de Touch, como é o caso do GPIO4, por exemplo. Isso também ocorre com o Arduino, no qual os pinos de entrada e saída também podem ser PWM.

ESP-WROOM-32


Na imagem acima temos o ESP32 propriamente dito. São vários tipos de plaquinhas com características diferentes de acordo com o fabricante.

Mas, qual a pinagem correta para eu utilizar meu ESP32?


O ESP32 não é difícil, tanto que podemos dizer que não existe uma preocupação didática em seu entorno. Porém, precisamos ser didáticos, sim. Se você quiser programar em Assembler, tudo bem. Mas, tempo de engenharia custa caro. Então, se tudo quanto é fornecedor de tecnologia te der uma ferramenta que você demora pra entender como ela funciona, isso vai virar um problema para você, pois tudo isso vai aumentando o tempo de engenharia e o produto vai ficando cada vez mais  caro. Daí minha preferência por coisas fáceis, aquelas que podem facilitar nosso dia a dia, pois hoje temos que respeitar o tempo das pessoas.

Voltando ao ESP32, em um datasheet, como neste acima, temos nos destaques a identificação correta dos pinos. Muitas vezes o rótulo no chip não coincide com o número real do pino, já que temos três situações: o GPIO, o número seriado e ainda o código da própria placa.
Veja no exemplo abaixo uma ligação de um LED no ESP e o modo correto de configurar:


Repare que o rótulo na placa é TX2, porém, devemos seguir a identificação correta, como destacada na imagem anterior. Portanto, a identificação correta do pino será 17. Na imagem abaixo você vê como deve ficar o código.


INPUT / OUTPUT

Ao realizar testes de INPUT e OUTPUT nos pinos, obtivemos os seguintes resultados:
INPUT não funcionou apenas no GPIO0.
OUTPUT não funcionou apenas nos pinos GPIO34 e GPIO35, que são VDET1 e VDET2 respectivamente.
*Os pinos VDET, pertencem ao domínio de energia do RTC. Significa que eles podem ser usados como pinos ADC e que o ULP-coprocessador pode lê-los. Podem ser apenas entradas e nunca saídas.


Diagrama de Blocos


Esse diagrama expõe que o ESP32 tem dual core, tem uma área do chip que controla o WiFi, e outra que controla o Bluetooth. Também tem aceleração de hardware para criptografia, que permite a conexão com LoRa, rede de longa distância que permite uma conexão até 15km, isso com uso de uma antena. Ainda observamos o clock generator, real time clock, e outros pontos que tratam, por exemplo, de PWM, ADC, DAC, UART, SDIO, SPI, entre outros, que fazem esse dispositivo bastante completo e funcional.

Periféricos e Sensores


Como consta na imagem acima, o ESP32 tem 34 pinos GPIOs que podem ser atribuídos a várias funções, como:
Digital-only;
Analog-enabled (podem ser configurados como digital);
Capacitive-touch-enabled (podem ser configurados como digital);
E outros.

Lembrando que a maioria dos GPIOs digitais pode ser configurada como pull-up ou pull-down interno, ou configurada para alta impedância. Quando configurada como entrada (input), o valor pode ser lido através do registro.

GPIO

Analog-to-Digital Converter (ADC)
O Esp32 integra ADCs de 12 bits e suporta medições em 18 canais (analog-enabled pins). O ULP-coprocessador no ESP32 também é projetado para medir as tensões enquanto opera em modo sleep, que permite o baixo consumo de energia. A CPU pode ser despertada por uma configuração de limite e/ou através de outros gatilhos.

Digital-to-Analog Converter (DAC)
Dois canais DAC de 8 bits podem ser usados para converter dois sinais digitais em duas saídas de tensão analógica. Estes DAC duplos suportam a fonte de alimentação como referência de tensão de entrada e pode conduzir outros circuitos. Os canais duplos suportam conversões independentes.

Sensores

Touch Sensor
O ESP32 tem 10 GPIOs de detecção capacitiva que detectam variações induzidas ao tocar ou aproximar de um GPIO com um dedo ou outros objetos.



O ESP32 ainda possui um sensor de Temperatura e um Sensor Hall interno, porém, para trabalhar com eles devem-se mudar as configurações dos registradores. Para mais detalhes acesse manual técnico através do link:

Watchdog

O ESP32 tem três temporizadores de vigilância: um em cada um dos dois módulos de temporizador (chamado o Temporizador de Watchdog Principal, ou MWDT) e um no módulo RTC (chamado RTC Watchdog Timer ou RWDT).

Bluetooth

Interface Bluetooth v4.2 BR/EDR e Bluetooth LE (low energy)
O ESP32 integra um controlador de ligação Bluetooth e Bluetooth baseband, que executam os protocolos de banda base e outras rotinas de links de baixo nível, como modulação/desmodulação, processamento de pacotes, processamento de fluxo de bits, saltos de frequência, etc.
O controlador de ligação opera em três estados principais: standby, connection e sniff. Permite múltiplas conexões e outras operações, como inquiry, page e secure simple-pairing, e, portanto, permite a Piconet e Scatternet.



Boot

Em muitas placas de desenvolvimento com USB/Serial incorporado o esptool.py pode redefinir automaticamente a placa para o modo de inicialização.
O ESP32 entrará no carregador de inicialização serial quando o GPIO0 for mantido baixo na reinicialização. Caso contrário, ele executará o programa em flash.


GPIO0 tem um resistor interno pullup, então, se ele estiver sem conexão irá setar para alto.
Muitas placas usam um botão marcado como “Flash” (ou “BOOT” em algumas placas de desenvolvimento Espressif) que seta o GPIO0 para baixo quando pressionado.
O GPIO2 também deve ser deixado sem conexão/flutuante.


Nesta imagem acima você vê um teste que fiz. Coloquei osciloscópio em todos os pinos do ESP pra ver o que acontecia no momento que ele fosse ligado. Descobri que, quando vou pegar um determinado pino, ele gera oscilações de 750 microssegundos, como no destaque ao lado direito. O que podemos fazer a respeito? Temos várias opções, como dar um delay com circuito com transistor, expansor de porta, por exemplo. Destaco que no GPIO08 é invertido. A oscilação sai para cima e não para baixo.
Outro detalhe é que temos pinos que iniciam em High e outros em Low. Portanto, esse PINOUT é referência quando o ESP32 liga, principalmente quando você está mexendo com carga para disparar, por exemplo, um triac, um relé, um contator ou algo de potência.


Faça o download do PDF


6 comentários:

  1. Boa noite Professor

    Gostaria de saber se é possível utilizar o sensor de oxigênio dissolvido da DFRobot com o esp32. Tal sensor é desenvolvido para uso com arduino. O link para o sensor é https://www.dfrobot.com/product-1628.html

    Desde ja agradeço.

    ResponderExcluir
    Respostas
    1. Olá. Sim é possível, faça a ligação correta da alimentação e o pino de dados em uma entrada ADC do seu ESP32. Depois só fazer a leitura do pino através do comando analogRead(). Abraço!

      Excluir
  2. Boa tarde Amigo. Eu não estou conseguindo fazer minha ESP-WROOM-32 ler um sensor de corrente SCT013 (30 A). Esse sensor utiliza uma entrada analógica, no arduino, funciona perfeitamente. O senhor sabe me informar se essa ESP32 tem entradas analógicas? e quais GPIO seriam?
    Desde já, obrigado.

    ResponderExcluir
  3. Fernando. Pode alimentar o Esp32 com 5V pelo pino Vin e Gnd?

    ResponderExcluir
  4. Bom dia, estou iniciando a programar o meu esp32, mas estou tendo problema com a biblioteca BLE, a IDE do Arduíno diz "Biblioteca inválida", poderia me ajudar, não estou conseguindo programar, pois ele não envia o código para a minha placa esp.

    ResponderExcluir

Tecnologia do Blogger.