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.
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
- 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
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.
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.
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”.
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.
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.
22 Comentários
Ola Fernando!! Parabéns pelo seu trabalho! Excelente! Gostaria de saber qual protoboard vicv utiliza para o ES32. Abração!
ResponderExcluirmuito bom
ResponderExcluirnão consegui. aparece o erro
ResponderExcluirArduino: 1.8.5 (Windows 10), Placa:"ESP32 Dev Module, QIO, 80MHz, 4MB (32Mb), 921600, None"
Property line '
Vou comprar um ESP32!!! Post bem completo!
ResponderExcluirMontei 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?
ResponderExcluirBoa 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.
ExcluirBoa tarde Professor, após compilar o codigo fonte aparece a seguinte mensagem :
ResponderExcluir" leaving...
Hard reseting "
O Código ta carregado. Porém eu não consigo visualizar as redes encontradas pelo esp32. Obrigado
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.
ResponderExcluirOlá, Helio. Por favor, verifique se a velocidade que usou no Serial.begin(*velocidade*);
Excluiré a mesma que está no serial monitor. Abraço!
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...
ExcluirBom 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?
ResponderExcluirFernando, 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 !!!!!
ResponderExcluirAmigo 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
ResponderExcluirErro compilando para a placa ESP32 Dev Module ---- poderia me ajudar a resolver? sem mais, agradeço.
Oi você conseguiu resolver o problema ? Eu também estou com o mesmo problema me ajuda
ExcluirFernando, na compilação não é possível encontrar o método mode em WiFi.mode(WiFi_AP)
ResponderExcluirBoa noite, o meu apresentou o mesmo problema. Como faço para resolver?
ExcluirOlá 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 ,,,,,
ResponderExcluirBrownout 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.
Muito boas essas dicas!
ResponderExcluirFernando é possível ter ao mesmo tempo um server BLE e um webserver a correr no esp32?
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.
ResponderExcluirAtt: Luis Bastos.
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?
ResponderExcluirProf. acho top o su trabalho.
ResponderExcluirGostaria da sua ajuda !
Como faço pra ligar 4 motores no ESP32, pois no projeto só tem 3 .
Como faço ?
Boa noite Fernando, comprei o ESP32 e estava fazendo conforme você esplicou. olha o erro:
ResponderExcluirTraceback (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á.