O ESP8266 parte 1 – Serial WIFI Module

17 17-03:00 janeiro 17-03:00 2016 — 6 Comentários

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)

Mega TxRx

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:

esp8266-pinout-800x379

  • 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.

esp8266 cable color

 

 

 

 

O circuito então fica:

esp8266 test

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:

Serial Monitor test

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

“Saludos desde el sur del mundo!” 😉

Um abraço e até o próximo post!

Obrigado

Marcelo

6 Respostas para O ESP8266 parte 1 – Serial WIFI Module

  1. 

    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

    Curtir

Trackbacks e Pingbacks:

  1. ArduFarmBot: Part 2 – “Estação Remota” – IoT – MJRoBot.org - setembro 21, 2016

    […] O ESP8266 parte 1 – Serial WIFI Module […]

    Curtir

  2. O ESP8266 parte 3 – Acionando LEDs remotamente | MJRoBot - janeiro 21, 2016

    […] O ESP8266 – Serial WIFI Module […]

    Curtir

  3. O ESP8266 parte 2 – Web Server | MJRoBot - janeiro 19, 2016

    […] que farei aqui, será ressaltar as principais diferenças da sketch anterior ( O ESP8266 Serial Wifi Module), mas não se preocupem que no final, deixo o link para o código […]

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s