Você conhece o ESP32? Sabe a diferença entre o ESP32 e o ESP8266? Neste tutorial vamos fazer a comparação dos sistemas, pinagem e comunicação entre o ESP32 e o ESP8266, além disso, vamos apresentar alguns programas que podem ser utilizados para realização do projeto. Com isso, você será capaz de concluir qual é a melhor placa para o seu trabalho. Aproveite e boa leitura!


ESP32: Internet of Things 

          Desenvolvido pela empresa Espressif, o ESP32 apresenta-se como um meio inovador no desenvolvimento de projetos automatizados. Esse pequeno componente demonstra ser mais versátil do que seu antecessor, o ESP8266, pois além do clássico módulo de comunicação Wi-Fi, apresenta um sistema com processador Dual Core, Bluetooth híbrido e múltiplos sensores embutidos, tornando a construção de sistema como internet das coisas (IoT) muito mais simples e compacto.

          O objetivo dessa primeira postagem, será a apresentação introdutória dos principais componentes, hardware, sistema operacional e funções básicas, com exemplos práticos e lógica de programação detalhada.

         Mas afinal, o que é Internet das Coisas?  Entende-se por “coisa” qualquer objeto que possua um sistema eletrônico embutido, capaz de transmitir informações a rede, sem a necessidade de interações humanas. É considerado como um tipo de automação sem fio, controlada pela internet.


ESP8266 vs. ESP32

 

          Para expressar melhor as qualidades presente nesta placa, observe a tabela apresentada abaixo, onde realizaremos uma breve comparação entre os sistemas operacionais de um ESP8266 e um ESP32.

 

Observe esse breve comparativo, referente as placas mais famosas da Espressif.


          O ESP32 apresenta-se como um sucessor digno, afinal, dispõe de memória SRAM de 520 KB, memória flash de 16MB, dois núcleos de processamento em arquitetura Tensilica LX6 capaz de operar em 240 MHz,  Bluetooth híbrido (clássico e BLE), tensão operacional de 2,3V á 3,6V, conector externo antena IPEX/PCB, redução de problemas com instabilidade, quantidade maior de portas programáveis, múltiplos sensores, cristal oscilador 32KHZ e criptografia com chave RSA de 4096 bits, ou seja, flexibilidade operacional e maior segurança na construção de sistemas automatizados.

          No diagrama apresentado abaixo, demonstraremos um breve exemplo sobre a distribuição dos componentes presentes em um ESP32.

 

Distribuição dos componentes eletrônicos presentes em placas ESP32.



Pinagem ESP32

          Inicialmente, iremos explorar o desenvolvimento de programações através do Arduino IDE, por ser uma plataforma mais simples e popular entre aqueles que estão iniciando no mundo dos sistemas embarcados. Analisando a pinagem de um ESP32, podemos encontrar 34 portas GPIO, 3 SPI, 2 I2S, 18 canais ADC, 3 UART, 10 pinos de leitura capacitiva e PWM.  Na imagem abaixo, será apresentado um breve resumo das funções presentes em cada pino.

 

Conheça os pinos GPIO, PWM,Analógico, Digital e Touch presentes em um ESP32.

 

          A legenda demonstrada acima, indica que os valores destacados em verde serão utilizados na declaração de pinos em uma programação via Arduino IDE. Portanto, ler a entrada analógica de um sensor Touch, por exemplo, o sensor presente no pino GPIO04 (D4), o programador poderá optar por duas opções: Declarar o pino o 4, ou touch T0 como INPUT.

 

Como configurar a pinagem de um ESP32 por meio do Arduino IDE.



ESP32 na IDE do Arduino
 

          Umas das alternativas de software mais simples utilizadas no desenvolvimento inicial de programações em placas ESP tem sido a plataforma de desenvolvimento Arduino, pois, este possui uma grande comunidade de desenvolvedores, que costumam disponibilizar diversos exemplos e projetos de forma Open Source (gratuita). A transferência de programações a qualquer microcontrolador, exigirá a seleção de pelo menos um dos modelos de placas compatíveis com o software, no caso de placas ESP32 ou similares, será preciso adicionar um novo conjunto nas opções de gerenciamento de placas, no menu Arquivo >> Preferências. Na opção URLs Adicionais para Gerenciamento de Placas, digite a seguinte URL:

https://dl.espressif.com/dl/package_esp32_index.json.

 

Configure as Preferências do Arduino IDE, para que a placa seja reconhecida pelo software.

 

          Caso haja outras URLs adicionadas, digite uma vírgula entre eles para separa-los. Confirme a adição do conjunto de placas ESP32 abrindo o menu Ferramentas e acessando a opção Placa, o modelo utilizado por placas padrão como o DOIT ESP32, será  o ESP32 Dev Module. 
 
          Para testar a comunicação entre a placa e o software, transfira a seguinte programação:

 

/* Projeto Curto Circuito – Blynk ESP32 */

void setup() 
{
 pinMode(2, OUTPUT);      
}

void loop() 
{
  digitalWrite(2, HIGH);   /* LED Liga */
  delay(1000);             /* Espera 1 segundo */
  digitalWrite(2, LOW);    /* LED Desliga */
  delay(1000);             /* Espera 1 segundo */
}

          O exemplo transferido terá como função piscar o LED D2  que encontra-se embutido na própria placa. Se estiver familiarizado com a programação de placas Arduino ou similares, o desenvolvimento inicial com ESP32 será relativamente simples, afinal, a programação escreve-se no padrão comum da linguagem C, declarando os componentes como entradas (INPUT) ou saídas (OUTPUT), controlando o nível lógico com HIGH-1 ou LOW-0 (Liga e desliga), e dando pequenas pausas com delay em milissegundos (1 segundo = 1000 milissegundos).

          Em algumas situações, poderá ocorrer um erro ao tentar transferir uma programação, neste caso, pressione o botão BOOT quando a mensagem “Connecting” surgir, ou quando a barra de progresso estiver cheia.

 

Pressione o botão Boot, para garantir que a programação seja transferida.

 

 

          Para auxiliar no desenvolvimento de futuros projetos, abra o Arduino IDE clique em Sketch >> Incluir Biblioteca >> Gerenciar Bibliotecas. Escreva “ESP32” na barra de pesquisa do gerenciador e procure adicionar ao menos uma biblioteca compatível, com exemplos e funções próprias, orientando a leitura de sensores e componentes presentes na placa ESP32.
 
 
Biblioteca específica com algumas funções básicas.

 

 


Aplicações Práticas

 

          A construção de programações servirá como auxilio no entendimento referente a placas ESP32, e, desse modo, iremos explorar o funcionamento dos principais sensores e portas programáveis, aplicando algumas funções e lógicas de manuseio simples, por meio da plataforma Arduino IDE.

          Para concluir as atividades desse post, tenha em mãos os seguintes componentes:

 

          Você pode compra-los clicando nos links acima ou visitando nosso site: www.curtocircuito.com.br.


Sensor Capacitivo ESP32

          O ESP32 dispõe de dez pinos de leitura capacitiva, que nada mais são do que sensores capazes de interagir com de objetos condutores, variando a resistência de acordo com a leitura coletada. Tais sensores estarão distribuídos entre as seguintes portas GPIOS:

 

Os pinos capacitivos do ESP32 estarão distribuídos entre 10 terminais.

 

          O funcionamento do sensor capacitivo tomará como base a construção de uma programação simples, em que um componente luminoso permanecerá acionado sempre que o pino T5 estiver em contato com algum objeto condutor. A construção do circuito elétrico deste exemplo será simples, basta conectar o terminal positivo do LED ao pino D13 (GPIO13), um resistor de 1KΩ entre o terminal negativo e um dos pinos GND da placa, e um jumper ao pino D12 (GPIO12).  

 

Jumper conectado ao pino D12 para testes com o sensor capacitivo.
 

          Placas ESP32 excedem a largura máxima da placa Protoboard, mas isto não será visto como um problema inicialmente, pois o exemplo irá utilizar poucos componentes.
 
 
          Transfira a programação a seguir:
/* Projeto Curto Circuito – ESP32: Interruptor Touch */
int led = 13; /* Pino D13 do ESP */
void setup()
{
  pinMode(led, OUTPUT);
  Serial.begin(115200);
  Serial.println("ESP32 Touch Interrupt Test");
}

void loop()
{
  int cap = touchRead(4);    /* Direciona a leitura ao pino Touch T0 */
  if (cap < 50)               /* Se o valor do sensor for menor que 50 */
  {
    digitalWrite(led, 1);     /* LED Liga */
    Serial.println("LED ON");

  }
  else {
    Serial.println("LED OFF");
    digitalWrite(led, 0);     /* LED Desliga */

  }
  Serial.println(cap);        /* Escreve o valor coletado no sensor */
  delay(500);
}
 
          O funcionamento da programação será baseado na leitura do sensor capacitivo T5, os valores coletados no sensor serão armazenados na variável int cap e interpretados pela função touchRead(). A lógica presente na linha if (cap < 50) diz que o LED acionará sempre que a leitura da variável estiver abaixo de 50, neste caso, abra o monitor serial do software de programação, e procure passar o dedo sob a ponta do jumper conectado ao GPIO12.
 
 
 
 
Toque na ponta do jumper conectado ao pino D4.
A leitura será mantida em valores acima de 50, enquanto o jumper estiver fora do contato com objetos condutores. 

 

 

          Objetos comuns como Smartphones e tablets, possuem sistemas integrados com o funcionamento similar a este simples exemplo de interruptor táctil, afinal, a maioria das tecnologias eletrônicas utilizam esse tipo de sensor para interações humanas, controlando sistemas computacionais com apenas um toque.


Sensor Hall ESP32

          É um transdutor que altera o valor da tensão de saída ao interagir com magnetismo, sensores como este são utilizados para analisar o efeito Hall (ou tensão de hall), que, de forma resumida, seria um estudo voltado a aplicação de um campo magnético sob objetos condutores, que por sua vez geram um desvio na corrente elétrica presente no condutor.

 

Aplicando um imã a um componente semicondutor, será possível desviar a corrente elétrica aplicada sob o mesmo.


          O objeto condutor utilizado na medição da tensão de Hall, consistirá nos arredores do módulo ESP-WROOM-32 ( chip metálico), e, para gerar o campo magnético basta aplicar um imã qualquer sob o ele. A programação deste sensor irá utilizar uma função de leitura própria, capaz de analisar o magnetismo em placas ESP32,o hallRead(). A construção do circuito elétrico tomará como base o exemplo anterior, terminal positivo do LED no pino D13 (GPIO13), um resistor de 1KΩ entre o terminal negativo e um dos pinos GND da placa. 

 

A análise de hall será realizada por meio do chip do módulo WI-FI.


          A programação abaixo irá acionar um LED quando houver presença de um campo magnético e indicar a intensidade do hall.

/* Projeto Curto Circuito – ESP32:Análise de Hall */

int led = 13; /* Pino D13 do ESP */
void setup()
{
  Serial.begin(115200);  /* Taxa de transmissão */
}
void loop()
{
  int hall = hallRead();    /* Armazena os valores de leitura */
  if (hall < 0)               /* Se o valor do sensor for menor que 0 */
  {
    digitalWrite(led, 1);     /* LED Liga */
  }
  Serial.println("Hall valor:");
  Serial.println(hall); /* Exibe o valor no monitor serial */
  delay(1000);          /* Intervalo de 1 segundo*/
}

 

          Abra o monitor serial, e observe que o valor, inicialmente, se apresenta de forma positiva, porém, quando o imã comum estiver próximo ao módulo, haverá um desvio na corrente, gerando uma diferença de potencial que demonstra-se através das alterações na escala de leitura, que tendem a um valor negativo, indicando assim o desvio dos valores, e a intensidade do campo magnético ao redor do chip. 

 

A leitura do sensor de Hall, indicará o desvio da corrente elétrica, possibilitando determinar a intensidade do campo.


          Umas das principais aplicações para este tipo de sensor poderá ser encontrado em máquinas industriais, por exemplo, como meio de medir a distância ou velocidade de aproximação de peças, aplicação de imãs bipolares no controle de sinais, cilindros pneumáticos, ou até mesmo objetos corriqueiros como Impressoras comuns, onde, o hall será utilizado como forma de identificar o nível ou a ausência de papel.




Controle PWM ESP32

 

          O PWM (Modulação de Largura de Pulso) é uma técnica adotada por muitos Microcontroladores, por ser uma forma eficiente de controlar sinais analógicos digitalmente. Este tipo de pulso encontra-se em todos os pinos GPIO de um ESP32. 

 

Todos os pinos presente em um ESP32 possuem a capacidade de aplicação de um controle PWM.

 


          Sinais analógicos variam continuamente, sendo por muitas vezes difícil definir o valor real, enquanto os valores digitais possuem uma variação mais previsível, alternando entre dois níveis lógicos, ligado (0) e desligado (1). O controle PWM será responsável por codificar tais sinais, onde uma onda quadrada será modulada para receber a leitura analógica, tornando-a digital e por fim ajustando-a de acordo com a amplitude desejada. Na figura abaixo, o pulso está codificando 3 sinais analógicos a 10%, 50% e 90%, então se houver, por exemplo, um sinal analógico de 5V sendo codificado a 10%, será obtido um valor analógico de 0,5V. 

 

A porcentagem do ciclo irá influenciar diretamente na luminosidade do LED.

 


          Um ciclo completo de um sinal será o momento em que o mesmo formar uma onda, no exemplo demonstrado acima, cada quadrado/retângulo será considerado como um ciclo, e a distância entre eles  é o tempo de espera na repetição do sinal. A aplicação de controle PWM em placas ESP32, necessitará de algumas funções específicas, sendo que uma delas requer a construção de três variáveis lógicas para definir o valor da frequência, o canal de controle e a resolução do ciclo.

 

O controle PWM em placas ESP32, envolve o desenvolvimento de uma lógica, por meio do armazenamento de valores.
 


          A frequência, como o próprio nome sugere, irá influenciar na quantidade de ciclos de acordo, e o tempo entre eles será determinado por um cálculo simples: T = 1/F. Portanto, se o valor da frequência for igual a 500, o tempo entre cada ciclo será igual a 2 milissegundos. A resolução irá determinar quantos bits serão utilizados na representação de cada amostragem do sinal, por exemplo, se estiver configurada em 1 bit, então a amostragem será capaz de receber apenas dois valores 0 (OFF) e 1 (ON), no caso de 8 bits será 000, 001, 010, 011, 100, 101, 110, 111. E por fim, o channel será utilizado como forma de conectar as informações do pulso, armazenando os resultados em um único canal, e possibilitando a aplicação de tais informações ao controle de outros componentes.
         Então, no caso de controlar o PWM em um LED, por exemplo, utilizaremos as funções:

ledcSetup(channel, freq, resolution)  e  ledcAttachPin(led, channel)

           Onde: 

ledcSetup:
Armazena os parâmetros do pulso;
ledcAttachPin: Atribui o canal a um componente, controlando o pulso do mesmo.

           A programação abaixo utilizará tais funções no controle de luminosidade de um LED, alternando a intensidade através da leitura de um sensor capacitivo.  

/* Projeto Curto Circuito – ESP32: Controle PWM de um LED */
int led = 13; /* pino D13 do ESP32 */ int freq = 500; /* Frequência 500 Hz */ int channel = 0; /* Canal 0 */ int resolution = 8; /* Resolução 8 bits */ void setup() { Serial.begin(115200); ledcSetup(channel, freq, resolution); ledcAttachPin(led, channel); } void loop() { cap = touchRead(T5); /* Sensor Capacitivo T0 */ Serial.println(cap); ledcWrite(channel, (cap)*10); /* Reduz a luminosidade do LED de acordo com o valor do sensor x10. */ delay(500); }
 

          A função ledcWrite(channel, (cap)*10) irá coletar o valor de leitura do sensor capacitivo e multiplica-lo por 10, para alternar a intensidade da luminosidade no LED.

 

Utilizando sinais PWM para variar a luminosidade doLED.


        Esse tipo de pulso costuma ser aplicado ao controle de alguns parâmetros em componentes, influenciando na intensidade, velocidade, emissões sonoras, em fim, qualquer parâmetro que possa ser influenciado pelo ajuste do sinal elétrico.


ADC – Portas Analógicas ESP32

          Portas analógicas são comumente aplicadas ao controle e análise de sensores. Os 18 pinos analógicos disponíveis em placas ESP32, operam com resolução em 12 bits, tornando a faixa de leitura de 0 á 4095. Trabalhar com qualquer pino ADC será exatamente igual ao procedimento utilizado em placas Arduino,  realizando leituras e controle por meio de funções como analogRead e analogWrite. Porém, ao conectar-se ao Wi-Fi, por exemplo, os pinos ADC2 não irão fornecer leituras, pois, até o presente momento, tais pinos serão utilizados como alimentação para o módulo, portanto, se desejar atribuir uma leitura analógica a qualquer programação conectada a internet, utilize os pino ADC1.  

A pinagem analógica de placas ESP32 operam a uma resolução de 12 bits, com faixa de leitura de 0 á 4095.

 

          Utilize a programação demonstrada anteriormente, substituindo a função touchRead() por analogRead().

/* Projeto Curto Circuito – Controle Analógico */

int led = 13;            /* LED conectado ao pino D13 */
int cap = 0;             /* Variável de leitura capacitiva */
int analog = 0;             /* Variável de leitura analógica */
/* ----- PWM ----- */
int freq = 0;
int channel = 0;
int resolution = 8;

void setup()
{
  Serial.begin(115200);     /* Taxa de transmissão 115200 dBs */
  ledcSetup(channel, freq, resolution);
  ledcAttachPin(led, channel);
}
void loop()
{
  analog = analogRead(12);    /* Substitua o touchRead() por analogReady() */
  freq = analog;
  Serial.println("Leitura do Potenciômetro:");
  Serial.println(analog);
  cap = touchRead(T7);
  if (cap < 50) {
    ledcWrite(channel, analog);
  }
  delay(500);
}

          Para a atividade proposta, adicione um potenciômetro linear de 1K ao circuito, conectando o terminal no meio do componente ao pino D12, os demais terminais nos pinos GND e 3,3 V do ESP, e um jumper no pino D27(T7) como forma de acionar o sensor capacitivo.

 

O ESP fará uma leitura dos valores presente no potenciômetro, controlando a luminosidade do LED.

 



          A função "if" determina que ao pressionar o sensor capacitivo T7, a luminosidade do o LED será ajustada de acordo com os valores de leitura analógica presente no Channel 0. Esse canal estará conectado ao potenciômetro, que será utilizado para ajustar a faixa de leitura do pino D12 entre 0 á 4095.O potenciômetro será um dos meios mais comuns empregados a analisar o funcionamento de sinais analógicos, pois tal componente demonstra de forma simples a variação do sinal, através de uma diferença no potencial elétrico.


Considerações Finais

          Este pequeno componente apresenta-se como uma opção completa no desenvolvimento de sistemas automatizados, já que dispõe de tantas opções para a interação com projetos sem fio, processamento  de informações de forma ajustável, sensores embutidos e múltiplas funções próprias que simplificam a lógica de programação para placas ESP32. Descrever todas as possibilidades em um único post seria equivalente a construção de um artigo científico, mas é claro que não iremos parar por aqui, nas próximas postagens, trabalharemos com a comunicação via módulo Wi-Fi, divisão de processamento, memória RTC, e todo conhecimento obtido será aplicado a um breve projeto prático, com o intuito de explorar as demais oportunidades presente em modelos da Placa Doit ESP32.

          Gostou do tutorial? Curta nossa página e compartilhe! Conhecimento bom é conhecimento compartilhado!