O ESP8266 é talvez o mais versátil modulo serial para se ligar “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 noutros 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!
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
Artigo disponibilizado por MJRobot.org
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.
Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.
Não se esqueçam de fazer like na nossa Página no Facebook.
Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?