O módulo wireless ESP8266 ESP-01 permite que você conecte o seu Arduino às redes wi-fi (wireless) padrão 802.11 b/g/n, que são as redes mais comuns utilizadas para acessar a internet. Funciona tanto como um AP (Access Point, ou ponto de acesso), como no modo STA (Station), enviando e recebendo dados.
Esse módulo é muito parecido fisicamente com alguns módulos NRF24L01, mas, diferente desses, não temos o cristal de 16 Mhz na placa, mas temos leds indicadores de funcionamento e comunicação.
Características e pinagem do módulo ESP8266 ESP-01
No datasheet do chip ESP8266 você encontra todas as informações sobre o CI, e abaixo destaco as mais importantes:
- Suporte à redes 802.11 B/G/N
- Alcance aproximado: 91 metros, dependendo do ambiente
- Tensão de operação : 3.3 VDC
- Comunicação serial (pinos TX, RX)
- Possibilidade de upgrade do firmware
- Modos de operação : Cliente, Access Point, Cliente+Access Point
- Modos de segurança wireless : OPEN/WEP/WPA_PSK/WPA2_PSK/WPA_WPA2_PSK.
- Suporta comunicação TCP e UDP
- Operando nos modos TCP/UDP, permite até 5 conexões simultâneas
Quem já trabalhou com o módulo Bluetooth HC-05 ou HC-06 não terá dificuldade em utilizar o ESP8266, já que ele também se comunica via serial com o Arduino, e pode ter a sua configuração alterada por meio de comandos AT.
Abaixo, a disposição dos pinos do módulo:
Este módulo trabalha com nível de sinal de 3.3V, assim devemos utilizar um divisor de tensão no pino RX (recepção/serial).
Conexão do ESP8266 ao Arduino Uno
Os pinos RX e TX do Arduino Uno são, respectivamente, os pinos digitais 0 e 1. Como esses pinos são utilizados também para comunicação com o computador, vamos “criar” uma serial nos pinos 2 e 3 por meio da biblioteca SoftwareSerial. Assim, podemos acompanhar os resultados da conexão do módulo ESP8266 no serial monitor.
Utilize um resistor de 10K para ligar o pino CH_PD (Chip Enable) ao pino 3.3V da alimentação do módulo.
No circuito acima montei o divisor de tensão com resistores de 220 e 330 ohms, reduzindo a tensão no pino RX para aproximadamente 3V. Utilize a calculadora de divisor de tensão para calcular a tensão de saída de acordo com os resistores que você estiver usando.
Outra observação importante tem relação com a alimentação do módulo, de 3.3V. Nos testes eu usei o pino 3.3V do Arduino, mas o módulo em algumas situações necessita de até 300mA de corrente, bem acima dos 50mA que o Arduino pode fornecer. Assim, para evitar sobrecarga, utilize uma fonte de alimentação externa para o módulo.
Programa e download biblioteca ESP8266
Para o funcionamento do módulo juntamente com a biblioteca SoftwareSerial, precisamos fazer uma pequena alteração na biblioteca ESP8266. Primeiramente, faça o download da ESP8266 clicando aqui. Em seguida descompacte o arquivo e coloque a pasta da biblioteca dentro da pasta LIBRARIES da IDE do Arduino.
Dentro dessa pasta, procure pelo arquivo ESP8266.h :
Abra esse arquivo utilizando o editor de textos de sua preferência e procure pela linha contendo o seguinte valor:
//#define ESP8266_USE_SOFTWARE_SERIAL
Retire as barras duplas do começo da linha para que o uso da SoftwareSerial seja habilitado. A linha ficará assim:
#define ESP8266_USE_SOFTWARE_SERIAL
Salve o arquivo ESP8266.h. Agora carregue o seguinte programa no Arduino:
// Programa : Teste modulo wireless ESP8266 // Autor : Arduino e Cia // Carrega as bibliotecas ESP8266 e SoftwareSerial #include "ESP8266.h" #include "SoftwareSerial.h" // Cria uma serial nas portas 2 (RX) e 3 (TX) SoftwareSerial minhaSerial(2 , 3); // Define que o modulo ira utilizar a serial minhaSerial ESP8266 wifi(minhaSerial); // Configuracao ID e senha da rede Wireless #define SSID "NOME_DA_REDE" #define PASSWORD "SENHA_DA_REDE" void setup() { Serial.begin(9600); } void loop(void) { Serial.print("Inicializando modulo\r\n"); Serial.print("Versao do firmware: "); Serial.println(wifi.getVersion().c_str()); // Define modo de operacao como STA (station) if (wifi.setOprToStation()) { Serial.print("Modo STA ok\r\n"); } else { Serial.print("Erro ao definir modo STA !r\n"); } // Conexao a rede especificada em SSID if (wifi.joinAP(SSID, PASSWORD)) { Serial.print("Conectado com sucesso a rede wireless\r\n"); Serial.print("IP: "); Serial.println(wifi.getLocalIP().c_str()); } else { Serial.print("Erro ao conectar rede wireless !!!\r\n"); } Serial.print("*** Fim ***\r\n"); while(1){} }
Esse arquivo conecta o módulo à rede wi-fi especificada em SSID (troque o NOME_DA_REDE e SENHA_DA_REDE pelas informações da sua rede wireless), e mostra no serial monitor o endereço IP que foi obtido :
Na pasta de exemplos da biblioteca, você tem outros programas para utilizar o módulo como Webserver, conexões TCP/UDP, buscar informações de páginas web, etc.