Il sito per chi ama smanettare con Arduino, Raspberry Pi & Co.
Arduino Esp8266 AT ...
 

Arduino Esp8266 AT Webserver  

   RSS

0

Buongiorno a tutti,

Sto cercando di creare un web server con arduino nano utilizzando un esp8266 tramite comandi AT.

Stranamente il sistema funziona al primo avvio. E precisamente una volta che l'esp si connette al router e avvia il server sulla porta 80, alla prima richiesta digitando sul broswer l'indirizzo ip del server, accedo regolarmente alla pagina. Successivamente se cerco di aggiornare la pagina dal broswer ricevo sulla seriale sempre Busy.

Per poter accedere nuovamente alla pagina devo resettare arduino nano e l'esp.

Di seguito inserisco lo Sketch:

------------------------------------

#include <SoftwareSerial.h>
#include <DHT.h>

#define DEBUG true

SoftwareSerial Serial1(9, 10); // RX, TX

float umiest; float tempest; float lum;

DHT dht(4, DHT22);

void setup()
{
Serial.begin(9600); ///////For Serial monitor
Serial1.begin(9600); ///////ESP Baud rate
pinMode(13,OUTPUT); /////used if connecting a LED to pin 11
digitalWrite(13,LOW);

dht.begin();
delay(3000);

sendData("AT+RST\r\n",5000,DEBUG); // reset module
//sendData("ATE0\r\n",2000,DEBUG); // Disable Echo
sendData("AT+CWMODE=1\r\n",1000,DEBUG); // configure as Client
//sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point
sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
sendData("AT+CWJAP=\"*********\",\"*******\"\r\n",6000,DEBUG);//Connetto alla rete
sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address
sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80
//sendData("AT+CIPSTART='TCP','192.168.1.164',80",1000,DEBUG); // turn on server on port 80
}

int connectionId;
void loop()
{
umiest = dht.readHumidity();
tempest = dht.readTemperature();
lum=analogRead(0);

if(Serial1.available())
{ //Serial.println("Dati dal server:"); Serial.print(Serial1.read()); Serial.println("");
/////////////////////Recieving from web browser to toggle led
if(Serial1.find("+IPD,"))
{
delay(300);
connectionId = Serial1.read()-48;
if(Serial1.find("pin="))
{
Serial.println("recieving data from web browser");
int pinNumber = (Serial1.read()-48)*10;
pinNumber += (Serial1.read()-48);
digitalWrite(pinNumber, !digitalRead(pinNumber));
}

/////////////////////Sending data to browser
else
{
String webpage = "<h1>CENTRALE INNAFFIAMENTO</h1>";
espsend(webpage);

String add1= "<h4>Temperature= ";
String two = String(tempest, 2);
add1+= two;
//add1+="&#x2103"; //////////Hex code for degree celcius
add1+="</h4>";
espsend(add1);

add1="<h4> Umidity= ";
two = String(umiest, 2);
add1+= two;
//add1+="&#x25"; //////////Hex code for degree umidity
add1+="</h4>";
espsend(add1);

add1="<h4><i>Lumen<i/>= ";
two = String(lum, 2);
add1+= two;
add1+=" lm"; //////////Hex code for degree umidity
add1+="</h4>";
espsend(add1);

}

String closeCommand = "AT+CIPCLOSE="; ////////////////close the socket connection////esp command
closeCommand+=connectionId; // append connection id
closeCommand+="\r\n";
Serial.print ("connection ID="); Serial.println(connectionId);
sendData(closeCommand,3000,DEBUG);
}
}
}

//////////////////////////////sends data from ESP to webpage///////////////////////////

void espsend(String d)//Creo il comando
{
String cipSend = " AT+CIPSEND=";
cipSend += "0";
cipSend += ",";
cipSend +=d.length();
cipSend +="\r\n";
sendData(cipSend,200,DEBUG);
sendData(d,200,DEBUG);

}

//////////////gets the data from esp and displays in serial monitor///////////////////////
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
Serial1.print(command);//Invio il comando sulla seriale dell'esp
long int time = millis();
while( (time+timeout) > millis())
{
while(Serial1.available())
{
char c = Serial1.read(); // read the next character.
response+=c;
}
}

if(debug)
{
Serial.print(response); //displays the esp response messages in arduino Serial monitor
}
Serial.flush();
Serial1.flush();
return response;
}

----------------------------------

Se potete darmi qualche consiglio.

Buona giornata a tutti.

Questa discussione è stata modificata 6 giorni fa da admin
1 Answer
0

Ciao Sio, sembra che quando ricevi un AT Busy non ci sia niente altro da fare che aspettare che la periferica ritorni pronta in quanto il comando AT precedente non è ancora stato eseguito completamente.

Detto questo, fai una procedura di riconnessione quando occupato (BUSY) in primis, forse però è anche meglio controllare che i comandi che hai eseguito (AT) siano corretti ed eseguiti nei tempi previsti.

Qui un problema simile al tuo: https://bbs.espressif.com/viewtopic.php?t=116

Facci sapere, Ciao

Entra nel forum

Hai un nuovo progetto in mente ma hai dei dubbi su come realizzarlo? Vuoi condividere la tua conoscenza da maker con gli altri? Registrati nella nostra community e potrai chiedere fare la tua domanda o rispondere e condividere la tua conoscenza in internet.

Spread the love
  • 1
  •  
  •  
  •  
  •  
  •  
  •  
  •  
    1
    Share

Please Login or Registrazione