.

Olá, venho aqui compartilhar com vocês um pequeno tutorial para aqueles que desejam iniciar o uso do ESP8266 junto com Arduino Mega.

Fazendo dessa forma, isto é, conectando o ESP8266 ao Arduino Mega, você consegue se livrar do Ethernet Shield W5100 e seu cabo de rede, e mesmo assim continua dando ao Arduino conectividade à intranet/internet.

A comunicação entre o arduino Mega e o ESP8266 é feita por 2 pinos do arduino, o TX e RX, que se ligam ao RX e TX do módulo, isto é, o TX do arduino Mega deve ser conectado ao RX do ESP8266 e o RX do arduino Mega deve ser conectado ao TX do ESP8266.

Porém, como o arduino solta no TX sinal com 5V de tensão, não se deve ligar diretamente o TX do arduino com o RX do ESP8266. É necessário usar 2 resistores ligados em série, um com o dobro da resistência que o outro, para fazer um divisor de tensão resistivo que será capaz de derrubar a tensão de 5V que o TX do arduino solta. O divisor de tensão fará com que chegue até o RX do ESP8266 a tensão aceita pelo módulo, isto é, 3.3V

No desenho abaixo, ali onde há a fonte alimentando a protoboard, é obrigatório que a tensão seja de 3.3V, senão vc queimará o ESP8266.

Se assegure também que a alimentação seja o mais próximo possível de 3.3V. No início, eu apanhei bastante porque eu obtinha no serial monitor um monte de caracteres estranhos vindos do módulo ESP8266, e o culpado era a tensão que eu estava usando, que era de 3V, insuficiente portanto.

Use um cabo USB para interligar o computador ao arduino.

Muita atenção na qualidade das conexões dos fios. Quando há conexões mal feitas, vc terá como resultado instabilidade do módulo muito grande, como falhas na conectividade da rede, funcionamento intermitente (ora funciona, ora não funciona, ora funciona, ora não funciona).

Importante também ligar o RST e o CH_PD aos 3.3V usando um resistor.

Nunca é demais lembrar que o GND da fonte deve estar conectado ao GND do arduino Mega e o GND do ESP8266.

Assegure-se que todas as conexões foram feitas corretamente:

MEGA D16 (TX)  <------>  DIVISOR TENSÃO 3.3V <----->ESP8266 RX
MEGA D17 (RX) <------------------------------------------------------> ESP8266 TX
FONTE 3.3V (+) <------------------------------------------------------> ESP8266 3.3V
FONTE GND (-) <---------------->  MEGA GND <------------> ESP8266 GND
FONTE 3.3V (+) <---------------> R= 10K ohm<---------------> ESP8266 RST
FONTE 3.3V (+) <---------------> R= 10K ohm<---------------> ESP8266 CH_PD

Segue como fazer as conexões:

Esse esquema acima serve para usar o hardware serial 2 do arduino mega. Por que hardware serial? Porque se seu ESP8266 veio configurado de fábrica com velocidade de 115200 bauds, só funciona por hardware serial.

Eis um sketch básico para vc fazer upload no arduino:

void setup()
{
      Serial2.begin(115200);
      Serial.begin(9600);
}


void loop()
{
     while (Serial2.available()) { Serial.write(Serial2.read()); }
     while (Serial.available()) { Serial2.write(Serial.read()); }
}

Esse sketch acima serve para verificar se o módulo responde aos comandos AT. Simplesmente digite AT e envie ao módulo e espere que retorne OK

Se retornar OK, seu módulo está funcionando.

Perceba que no sketch a velocidade de comunicação entre o arduino e o ESP8266 foi configurada para ocorrer a 115200 bauds. Geralmente esses módulos vêm de fábrica a 115200 bauds ou 9600 bauds, portanto se vc não sabe qual a velocidade do seu módulo, tente o sketch acima primeiro. Depois de fazer o upload do sketch acima, abra o serial monitor e coloque em 9600 bauds e configurado em NL + CR 

Atenção para não confundir a velocidade da comunicação serial entre arduino -> ESP8266, que chamamos de serial2 e a comunicação serial entre o arduino -> pc, que chamamos simplesmente de serial. Ali no serial monitor, ou seja, velocidade de comunicação serial entre o arduino e o pc, configuramos no sketch que deverá ocorrer a 9600 bauds e portanto o serial monitor deve estar marcada para essa velocidade de 9600 bauds. Já a velocidade de comunicação serial2 (arduino -> ESP8266) é definida apenas no sketch, ali no void setup, e o serial monitor precisa (e nem tem onde mexer) para contemplar essa configuração da serial2

Se ali no serial monitor o comando AT que vc digitou lhe retornou caracteres estranhos, tente alterar o sketch ali  na linha onde está Serial2.begin(115200) para outro valor, por exemplo 9600. Não altere mais nada e faça upload novamente. O serial monitor deve estar a 9600 bauds e digite AT e envie.

Bom, está aí minha contribuição. Sintam à vontade para dar sugestões e/ou sugerir correções, afinal muitos de nós estamos em busca de um mesmo objetivo: avançarmos juntos sobre esse fantástico e promissor módulo

Grato...

Hugo

EDIT (29/09/2015) --> Não sei se é o caso de relatar, mas em todo caso, aí vai: para esse tutorial, não é necessária atualização de firmware do ESP8266, nem placa FTDI, nem instalar qualquer placa na IDE do arduino. Simplesmente vc usa a IDE do arduino que vc tiver, conecta os fios e resistores conforme a imagem e faz o upload do sketch diretamente pro arduino, da mesma forma como vc sempre faz outros uploads de sketches. Portanto, essa forma apresentada aqui nesse tutorial difere muito dos tutoriais do colega Carlos Kwiek, onde ele usa a placa FTDI em conjunto com o ESP8266, sem arduino em nenhum momento, a IDE do arduino precisa ser configurada pro ESP8266 e o upload dos sketches são feitos diretamente pro ESP8266. 

EDIT (15/10/2015) --> Relendo a postagem, percebi que um dos esquemas de ligação que eu apresentei estava errado no que se refere ao RX/TX do arduino Mega. Postei o esquema correto.

.

Exibições: 17559

Respostas a este tópico

José Rodolfo, 

Não conheço LD33. Qual a tensão mínima para o LD33 ? 

Se estiver falando do LD1117V33 :

https://www.sparkfun.com/datasheets/Components/LD1117V33.pdf

A tensão mínima de entrada é Vin = 4.75 até 15 V.

O Baud rate padrão é 115200 bps. Mas pode variar. 

Sobre o IP , você poderá altera-lo usando comandos AT. 

Se eu não estiver enganado, a rede WIFI do ESP8266 é DHCP, isto é, o IP é escolhido automaticamente.

Se o IP esta fora do seu range, é porque provavelmente não conectou na rede. 

Veja os comandos para verificar o status da rede :

ESP8266 - Mais alguns comandos AT :
http://labdegaragem.com/forum/topics/conhecendo-o-esp8266?commentId...

Uma forma de conectar o uno com o ESP.

Notar que a serial fica liberada, e os pinos 2, 3 fazem a comunicação. Breve publico um teste com upload de um programa e video.

Eu ainda não testei, estou de mudança de um estado a outro e minha participação tem sido muito limitada no forum.

Abs.

Carlos, foi com uma configuração similar que eu testei. Funcionou OK !

Só não usei o regulador de 3,3V do Arduino para alimentar o ESP8266, pois ele tem pequena capacidade de corrente.Mas deve funcionar para testes. 

ESP8266 - Teste de comunicação serial do Arduino com o ESP8266 :
http://labdegaragem.com/forum/topics/conhecendo-o-esp8266?commentId...

Isso mesmo J.Augusto, para testes esta ok, mas deve ser usada uma fonte externa de no mínimo 1A, concordo plenamente, só não testei ainda porque tenho todas minhas coisas empacotadas para minha mudança, mas logo o farei e posto aqui tb.

Abs.

Eu fiz como ensinado mas na compilação aparece que serial2 não foi definido.
O que faço?

Qual Arduino usou ? O exemplo do Hugo serve somente para Arduino Mega. 

Se for o Arduino comum , veja esse exemplo :


ESP8266 - Teste de comunicação serial do Arduino com o ESP8266 :
http://labdegaragem.com/forum/topics/conhecendo-o-esp8266?commentId...

Para fazer meu Mega funcionar com o ESP8266 eu tive que fazer algumas modificações. A mais importante foi um RESET no pino CH_PD. incluí aqui um arquivo bem legal que mostra varias configurações diferentes do ESP 8266 que podem ser testadas com a sketch de teste.

Abaixo alguns comentários:

  • Usei Arduino Mega (Serial2)
  • Pino CH_PD do ESP8266 conectado a entrada 4 do Mega (usado para resetar o modulo por SW antes de iniciar a comunicação)
  • Pino RST do ESP8266 direto no VCC
  • Alimentação do modulo (3.3V) independente do MEGA
  • Criei uma função para resetar o modulo ==> void reset8266 ()

O HW:

O codigo:

/****************************************************************
* 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 designed IP

*    AT+CIPSERVER=1,80 ==>  set modo SERVER port: 80

*    AT+CWMODE=3 =======> Connect ESP8266 as combined mode (Access Point and Server)

*    AT+CWJAP="SSID","password" ==> Connect to WiFi network
*
* Marcelo Jose Rovai 16Jan16
******************************************************************/

#define esp8266 Serial2
#define CH_PD 4
#define speed8266 115200 // 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 resultado foi OK e os comandos AT funcionaram sem problema (testei dois módulos. 1 funcionou bem com 115.200 bauds e o outro com 19.200 bauds)

O Monitor Serial (retirado/incluído espaços para melhor visualização:

Ai-Thinker Technology Co.,Ltd.

ready

AT+RST

OK

 ets Jan  8 2013,rst cause:1, boot mode:(3,6)

load 0x40100000, len 1396, room 16 

tail 4

chksum 0x89

load 0x3ffe8000, len 776, room 4tko0 tsuni)eMoDlM1

 0rlsl

Ai-Thinker Technology Co.,Ltd.

ready

WIFI CONNECTED

WIFI GOT IP

AT+GMR

AT version:0.40.0.0(Aug  8 2015 14:45:58)

SDK version:1.3.0

Ai-Thinker Technology Co.,Ltd.

Build:1.3.0.2 Sep 11 2015 11:48:04

OK

AT+CWMODE?

+CWMODE:3

OK

AT+CWLAP

+CWLAP:(3,"ROVAI TIMECAP",-31,"48:d7:05:ef:66:04",1,0)

+CWLAP:(3,"ROVAI TIMECAP",-75,"70:73:cb:b6:ac:8d",1,-26)

+CWLAP:(3,"HP-Print-65-Des5,3,KAT+CIFSR

AT+CIFSR

+CIFSR:APIP,"192.168.4.1"

+CIFSR:APMAC,"5e:cf:7f:11:e1:41"

+CIFSR:STAIP,"10.0.1.2"

+CIFSR:STAMAC,"5c:cf:7f:11:e1:41"

OK

Anexos

Olá Marcelo,

Interessante seu teste.

Eu não conheço a placa Mega.

A Serial2 não precisa ser definida, os pinos (TX e RX) já estão previamente definidos ?

E esse firmware que você utilizou, está trabalhando bem a 115200 ?

Eu não consegui utlizar o módulo ESP-01 a 115200, precisei gravar o firmware - utilizei outra versão, da Espressif:

 * AT version:0.50.0.0(Sep 18 2015 20:55:38)
 * SDK version:1.4.0 BOOT MODE
 * compile time:Sep 18 2015 21:46:52
Mas eu precisei trocar a velocidade para 9600bps para conseguir acessar programaticamente, caso contrário dava muito erro.

Legal, grato pela informação !

Oi Odilon,

Testei dois módulos com o FW original, um funcionou bem com 115.200 e o outro com 19200. Para não usar o Serial por SW que tem limitações de velocidade , optei para fazer essas primeiras experiências com o Arduino MEGA. O MEGA tem 4 ports seriais por HW:

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"

Quando voce usa:

Serial.write("xxxx"); O IDE já interpreta que é o "Serial 0" (que não usa o "zero" no código)

Serial2.write("xxxxx"); O IDE interpreta que é o Serial 2

e assim por diante.

Eu gosto da MEGA para testes que envolvem múltiplas seriais, assim não bagunço o Serial 0 que é usado pelo Monitor do PC. e também claro pelo grande número de IOs que possue. 

Eu usei o Mega em um Robot que construí, onde vários sensores além de BT foram utilizados. 

(Estou colocando detalhes de minhas experiencias em um Blog:

https://mjrobot.wordpress.com/

Um abraço

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço