Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


Introdução ao ESP32


Neste artigo vamos falar sobre o ESP32, que considero um irmão mais velho do ESP8266. Eu gosto muito deste microcontrolador porque ele tem WiFi. Só para você ter uma ideia, antes do ESP existir, se você precisasse que um Arduino tivesse WiFi, você teria que gastar entre R$200 e R$300 para comprar um adaptador de WiFi. O adaptador para cabo de rede não é tão caro, mas para WiFi sempre foi e continua sendo caro. Mas, felizmente, a Espressif Systems lançou o ESP e está resolvendo a nossa vida.
esp32
Gosto do ESP32 com esse formato que tem uma porta USB. Esse esquema de NodeMCU é fácil de manipular porque não precisa de eletrônica nenhuma. Basta ligar o cabo, alimentar o dispositivo e programá-lo. Ele funciona exatamente como um Arduino.
Enfim, hoje vamos falar dos aspectos gerais do ESP32 e como configurar a IDE do Arduino para programar mais dispositivos do tipo. Também vamos fazer um programa que procura as redes e mostra qual a mais potente.

Características principais

ESP32
- Chip com WiFi embutido: padrão 802.11 B/G/N, operando na faixa de 2.4 a 2.5GHz
- Modos de operação: Client, Access Point, Station+Access Point
- Microprocessador dual core Tensilica Xtensa 32-bit LX6
- Clock ajustável de 80MHz até 240MHz
- Tensão de operação: 3.3 VDC
- Possui SRAM de 512KB
- Possui ROM de 448KB
- Possui memória flash externa de 32Mb (4 megabytes)
- Corrente máxima por pino é de 12mA (recomenda-se usar 6mA)
- Possui 36 GPIOs
- GPIOs com função PWM / I2C e SPI
- Possui Bluetooth v4.2 BR / EDR e BLE (Bluetooth Low Energy)


Comparativo entre ESP32, ESP8266 e Arduino R3

Tabela comparativa entre ESP32, ESP8266 e Arduino R3


Tipos de ESP32

O ESP32 já nasceu com um monte de irmãos. Hoje estou usando o primeiro da esquerda, da Espressif, mas são várias marcas e tipos, inclusive com display Oled embutido. No entanto, diferenças à parte, são todos o mesmo chip: o LX6 da Tensilica, de 2 Core.
Tipos de ESP32


WiFi NodeMCU-32S ESP-WROOM-32

Este é o diagrama do ESP que estamos usando na nossa montagem. Trata-se de um chip que tem muito recurso e poder. São diversos pinos que você escolher se quer trabalhar como análogo digital, digital análogo ou ainda se quer trabalhar a porta como digital.
Diagrama do ESP


Configurando IDE do Arduino (Windows)

Veja agora como configurar a IDE do Arduino para podermos compilar para o ESP32:

 1. Faça o download dos arquivos através do link: https://github.com/espressif/arduino-esp32

  2. Descompacte o arquivo e copie o conteúdo para o seguinte caminho:
C:/Users/[YOUR_USER_NAME]/Documents/Arduino/hardware/espressif/esp32
Obs: caso não exista o diretório “espressif” e “esp32”, basta criá-los normalmente.

  3.  Abra o diretório:
C:/Users/[YOUR_USER_NAME]/Documents/Arduino/hardware/espressif/esp32/tools
Execute o arquivo “get.exe”.
cmd

  4. Após a finalização do “get.exe”, plugue o ESP32, aguarde os drivers serem instalados (ou instale manualmente).
Pronto, agora basta escolher a placa do ESP32 em “ferramentas >> placa” e compilar seu código.
IDE


WiFi Scan

Neste vídeo de Introdução ao ESP32 mostro um programa que serve como um exemplo de como buscar as redes WiFi disponíveis próximas ao ESP-32, assim como a intensidade do sinal de cada uma delas. A cada escaneamento, também podemos descobrir qual a rede com a melhor intensidade de sinal.


Código

Primeiramente vamos incluir a biblioteca “WiFi.h”, ela será necessária para nos permitir trabalhar com a placa de rede do nosso dispositivo.

#include "WiFi.h"

A seguir, vamos declarar duas variáveis que serão utilizadas para guardar o SSID (nome) da rede e a intensidade do sinal.

String redeSSID = "";
int intensidadeSinal = -9999;


Setup

Na função setup(), definiremos o modo de comportamento WiFi do nosso dispositivo. Nesse caso, como o objetivo é procurar por redes disponíveis, vamos configurar nosso dispositivo para trabalhar como “estação”.

void setup()
{
    // Instrução para inicializar o Serial, utilizaremos apenas para log no monitor.
    Serial.begin(115200);

    // configurando o modo de operação do WiFi como estação
    WiFi.mode(WIFI_STA);

    // desconecta do access point caso ele já esteja conectado
    WiFi.disconnect()


Loop

Na função loop(), vamos fazer a busca pelas redes disponíveis e em seguida imprimir no log as redes encontradas. Para cada uma dessas redes faremos a comparação para encontrar a com maior intensidade de sinal.

void loop()
{
//    Serial.println("scan start");

    //realiza o escaneamento das redes disponíveis
    int n = WiFi.scanNetworks();
    Serial.println("Escaneamento realizado");

    //verifica se encontrou alguma rede
    if (n == 0) {
        Serial.println("Nenhuma rede encontrada");
    } else {
        redeSSID = "";
        intensidadeSinal= -9999;
        Serial.print(n);
        Serial.println(" redes encontradas\n");
        for (int i = 0; i < n; ++i) {
          // imprime no log cada uma das redes encontradas
          Serial.print("SSID: ");
          Serial.println(WiFi.SSID(i)); //nome da rede
          Serial.print("SINAL: ");
          Serial.print(WiFi.RSSI(i)); //intensidade do sinal
          Serial.print("\t\tcanal: ");
          Serial.print((int)WiFi.channel(i));
          Serial.print("\t\tMAC: ");
          Serial.print(WiFi.BSSIDstr(i));
          Serial.println("\n\n");
          
          
       
          if(abs(WiFi.RSSI(i)) < abs(intensidadeSinal))
          {
             intensidadeSinal = WiFi.RSSI(i);
             redeSSID = WiFi.SSID(i);
             Serial.print("REDE COM MELHOR SINAL ENCONTRADA: ( ");
             Serial.print(redeSSID);
             Serial.print(" ) - SINAL : ( ");
             Serial.print(intensidadeSinal );
             Serial.println(" )");
          }                        
         
          delay(10);
        }
    }
    Serial.println("\n------------------------------------------------------------------------------------\n");

    // deixa um intervalo de 10 segundos para fazer um novo escaneamento
    delay(5000);
}


“if(abs(WiFi.RSSI(i)) < abs(intensidadeSinal))”

Repare que na instrução acima, utilizamos abs(), essa função pega o valor absoluto (ou seja, não negativo) do número. No nosso caso fizemos isso para achar o menor entre os valores na comparação, pois, a intensidade do sinal é dada como um número negativo e, quanto mais próximo de zero, melhor o sinal.



Arquivos para download:
PDF
INO

Postar um comentário

22 Comentários

  1. Ola Fernando!! Parabéns pelo seu trabalho! Excelente! Gostaria de saber qual protoboard vicv utiliza para o ES32. Abração!

    ResponderExcluir
  2. não consegui. aparece o erro
    Arduino: 1.8.5 (Windows 10), Placa:"ESP32 Dev Module, QIO, 80MHz, 4MB (32Mb), 921600, None"

    Property line '

    ResponderExcluir
  3. Vou comprar um ESP32!!! Post bem completo!

    ResponderExcluir
  4. Montei um leitor de smartcard cartão contato com arduino mega 2560 para portão automático, gravo o programa em outro microcontrolador e placa para baratear o projeto no momento e o mais pedido pelo preço, estou atualizando para NFC com checagem de segurança via wifi onde o servidor autenticador que sera um microcontrolador não ira ficar no portão ,no portão só um transmissor para o microcontrolador, os "vagabundos" estavam roubando o sistema e clonando as chaves e o algoritmo de autenticação. Queria saber se Esp32 pode usar bibliotecas criada por mim junto com outras biblioteca criada para mega 2560 e se caso use o Esp32 como projeto final tem como bloquear para não fazer download do hex ou source?

    ResponderExcluir
    Respostas
    1. Boa noite Alejandro, gostaria de saber se vc consegue utilizar o nfc do celular juntamente com o esp32 e se consegue pode me explicar como? Desde já agradeço.

      Excluir
  5. Boa tarde Professor, após compilar o codigo fonte aparece a seguinte mensagem :
    " leaving...
    Hard reseting "
    O Código ta carregado. Porém eu não consigo visualizar as redes encontradas pelo esp32. Obrigado

    ResponderExcluir
  6. Professor , desculpe a falta de conhecimento, revendo o video vi que tinha que abrir no monitor serial. Porém ao abrir essa janela em vez de mostrar os nomes da redes. Aparece caracteres aleatórios. Por gentileza me ajudar.

    ResponderExcluir
    Respostas
    1. Olá, Helio. Por favor, verifique se a velocidade que usou no Serial.begin(*velocidade*);
      é a mesma que está no serial monitor. Abraço!

      Excluir
    2. Boa tarde Professor, consegui . E desculpe a demora para responder. É que só agora estou recebendo a notificações do seu site. Aproveito para parabenizar pelo video da plotter com raspberry . Abraços...

      Excluir
  7. Bom dia! Segui seu tutorial, mas não consigo abrir o monitor porque a opção porta fica desabilitada. Tem que fazer mais alguma configuração?

    ResponderExcluir
  8. Fernando, parabéns pelo ótimo trabalho. Estou mergulhando de cabeça nesse universo ESP. Depois que vi seus vídeos e o seu site não consigo nem tocar mais no pic. Parabéns !!!!!

    ResponderExcluir
  9. Amigo Parabéns pelo método de ensino. tenho um problema esse a seguir; exec: "C:\\Program Files (x86)\\Arduino\\hardware\\expressif\\esp32/tools/xtensa-esp32-elf/bin/xtensa-esp32-elf-g++": file does not exist
    Erro compilando para a placa ESP32 Dev Module ---- poderia me ajudar a resolver? sem mais, agradeço.

    ResponderExcluir
    Respostas
    1. Oi você conseguiu resolver o problema ? Eu também estou com o mesmo problema me ajuda

      Excluir
  10. Fernando, na compilação não é possível encontrar o método mode em WiFi.mode(WiFi_AP)

    ResponderExcluir
    Respostas
    1. Boa noite, o meu apresentou o mesmo problema. Como faço para resolver?

      Excluir
  11. Olá Em primeiro um muito Obrigado por nos ajudar em programação!, Em Fernando fiz um teste no wifi scan mais no meu terminal so aparece ,,,,,



    Brownout detector was triggered

    ets Jun 8 2016 00:22:57

    rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0018,len:4
    load:0x3fff001c,len:956
    load:0x40078000,len:0
    load:0x40078000,len:13256
    entry 0x40078a90

    deixe ele ligado e teve um dia que ele localizou as redes
    me parece que esp32 está abilitando este loop e fica neste looooop sem parar.

    ResponderExcluir
  12. Muito boas essas dicas!
    Fernando é possível ter ao mesmo tempo um server BLE e um webserver a correr no esp32?

    ResponderExcluir
  13. ola, Professor Fernando sou fá do seu trabalho, Carreguei o cód: para a plataforma porem foi detectado um erro, ao fazer uma checape percebi que o mesmo estava faltando finalizar o comando WiFi.disconnect() com o ; e } . Desde já Agradeço.
    Att: Luis Bastos.

    ResponderExcluir
  14. olá, Professor Fernando, aparentemente deu certo aqui mas na hora de abrir o serial ele mostra vários símbolos aleatórios em vez de aparecer como mostra em seu vídeo, você sabe o que posso estar fazendo errado?

    ResponderExcluir
  15. Prof. acho top o su trabalho.
    Gostaria da sua ajuda !
    Como faço pra ligar 4 motores no ESP32, pois no projeto só tem 3 .
    Como faço ?

    ResponderExcluir
  16. Boa noite Fernando, comprei o ESP32 e estava fazendo conforme você esplicou. olha o erro:


    Traceback (most recent call last):

    esptool.py v3.1

    File "esptool.py", line 4582, in

    Serial port COM5

    File "esptool.py", line 4575, in _main

    File "esptool.py", line 4074, in main

    File "esptool.py", line 120, in get_default_connected_device

    File "esptool.py", line 313, in __init__

    File "serial\__init__.py", line 90, in serial_for_url

    File "serial\serialwin32.py", line 64, in open

    serial.serialutil.SerialException: could not open port 'COM5': FileNotFoundError(2, 'O sistema n�o pode encontrar o arquivo especificado.', None, 2)

    [12972] Failed to execute script esptool

    a porta serial [12972] Failed to execute script esptool

    selecionada não existe ou sua placa não está conectada

    Agradeço desde já.

    ResponderExcluir