ESP32 pinout – Guia Básico de GPIOs

Introdução

No post passado foram apresentadas algumas especificações gerais de pinout e modelos mais populares do ESP32. Neste post faremos a instalação do ESP32 na arduino IDE assim como detalharemos algumas funções das portas GPIO disponíveis no ESP32.

Instalação do ESP32 no arduino IDE

Antes de começar com as portas GPIO e como usa-las será necessário a arduino IDE instalado em seu computador. Se não o tem instalado, baixe e instale a versão mais recente no site do arduino. Para usar e programar ESP32 na IDE do Arduino, será necessario adicionar os modelos do ESP32 a IDE.

Com a Arduino IDE aberta, primeiramente navegue o menu Arquivo -> Preferências:

Depois cole a URL abaixo no campo de URLs adicionais:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Após concluir essa etapa adicione as placas ESP32 pelo menu Ferramentas -> Placa -> Gerenciador de Placas.

Insira na pesquisa “ESP32″e instale a versão mais recente das placas da opção “esp32 by Espressif Systems”.

Após a conclusão da instalação verifique se os modelos de ESP32 estão disponíveis no menu de placas

Escolha um modelo de ESP32, e verifique se o nome do modelo irá aparecer no canto inferior direito da Arduino IDE.

Pinos GPIO do ESP32

Os pinos GPIO (General Purpose Input Output) são portas que servem como interface entre o microcontrolador e periféricos como sensores, atuadores ou até outros circuitos integrados e microcontroladores. A imagem abaixo a pinagem de um DOIT Esp32 DevKit v1 de 30 pinos. Ele tem 25 pinos GPIOs com níveis de tensão 0V e 3.3V (não tolera 5V) para níveis digitais 0 e 1 respectivamente, com corrente máxima de 12mA por GPIO. 

A maioria desses 25 pinos GPIO do ESP32 pode funcionar como entrada ou saída digital simples. Essas funções de entrada e saída podem ser acessadas através do framework arduino pelas funções pinMode()digitalRead() e digitalWrite().

Vale destacar que as opções disponíveis para pinMode() são INPUT, OUTPUT, INPUT_PULLUP, INPUT_PULLDOWN.

Pinos PWM

O controlador ESP32 LED PWM possui 16 canais independentes que podem ser configurados para gerar sinais PWM com propriedades diferentes. Todos os pinos que podem atuar como saídas podem ser usados como pinos PWM (apenas os pinos GPIOs 34 a 39 não podem gerar PWM).

A forma de configurar o PWM nos pinos do ESP32 difere um pouco da forma de configurar do Arduino UNO.

  1. Primeiramente escolha um canal PWM, o ESP32 tem 16 disponíveis de 0 a 15. Usaremos nesse exemplo o canal 1
  2. Em seguida, você precisa definir a frequência do sinal PWM. Para este exemplo, arbitrei uma frequência de 1000 Hz.
  3. Você também precisa definir a resolução do ciclo do sinal. Você tem resoluções de 1 a 16 bits. Neste exemplo usaremos uma resolução de 8 bits 0 a 255.
  4. Em seguida, você precisa especificar em quais GPIO ou GPIOs o sinal será exibido. Vamos reutilizar o pino 32 nesse exemplo.
  5. Finalmente, para controlar o brilho do LED usando PWM, usamos a função ledcWrite().

Pinos GPIO Touch

Esses pinos funcionam como sensores capacitivos, são sensíveis a objetos com alguma carga elétrica como a pele humana. Com isso podem ser utilizados para detectar o toque dos dedos. Os pinos disponíveis nessa placa são:

  • GPIO 4 (T0)
  • GPIO 2 (T2)
  • GPIO 15 (T3)
  • GPIO 13 (T4)
  • GPIO 12 (T5)
  • GPIO 14 (T6)
  • GPIO 27 (T7)
  • GPIO 33 (T8)
  • GPIO 32 (T9)

Nesse exemplo enviamos pela porta serial a função o retorno da função touchRead(). Esta aceita tanto o numero do pino, nesse caso pino 12, como o numero do sensor que aqui seria T5.

Pinos GPIO ADC

O ADC (Analog Digital Converter), é o circuito capaz de converter uma grandeza analógica de entrada (tensão) em uma representação digital (valor inteiro). No ESP32 existem 2 conversores AD, ADC1 com 8 canais e o ADC2 com 10 canais. Ambos os conversores possuem resolução de 12 bits alcançando 4096 valores distintos. A faixa de entrada pode ser alternada opcionalmente para níveis entre 0-1V, 0-1.34V, 0-2V ou 0-3.6V. O ESP32 DevKit v1 tem 15 pinos disponíveis para esta função:

  • GPIO 36 (ADC1_CH0 )
  • GPIO 39 (ADC1_CH3)
  • GPIO 32 (ADC1_CH4)
  • GPIO 33 (ADC1_CH5)
  • GPIO 34 (ADC1_CH6)
  • GPIO 35 (ADC1_CH7)
  • GPIO 4 (ADC2_CH0)
  • GPIO 2 (ADC2_CH2)
  • GPIO 15 (ADC2_CH3)
  • GPIO 13 (ADC2_CH4)
  • GPIO 12 (ADC2_CH5)
  • GPIO 14 (ADC2_CH6)
  • GPIO 27 (ADC2_CH7)
  • GPIO 25 (ADC2_CH8)
  • GPIO 26 (ADC2_CH9)

Alguns detalhes sobre os conversores AD do ESP32 devem ser observados.

As leituras analógicas podem apresentar uma diferença de +/- 6% de um chip para outro.

A conversão não possui uma resposta linear por toda faixa disponível para leitura, e o fabricante recomenda alguns métodos de calibração que não serão detalhados neste post.

O conversor ADC2 é compartilhado com o driver do módulo de comunicação sem fio, portanto as leituras desse ADC não podem ser realizadas enquanto WiFi esta ativo. Além disso as leituras do ADC1 podem ficar ruidosas durante o uso do WiFi. Recomendado que o WiFi seja desligado durante as leituras e reativado dependendo da necessidade.

Pinos GPIO DAC

Existem 2 pinos DAC (Digital to Analog Converter) de 8 bits no ESP32 para converter valores digitais em saídas com níveis de tensão analógica. Estes são os pinos disponíveis:

  • GPIO 25 (DAC1)
  • GPIO 26 (DAC2)

Neste exemplo usamos a função dacWrite() para uma conversão digital-analógica. São passados como parâmetros o pino GPIO de saída, no caso 25, e um valor de 0 (0V) a 255 (3.3V).

Outras funções

Todos os pinos GPIOs também podem ser configurados como fontes de interrupções externas. Interrupções “interrompem” a tarefa que o processador está executando para atender a rotina correspondente aquela interrupção. Após concluir a rotina ele retorna a tarefa anterior.

O pino GPIO 0 compartilha algumas funções como Touch e ADC porém é utilizado no modo de gravação e em alguns casos ele é até omitido da placa para o usuário.

Alguns GPIO podem ser usados somente como pinos entrada:

  • GPIO 34
  • GPIO 35
  • GPIO 36
  • GPIO 39

Alguns GPIOs alteram seu estado lógico ou emitem sinais PWM durante a inicialização causando resultados inesperados. Considere utilizar outros pinos se precisar de uma saída mais confiável mesmo durante o tempo de inicialização.

  • GPIO 1
  • GPIO 3
  • GPIO 5
  • GPIO 6 ao GPIO 11 (Pinos utilizados para conectar Flash SPI integrada do ESP32).
  • GPIO 14
  • GPIO 15

A versão da placa de 38 pinos possui as GPIO 6 até GPIO 11 disponíveis ao programador, porém elas são conectadas a memória flash integrada e o fabricante recomenda não utilizar estes pinos.

Também existem pinos disponíveis que não fazem parte do GPIO do ESP32 como:

  • VIN: Entrada de alimentação. Faixa recomendada de 7-12V.
  • GND: Ground.
  • EN(Enable): Pino de ativação do regulador de 3,3V. Levando esse pino ao GND, o ESP32 será desligado.
  • 3V3: Saída de 3.3V. Corrente máxima de 500mA.

Além de operações individuais em cada pino, alguns GPIOs podem ser utilizados em combinação para proporcionar conexões seriais como SPI, I²C e CAN 2.0, que serão discutidas em um post futuro.

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

16 Comentários

Deixe um comentário

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

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

Introdução a tecnologia LoRa

ESP32 – Modelos mais populares