Tình hình là mình code cái thử cái webserver trên con Mega với ESP8266 , code xong rồi , chạy thử thì vào được địa chỉ theo IP
Nhưng khi chỉnh điểu khiển Relay bằng Browser thì chỉ nhấn được 1 lần , tự dưng cái Webserver tắt luôn , ko vào lại được nữa , muốn vào lại phải reset lại Modul Wifi
Ở đây bạn nào rành arduino coi thử xem qua code của mình với , mình cám ơn nhiều nhiều ak
Nhưng khi chỉnh điểu khiển Relay bằng Browser thì chỉ nhấn được 1 lần , tự dưng cái Webserver tắt luôn , ko vào lại được nữa , muốn vào lại phải reset lại Modul Wifi
Ở đây bạn nào rành arduino coi thử xem qua code của mình với , mình cám ơn nhiều nhiều ak
Code:
//Leonardo
//Serial_ & dbgTerminal = Serial;
//HardwareSerial & espSerial = Serial1;
////UNO & M328P
//#include <SoftwareSerial.h>
//SoftwareSerial dbgTerminal(10, 11); // RX, TX
//HardwareSerial & espSerial = Serial;
//MEGA2560
HardwareSerial & monitor = Serial;
HardwareSerial & esp_serial = Serial1;
// set pin numbers:
const int ledPin = 13; // the number of the LED pin
const int relay1 = 22;
const int relay2 = 23;
const int relay3 = 24;
const int relay4 = 25;
//const int ESP8266_CHPD = 8;
// Variables will change:
int ledState = HIGH; // ledState used to set the LED
#define BUFFER_SIZE 128
char buffer[BUFFER_SIZE];
int result = 0;
int OK = 1;
int TIMEOUT = 2 ;
int CANCEL = 3;
int NOT_FOUND = 4;
int i;
int m=0;
int lp = 0;
char inputChar[500];
int len = 0;
String ssid = "YOUR SSID";
String pwd = "YOUR PWD";
//String serverip="192.168.1.37";
String port="80";
String cmd;
String myIP;
int currentID;
int ch_id, packet_len;
char *pb;
void(* resetFunc) (void) = 0; //declare reset function at address 0
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
//pinMode(ESP8266_CHPD, OUTPUT);
//digitalWrite(ESP8266_CHPD,HIGH);
digitalWrite(relay1,LOW);
digitalWrite(relay2,LOW);
digitalWrite(relay3,LOW);
digitalWrite(relay4,LOW);
monitor.begin(115200); // Serial monitor
esp_serial.begin(115200); // ESP8266
//while (!dbgTerminal) {
// ; // wait for serial port to connect. Needed for Leonardo only
//}
monitor.println(F("\nESP8266 WebServer Test 0.22"));
//hardReset();
delay(1000);
/* RESET Module */
esp_serial.println("AT+RST"); // Software Reset
monitor.print("\nAT+RST");
result = CheckResponse(); // Check "OK"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(2000);
resetFunc();
}
SET_MODE:
esp_serial.println("AT+CWMODE=1"); // Set Mode
monitor.print("\nAT+CWMODE=1");
result = CheckResponse(); // Check "OK"
if(result == OK){
Serial.print(" OK");
delay(200);
}
else{
Serial.print(" ERROR");
delay(1000);
goto SET_MODE;
}
DISCONNECT_AP:
esp_serial.println("AT+CWQAP"); // Disconnect AP
monitor.print("\nAT+CWQAP");
result = CheckResponse(); // Check "OK"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(1000);
goto DISCONNECT_AP;
}
CONNECT_WIFI:
cmd = "AT+CWJAP=" + String("\"") + ssid + String("\"") + String(",")+String("\"") + pwd + String("\"");
esp_serial.println(cmd); // Connect AP
monitor.print("\n"+cmd);
result = CheckResponse(); // Check "OK"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(1000);
goto CONNECT_WIFI;
}
SET_MULTIPLE:
esp_serial.println("AT+CIPMUX=1"); // Multiple Connnect
monitor.print("\nAT+CIPMUX=1");
result = CheckResponse(); // Check "OK"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(1000);
goto SET_MULTIPLE;
}
START_SERVER:
cmd = "AT+CIPSERVER=" + String("1") + String(",") + port;
esp_serial.println(cmd); // Start Server
monitor.print("\n"+cmd);
result = CheckResponse(); // Check "OK"
if(result == OK){
Serial.print(" OK");
delay(200);
}
else{
Serial.print(" ERROR");
delay(1000);
}
CHECK_IP:
esp_serial.println("AT+CIFSR"); // Multiple Connnect
monitor.print("\nAT+CIFSR");
readSerial();
//monitor.print(inputChar);
readSerial();
//monitor.print(inputChar);
readSerial();
monitor.print(inputChar);
for(unsigned char i=0;i<2;i++){
esp_serial.println("AT+CIPCLOSE"); // Close All Socket
monitor.print("\nAT+CIPCLOSE");
result = CheckResponse(); // Check "OK"
if(result == OK){
Serial.print(" OK");
delay(200);
}
else{
Serial.print(" ERROR");
delay(200);
//goto START_SERVER;
}
}
digitalWrite(ledPin,ledState);
//delay(3000);
}// Setup
void loop() {
esp_serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
if(strncmp(buffer, "+IPD,", 5)==0) {
//monitor.print("\nBuffer");
// request: +IPD,ch,len:data
sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
if (packet_len > 0) {
//monitor.print("\nlen > 0");
// read serial until packet_len character received
// start from :
pb = buffer+5;
while(*pb!=':') pb++;
pb++;
if (strncmp(pb, "GET /led", 8) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
//delay(3000);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay1on", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay1, HIGH);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay1off", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay1, LOW);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay2on", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay2, HIGH);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay2off", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay2, LOW);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay3on", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay3, HIGH);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay3off", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay3, LOW);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay4on", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay4, HIGH);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay4off", 14) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get led from ch :" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay4, LOW);
homepage(ch_id);
}
//else if (strncmp(pb, "GET / ", 6) == 0) {
if (strncmp(pb, "GET / ", 6) == 0) {
monitor.print(millis());
monitor.print(" : ");
monitor.println(buffer);
monitor.print( "get Status from ch:" );
monitor.println(ch_id);
delay(100);
clearSerialBuffer();
homepage(ch_id);
}
}
}
//monitor.print(buffer);
clearBuffer();
//lp++;
monitor.print( "\nLoop ");
//monitor.print(lp);
}
void homepage(int ch_id) {
String Header;
Header = "HTTP/1.1 200 OK\r\n";
Header += "Content-Type: text/html\r\n";
Header += "Connection: close\r\n";
//Header += "Refresh: 5\r\n";
String Content;
Content = "<html><header><title>ESP8266 Webserver</title></header>";
Content += "<center> <p> <h1 style=\"color: #FF0; background: #000\">ESP8266 WiFi Web Server 0.22 </h1></p>";
Content += "<a href=\"/?relay1on\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 1 ON </font> </button> </a>";
Content += "<a href=\"/?relay1off\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 1 OFF </font> </button> </a> <br/><br/>";
Content += "<a href=\"/?relay2on\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 2 ON </font> </button> </a>";
Content += "<a href=\"/?relay2off\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 2 OFF </font> </button> </a> <br/><br/>";
Content += "<a href=\"/?relay3on\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 3 ON </font> </button> </a>";
Content += "<a href=\"/?relay3off\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 3 OFF </font> </button> </a> <br/><br/>";
Content += "<a href=\"/?relay4on\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 4 ON </font> </button> </a>";
Content += "<a href=\"/?relay4off\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 4 OFF </font> </button> </a> <br/><br/>";
Content += "<hr> <p> By <a href=\"http://androidcontrol.blogspot.com\"></p><p style=\"font-family:arial;color:blue;font-size:28px;\">Android Control Blogspot</p></a>";
Content += "</body></html>";
//Content += "D";
//Content += String(ledState);
Header += "Content-Length: ";
Header += (int)(Content.length());
Header += "\r\n\r\n";
START_SENT:
esp_serial.print("AT+CIPSEND=");
esp_serial.print(ch_id);
esp_serial.print(",");
esp_serial.println(Header.length()+Content.length());
monitor.print("AT+CIPSEND=");
monitor.print(ch_id);
monitor.print(",");
monitor.println(Header.length()+Content.length());
delay(10); //*** effect Web page
// for debug buffer serial error
//while (espSerial.available() >0 ) {
// char c = espSerial.read();
// dbgTerminal.write(c);
// if (c == '>') {
// espSerial.print(Header);
// espSerial.print(Content);
// }
//}
if (esp_serial.find(">")) {
esp_serial.print(Header);
esp_serial.print(Content);
delay(10);
}
}
void clearSerialBuffer(void) {
while ( esp_serial.available() > 0 ) {
esp_serial.read();
}
}
void clearBuffer(void) {
for (int i = 0;i<BUFFER_SIZE;i++ ) {
buffer[i]=0;
}
}
int readSerial(){
int i = 0;
while(1){
while (esp_serial.available() > 0){
char inChar = esp_serial.read();
if(i > 0){
if (inChar == '\n'){
inputChar[i] = '\0';
esp_serial.flush();
return 0;
//break;
}
}
if(inChar!='\r'){
inputChar[i] = inChar;
i++;
}
}
}
}
int CheckResponse(){
for(m=0;m<500;m++){
if(esp_serial.read()=='K'){ // Check "OK"
return OK;
}
delay(10);
}
return TIMEOUT;
}

Comment