Bom galera,
Estou com um problema, consegui atualizar o firmware na minha ESP-201 utilizando um USB Flash RS232, com isso foi possível enviar comandos através do monitor serial da Arduino IDE, porem, agora quero enviar os comandos AT através de um Arduino Uno e não esta funcionando. Estou utilizando o seguinte codigo: esp8266 - Pastebin.com para tentar enviar os comandos em que eu digito no monitor serial, esse código foi utilizado em um modelo ESP-01, mas não estou obtendo sucesso no ESP-201. Alguém poderia me ajudar ou uma luz? Muito obrigado!
Boas bem vindo.
Porque não colocar o código aqui usando a tag </> acima para o formatar devidamente sem ser um link do pastebin.Olhando para essa imagem nao consigo ver sem ter de fazer zoom e portanto nao pesco nada ...
Estou iniciando no fórum, não manjo de como colocar as coisas ainda.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 10); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Esp8266 ");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.write("AT");
}
void loop() // run over and over
{
if (mySerial.available()){
Serial.println(mySerial.read());
Serial.write(mySerial.read());
Serial.println("Esp8266 ");
}
if (Serial.available()){
mySerial.write(Serial.read());
Serial.write(Serial.read());
}
}
Utilizando um interface USB, consegues comunicar com o ESP?
Já verificaste se as linhas TX e RX não estão trocadas?
O novo firmware do ESP funciona com a mesma baud rate? Não terás de mudar a baud rate para conseguir comunicar com ele a 9600? Tens o sítio de onde tiraste o firmware?
if (mySerial.available()){
Serial.println(mySerial.read());
Serial.write(mySerial.read());
Serial.println("Esp8266 ");
}
if (Serial.available()){
mySerial.write(Serial.read());
Serial.write(Serial.read());
}
Vejo problema neste bloco.No primeiro bloco do if tens o mySerial.available() que ira ser executado quando tiveres pelo menos um byte no buffer.O problema é que a seguir tentas escrever na serie dois bytes.Repetes o erro no if de baixo.
Em vez de usares o mySerial.available() devias garantir que tens X numero de bytes antes de os tentares ler do buffer usando o mySerial.available() >= variavelComNumeroDeBytes
Como o Bubulindo te recomenda ,confirma se tens as linhas de TX RX cruzadas, tens de ter o RX ligado no TX e vice versa.
Eu utilizei o firmware desse tutorial, consegui atualizar, conseguia enviar os comandos AT através do monitor serial em 9600, tudo funcionando. Peguei o código de exemplo do mesmo tutorial para enviar os comandos via Arduino Uno, porem, não obtinha resposta, mas o LED azul do ESP-201 piscava toda vez que eu envia um comando através do monitor serial ligado ao Arduino.
Vídeo tutorial
Eu não tenho o esquema aqui... mas é sempre possível que esse LED pisque porque tens as linhas trocadas. Confirmaste isso?
Voltaste a confirmar que o módulo funciona com 9600 e não com outra baud?
Podes experimentar isto:
Serial.println((char)mySerial.read());
?
Ou se preferires o write:
Serial.write((char)mySerial.read());
Já agora, se estás a enviar comandos AT, o facto de dares um enter entre o A e o T (sem esquecer o pormenor que o Hugo referiu de leres dois caracteres onde poderá apenas estar um) pode fazer toda a diferença.
Desculpa a demora, então, troquei a posição de TX e RX, modifiquei o código, mas o resultado obtido ainda não é o esperado. O LED ainda continua piscando quando envio o comando para o ESP-201. Marquei no esquema do ESP-201 qual LED pisca em azul.
Uma foto do meu monitor serial:
O código que eu modifiquei.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 10); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
Serial.println("Esp8266 ");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
}
void loop() // run over and over
{
delay(3000);
Serial.println("enviando comando");
mySerial.write("AT+RST");
mySerial.write("AT+CWLAP");
Serial.println((char)mySerial.read());
}
Esse caracter é indicativo de teres uma baud rate errada... Ou estares a imprimir lixo da memória do Arduino como o Hugo já indicou.
Porque não testas só se o módulo está lá em vez de mandares comandos à sorte com o código aqui em baixo?
delay(3000);
Serial.println("enviando comando");
mySerial.print("AT");
delay(100); //dá um tempinho para ver o que recebes.
//imprime tudo!!!
while (mySerial.available() > 0) //isto é importante para saberes se recebeste algo ou estás a ler lixo...
Serial.println((char)mySerial.read());
Poderás, julgo eu, descobrir o que se passa com a porta tentando o código em cima e várias baud rates.
A resposta a este comando é OK.
Se por acaso, tiveres um Arduino Mega em casa, eu pegaria nesse e ligaria este módulo a uma porta série fisica e não uma porta de software como tens agora. Isso poderia ajudar um pouco talvez.
Como é que ligaste o ESP8266 ao computador? Que chip em especifico é que tens para fazer isso? Eu digo isto porque tenho uma placa com outro controlador e na realidade não importa qual baud eu configure que aquilo funciona sempre.
Não estou a dizer que é a mesma coisa, mas eu tenho dúvidas que o módulo esteja a funcionar correctamente.
Outra coisa que podes experimentar é ligar a porta do Arduino onde estás a ligar o ESP8266 ao teu computador e ver se ele responde. Isto dir-te-á se não será a software serial a causar problemas.
Então, utilizando meu USB serial RS232 consigo enviar os comandos para o ESP-201.
Realizei as alterações no código que você disse, porem, nenhum resultado. O ESP-201 pisca em azul mas não tenho nenhum retorno no monitor serial em 57600.
Ok...
Com o teu interface USB, muda a baud rate para outra qualquer e vê se funciona. Teoricamente não deverá funcionar, mas faz isso só para confirmar.
A parte disso, experimenta outros pinos, por exemplo...
Vês o mesmo piscar de luz quando usas o computador directamente? Se sim, quando é que pisca?
Como alimentas o chip quando estás a usar o computador? Pode o Arduino não conseguir alimentar o ESP8266.
Confirmaste se o Tx e Rx suportam 5V?
Então,
Utilizando meu USB consigo mudar a baud rate, porem, para continuar utilizando o monitor serial normalmente tenho que alterar também o baud rate. Toda vez que envio um comando AT pelo monitor serial, o LED azul do ESP-201 pisca, da mesma forma que quando envio através do Arduino Uno, porem com o USB eu consigo um resultado, pelo Arduino Uno não.
Modifiquei o esquema físico para esse, consigo enviar comandos normalmente através do USB, porem, no Arduino Uno não consigo enviar. Como não estou realizando o uploading do firmware, não conectei o cabo IO0 e IO2.
Agora sobre o Tx e Rx suportar 5v eu não sei dizer mas li em alguns lugares de utilizar 3.3v, poderia estar utilizando resistor | | | | 2.200 ohms.