O ESP8266 é talvez o mais versátil modulo serial para se conectar “coisas” a internet, daí ele ser tão popular no mundo do IoT. Ele é um modulo completo, que inclui um microprocessador que pode ser programado diretamente via o IDE do Arduino (em C++), ou em outros ambientes para compilação (usualmente usando uma linguagem de alto nível própria, o “Lua”). Para se controlar “coisas”, não há necessidade de se ter o Arduino propriamente dito para a interface, pois o ESP8266 possui 2 GPIOs (dois “pinos” de entrada/saída).
Link para o Forum específico do ESP8266
Features:
- 802.11 b/g/n
- Wi-Fi Direct (P2P), soft-AP
- Integrated TCP/IP protocol stack
- Integrated TR switch, balun, LNA, power amplifier and matching network
- Integrated PLLs, regulators, DCXO and power management units
- +19.5dBm output power in 802.11b mode
- Power down leakage current of <10uA
- 1MB Flash Memory
- Integrated low power 32-bit CPU could be used as application processor
- SDIO 1.1 / 2.0, SPI, UART
- STBC, 1×1 MIMO, 2×1 MIMO
- A-MPDU & A-MSDU aggregation & 0.4ms guard interval
- Wake up and transmit packets in < 2ms
- Standby power consumption of < 1.0mW (DTIM3)
Meio cheio de palavrões acima, mas é bom ter a mão “just in case”.
Até hoje, eu somente estudei o ESP8266 junto com o Arduino, substituindo a necessidade de um relativamente caro shield para wiFi (Shield, são umas plaquinhas que se instalam ao Arduino para expandir suas capacidades). Ainda não brinquei com a menina no modo “stand alone”, isso ficará para um post mais adiante. A propósito, o ESP8266 é realmente uma menina bonita e prendada, mas como todas elas, dão um trabalho ……… 😉
Testando o ESP8266 com comandos AT:
Bom, a primeira coisa que se tem que fazer é testar o módulo com comandos AT, que é o standard de comunicação. Em geral o modulo vem de fabrica falando em uma velocidade de 115.200 bauds. isso acaba complicando, pois no caso do Arduino UNO (vou usar só UNO daqui para frente), só a Serial por HW “0” , (pinos 0 e 1) consegue trabalhar nessa velocidade. O problema é que o Monitor serial do PC (vou também deixar PC como um termo genérico aqui, mas que meu Mac não me ouça…..), também usa esse mesmo port serial. A solução no caso do UNO é usar a biblioteca “SoftwareSerial” para designar outros 2 pinos genéricos (GPIOs) para serem usados como uma porta serial (por SW). Isso funciona OK desde que a velocidade de transmissão seja inferior a 19.200 bauds. Perfeito! Mas como fazer no caso do ESP8266 vir programado em uma velocidade maior? O jeito é reprogramar-lo, claro! BUT, nem todos os Firmwares que vem carregados no módulo aceitam reprogramação. Então, o negócio é atualizar o FW (Ufa!!!) . Em outro post eu vou explicar como. Aqui, para não esquentar a cabeça com esse negócio de velocidade, firmware, etc, vou sar o Arduino MEGA, que na falta de 1, tem 4 ports seriais por HW!!!!!!!! Viva a abundância! ops! Afinal sou brasileiro, né 😉
Os ports do MEGA:
- TX0/RX0 ==> Pin 1,0 (mesmo que o UNO) ==> “Serial 0”
- TX1/RX1 ==> Pin 18,19 ==> “Serial1”
- TX2/RX2 ==> Pin 16,17 ==> “Serial2”
- TX3/RX3 ==> Pin 14,15 ==> “Serial3”
Para meus testes, vou usar a Serial 2 (pinos 16 e 17)
Bueno, chegou a hora de olhar a menina mais de pertinho …
- ALIMENTAÇAO: 3.3V. Isto é muito importante, pois o módulo não funciona com 5V e pode queimar se voce teimar (rimou!). Os pinos de entrada também não suportam 5V e ao receber um sinal do Arduino, é importante usar um “conversor de nível de tensão” (nome bonito para o bom e velho divisor de tensão por resistores). Outro ponto importante, é bom ter uma fonte de 3.3V independente. Nem sempre o Arduino consegue suprir a corrente necessária para a operação do módulo.
O módulo tem 6 pinos:
- TX: que vai ser conectado ao RX2 do MEGA (pode ser conectado direto, pois o MEGA não tem problema em entender 3.3V como HIGH).
- RX: conectado ao TX2 do MEGA via um conversor de nível
- VCC: 3.3V
- GND: Ground. Nunca é demais lembrar que é necessário conectar o GND do ESP8266 ao GND do MEGA.
- CH_PD (*): conectado ao pin 4 do MEGA para reset de SW para iniciar comunicação
- RST: RESET em geral, conecta em VCC
- GPIO0: aberto
- GPIO2: aberto
(*) Em vários sites na internet, esse pino é conectado direto a VCC. No meu caso, sem o “reset” por SW (coloca o pino momentaneamente em LOW), o ESP8266 não funcionou.
Existem no mercado adaptadores para inserir o modulo no protoboard, pois a distancia fisica entre os pinos do ESP8266 não são compatíveis). Eu usei um cabinho com fios “Macho/Fêmea” tipo FTDI (veja abaixo) para a conexão. As cores mostradas são compatíveis com o diagrama de conexão.
O circuito então fica:
Nada de especial no diagrama de HW. A plaquinha vermelha é uma fonte independente de 3.3V que se acopla ao protoboard. veja que o fio amarelo TX2 no arduino, passa pelo divisor de tensão (resistores de 1K e de 2.2K), para que quando o TX2 esteja em HIGH (5V), o ESP8266 receba aprox. 3.3V (HIGH para ele).
O Software:
A idéia dessa sketch é executar testes no module, fazendo cm que se possa entrar com comandos AT via o monitor serial e ver a resposta:
Na parte inicial de comentários, estão os comandos mais básicos. Ao carregar o programa, vai aparecer um monte de lixo, depois o nome no modulo e por fim a palavra “ready”. nesse momento se pode enviar os comandos AT.
Comece pelo AT simples, o modulo deve retornar OK, teste outros comandos e por aí vai.
Em seguida a sketch, há uma figura com o que aparece no Monitor serial, para diversos comandos.
/**************************************************************** * ESP8266 * Arduino Mega Using Serial2 * AT commands examples for test: * AT =====> ESP8266 returns OK * AT+RST =====> ESP8266 restart and returns OK * AT+GMR =====> ESP8266 returns AT Version; SDK version; id; OK * AT+CWMODE? => ESP8266 returns mode type * AT+CWLAP ===> ESP8266 returs close access points * AT+CIFSR ===> ESP8266 returs designided IP * AT+CIPMUX=1 ==>Set ESP8266 for multoples conections * AT+CIOBAUD=9600 ==>Change Baudrate ==> ESP8266 returs OK * AT+CIPSERVER=1,80 ==> set modo SERVER port: 4040 * AT+CWMODE=3 ==> Conect ESP8266 ascombined mode (Access Point (2) and Server (1)) * AT+CWSAP="Acc_Point_name","password",wifi_Channel,cript# ==> ej. AT+CWSAP="ESP_8266_AP,"1234",3,0 * AT+CWJAP="SSID","password" ==> Connect to WiFi network * AT+CWJAP="ROVAI TIMECAP","mjr747@1" * * Marcelo Jose Rovai 18Jan16 ******************************************************************/
#define esp8266 Serial2 #define CH_PD 4 #define speed8266 9600 // This is the speed that worked with my ESP8266 void setup() { esp8266.begin (speed8266); Serial.begin(9600); reset8266(); // Pin CH_PD need a reset before start communication }
void loop() { while(esp8266.available()) { Serial.write(esp8266.read()); } while(Serial.available()) { esp8266.write(Serial.read()); } }
/*************************************************/ // Reset funtion to accept communication void reset8266 () { pinMode(CH_PD, OUTPUT); digitalWrite(CH_PD, LOW); delay(300); digitalWrite(CH_PD, HIGH); }
O Monitor Serial:
Deixo abaixo um link com meu Dropbox, onde estão os documentos referente aos testes: sketch do Arduino, o Fritzing e dois documentos em PDF bem legais. Um com a lista completa de comandos e outro com um guia para fazer o set-up do módulo em varias configurações (web server, Access point, etc.). Já antecipo que a única maneira de aprender é colocar a mão na massa e ver o que acontece. Faça as ligações, entre com o programa e mande bala!!!!!
Link para a documentação do ESP8266
Conclusão
Bom, é isso aí.É isso aí. Nos próximos posts mostrarei como configurar o ESP8266 como um servidor web. Agora é por a mão na massa e boa sorte!
Como sempre, espero que este projeto ajude outras pessoas a encontrar seu caminho no apaixonante mundo da eletrônica e do IoT!
Não deixe de visitar e seguir minha página: MJRoBot.org no Facebook
Boa tarde Marcelo.
Estou fazendo exatamente igual, porém quando ligo o ESP, pela fonte externa, sem ligar o arduino ele acende as luzes de energia (vermelha) e a de dados (azul), entretanto quando ligo o arduino a azul se apaga e não obtenho nenhuma resposta via serial. Conseguiria me ajudar. Abraços
CurtirCurtir
Ola amigo, estou usando o Arduino Mega e fiz o esquema de montagem conforme dito acima, mas quando compilo o código aparece um monte de “lixo” e não aparece o que eu realmente quero que e o ”Ready”. Algum problema com o Windows 8?
CurtirCurtir
Bom dia. É muito provável que as velocidades do Mega e do ESP-01 não são as mesmas.
CurtirCurtir