Доброго времени суток, столкнулся с проблемой: Хочу сделать так, чтобы при первом включении создавалась точка доступа с веб интерфейсом, там вводишь пароль от домашнего wifi и он сохраняется и подключается к нему. Вроде и парсер работает и код в норме, но с веб интерфейсом проблемы: 1 раз загружается и виснет. пытаюсь get запрос отправить - не обрабатывает, хотя если сразу после включения отправить запрос - все работает!
Код:
#include <EEPROM.h>
#include <SoftwareSerial.h>
#include <string.h>
SoftwareSerial esp8266(4,5);
void EEPROMWrite(int point, String str){
int str_len = str.length();
char char_array[str_len+1];
str.toCharArray(char_array, str_len+1);
EEPROM.write(point, str_len);
for(int i=0;i<str_len;i++){
EEPROM.write(point+1+i, char_array[i]);
}
}
String EEPROMRead(int point){
String str = "";
int lenght=EEPROM.read(point);
for(int i=0;i<lenght;i++){
str = str+char(EEPROM.read(point+1+i));
}
return str;
}
String uid="";
String get_resp(String readString){
uid=readString.substring(5, 6);
Serial.println("uid="+uid);
if(readString.indexOf("?")==-1){
Serial.println("+IPD finded");
String webpage = "<html><form action=\"/\" method=\"get\"><input type=\"text\" name=\"ssid\" /><br><input type=\"text\" name=\"pass\" /><br><input type=\"submit\" value=\"ok\" /></form></html>";
String cipSend = "AT+CIPSEND=";
cipSend += uid;
cipSend += ",";
cipSend +=webpage.length();
sendData(cipSend,1000);
sendData(webpage,4000);
String closeCommand = "AT+CIPCLOSE=";
closeCommand+=uid; // append connection id
sendData(closeCommand,1000);
sendData(closeCommand,1000);
}else{
String finalstring = readString.substring(readString.indexOf("=")+1, readString.indexOf("HTTP"));
String ssid = finalstring.substring(0, finalstring.indexOf('&'));
String pass = finalstring.substring(finalstring.indexOf('&')+6, finalstring.indexOf(' '));
if(pass!=""){
Serial.print("---ssid=");
Serial.println(ssid);
Serial.print("---pass=");
Serial.println(pass);
//send_html(1);
}
}
}
void APMODE(){
sendData("AT+CWMODE=3",1000);
sendData("AT+CWSAP=\"micronn\",\"1234567890\",10,4",4000);
sendData("AT+CIPMUX=1",100);
if(sendData("AT+CIPSERVER=1,80",100).indexOf('OK')!=-1){ Serial.println("AP 'micron' Created"); }else{ Serial.println("AP CREATE ERROR"); }
}
String ssid = EEPROMRead(0);
String pass = EEPROMRead(20);
void WIFI(){
Serial.println("WIFI LOADING");
if(sendData("AT+RST",2000).indexOf('OK')!=-1){ Serial.println("RESET OK"); }else{ Serial.println("RESET ERROR"); }
if(ssid!=NULL || pass!=NULL){
sendData("AT+CWMODE=1",1000);
if(sendData("AT+CWJAP=\""+ssid+"\",\""+pass+"\"\r",8000).indexOf('OK')!=-1){ Serial.println("CONNECTED TO '"+ssid+"' WIFI"); }else{ Serial.println("CONNECTED ERROR"); Serial.println("SWITCH TO AP"); APMODE(); }
}else{
Serial.println("WIFI NOT SETUP");
APMODE();
}
}
void setup(){
Serial.begin(9600);
esp8266.begin(9600);
WIFI();
}
String respo;
void loop(){
long int mils = millis();
while((2000+mils) > millis()){
while(esp8266.available()){
char b = esp8266.read();
respo+=b;
}
}
if(respo!="" && respo!="Unlink\r\n"){
respo.replace("\r\n"," ");
respo.replace(" ","");
respo.replace("Link","");
respo.replace("Unlink","");
Serial.println("-----------uid-----------");
Serial.println(uid);
Serial.println("---------response--------");
Serial.print(respo);
get_resp(respo);
respo = "";
}
}
String sendData(String command, const int timeout){
String response = "";
esp8266.print(command+"\r\n"); // send the read character to the esp8266
long int time = millis();
while( (time+timeout) > millis()){
while(esp8266.available()){
char c = esp8266.read();
response+=c;
}
}
Serial.print(response);
return response;
}