Всем доброго времени суток
Никто не озадачивался прикручиванием поддержки espFS ?
Чтобы можно было отдельно генерить странички для WEB-сервера и зашивать их прямо на флэшку ESP по свободному от прошивки адресу?
подскажите пожалуйста, вы пробовали осуществлять AJAX ???
FS не зависит от режима.не понимаю., может ли FS работать в режиме SoftAP???
подскажите пожалуйста, вы пробовали осуществлять AJAX ???
не понимаю., может ли FS работать в режиме SoftAP???
подскажите пожалуйста, вы пробовали осуществлять AJAX ???
благодарю! принцип вполне понятен! буду пробовать!
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);
const int led = 13;
const char *ssid = "****";
const char *password = "****";
int ledStatus;
String javaScript = "<script>\n"
"var xmlHttp=createXmlHttpObject();\n"
"function createXmlHttpObject(){\n"
" if (window.XMLHttpRequest) xmlHttp=new XMLHttpRequest(); else xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n"
" return xmlHttp;\n"
"}\n"
"function handleServerResponse(){\n"
" if(xmlHttp.readyState==4 && xmlHttp.status==200){\n"
" xmlResponse = xmlHttp.responseXML;\n"
" xmldoc = xmlResponse.getElementsByTagName('led');\n"
" message = xmldoc[0].firstChild.nodeValue;\n"
" if (message == '1') document.getElementById('led').innerHTML='Led ON'; else document.getElementById('led').innerHTML='Led OFF';\n"
" xmldoc = xmlResponse.getElementsByTagName('time');\n"
" message = xmldoc[0].firstChild.nodeValue;\n"
" document.getElementById('runtime').innerHTML=message;\n"
" }\n"
"}\n"
"function process(){\n"
" if(xmlHttp.readyState==0 || xmlHttp.readyState==4){\n"
" xmlHttp.open('PUT','xml',true);\n"
" xmlHttp.onreadystatechange=handleServerResponse; //без скобок!\n"
" xmlHttp.send(null);\n"
" }\n"
" setTimeout('process()',1000);\n"
"}\n"
"function led(set){\n"
" if(xmlHttp.readyState==0 || xmlHttp.readyState==4){\n"
" xmlHttp.open('PUT','led?set='+set,true);\n"
" xmlHttp.onreadystatechange=handleServerResponse; //без скобок!\n"
" xmlHttp.send(null);\n"
" }\n"
"}\n"
"function led2(set){\n"
" //var set = document.getElementById('set').value;\n"
" server = 'led?set='+set;\n"
" request = new XMLHttpRequest();\n"
" request.open('GET',server,true);\n"
" request.send();\n"
"}\n"
"</script>\n";
String millis2time(){
String Time = "";
unsigned long ss;
byte mm,hh;
ss=millis()/1000;
hh=ss/3600;
mm=(ss-hh*3600)/60;
ss=(ss-hh*3600)-mm*60;
if(hh<10)Time+="0";
Time+=(String)hh+":";
if(mm<10)Time+="0";
Time+=(String)mm+":";
if(ss<10)Time+="0";
Time+=(String)ss;
return Time;
}
void handleWebsite(){
String webSite = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/><title>ESP8266</title></head><body onload='process()'><span id='runtime'></span><br/><br/><span id='led'></span><br/><br/><input type='button' value='Led ON' onclick='led(1)'/><br/><br/><input type='button' value='Led OFF' onclick='led(0)'/>"+javaScript+"</body></html>";
server.send(200,"text/html",webSite);
}
void handleXML(){
String xml = "<?xml version='1.0'?><response><led>"+(String)ledStatus+"</led><time>"+millis2time()+"</time></response>";
server.send(200,"text/xml",xml);
}
void handleLed(){
ledStatus = server.arg("set").toInt();
Serial.print("Led ");
Serial.println(ledStatus);
digitalWrite(led,ledStatus);
String xml = "<?xml version='1.0'?><response><led>"+(String)ledStatus+"</led><time>"+millis2time()+"</time></response>";
server.send(200,"text/xml",xml);
}
void setup() {
delay(1000);
Serial.begin(115200);
Serial.println();
pinMode(led,OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid,password);
while (WiFi.status() != WL_CONNECTED) {Serial.print("."); delay(500);}
Serial.println();
Serial.print("Connected to ");
Serial.print(ssid);
Serial.print(", station IP address: ");
Serial.println(WiFi.localIP());
server.on("/",handleWebsite);
server.on("/xml",handleXML);
server.on("/led",handleLed);
server.begin();
}
void loop() {
server.handleClient();
delay(1);
}
А вот подскажите новичку как кусок этого кода от сих (String javaScript = "<script>\n") до сих (void setup()) оформить в виде отдельного файлика, кинуть этот файлик на SPIFFS (как кинуть я знаю), и запустить из void loop().Ajax туда-сюда.
Повторил, причесал, все работает.
Источники:
1. ESP8266 AJAX [SOLVED] - Everything ESP8266
2. AJAX — технология обращения к серверу без перезагрузки страницы. | Программирование ESP8266 в среде Arduino IDE
Код:#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> ESP8266WebServer server(80); const int led = 13; const char *ssid = "****"; const char *password = "****"; int ledStatus; String javaScript = "<script>\n" "var xmlHttp=createXmlHttpObject();\n" "function createXmlHttpObject(){\n" " if (window.XMLHttpRequest) xmlHttp=new XMLHttpRequest(); else xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n" " return xmlHttp;\n" "}\n" "function handleServerResponse(){\n" " if(xmlHttp.readyState==4 && xmlHttp.status==200){\n" " xmlResponse = xmlHttp.responseXML;\n" " xmldoc = xmlResponse.getElementsByTagName('led');\n" " message = xmldoc[0].firstChild.nodeValue;\n" " if (message == '1') document.getElementById('led').innerHTML='Led ON'; else document.getElementById('led').innerHTML='Led OFF';\n" " xmldoc = xmlResponse.getElementsByTagName('time');\n" " message = xmldoc[0].firstChild.nodeValue;\n" " document.getElementById('runtime').innerHTML=message;\n" " }\n" "}\n" "function process(){\n" " if(xmlHttp.readyState==0 || xmlHttp.readyState==4){\n" " xmlHttp.open('PUT','xml',true);\n" " xmlHttp.onreadystatechange=handleServerResponse; //без скобок!\n" " xmlHttp.send(null);\n" " }\n" " setTimeout('process()',1000);\n" "}\n" "function led(set){\n" " if(xmlHttp.readyState==0 || xmlHttp.readyState==4){\n" " xmlHttp.open('PUT','led?set='+set,true);\n" " xmlHttp.onreadystatechange=handleServerResponse; //без скобок!\n" " xmlHttp.send(null);\n" " }\n" "}\n" "function led2(set){\n" " //var set = document.getElementById('set').value;\n" " server = 'led?set='+set;\n" " request = new XMLHttpRequest();\n" " request.open('GET',server,true);\n" " request.send();\n" "}\n" "</script>\n"; String millis2time(){ String Time = ""; unsigned long ss; byte mm,hh; ss=millis()/1000; hh=ss/3600; mm=(ss-hh*3600)/60; ss=(ss-hh*3600)-mm*60; if(hh<10)Time+="0"; Time+=(String)hh+":"; if(mm<10)Time+="0"; Time+=(String)mm+":"; if(ss<10)Time+="0"; Time+=(String)ss; return Time; } void handleWebsite(){ String webSite = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/><title>ESP8266</title></head><body onload='process()'><span id='runtime'></span><br/><br/><span id='led'></span><br/><br/><input type='button' value='Led ON' onclick='led(1)'/><br/><br/><input type='button' value='Led OFF' onclick='led(0)'/>"+javaScript+"</body></html>"; server.send(200,"text/html",webSite); } void handleXML(){ String xml = "<?xml version='1.0'?><response><led>"+(String)ledStatus+"</led><time>"+millis2time()+"</time></response>"; server.send(200,"text/xml",xml); } void handleLed(){ ledStatus = server.arg("set").toInt(); Serial.print("Led "); Serial.println(ledStatus); digitalWrite(led,ledStatus); String xml = "<?xml version='1.0'?><response><led>"+(String)ledStatus+"</led><time>"+millis2time()+"</time></response>"; server.send(200,"text/xml",xml); } void setup() { delay(1000); Serial.begin(115200); Serial.println(); pinMode(led,OUTPUT); WiFi.mode(WIFI_STA); WiFi.begin(ssid,password); while (WiFi.status() != WL_CONNECTED) {Serial.print("."); delay(500);} Serial.println(); Serial.print("Connected to "); Serial.print(ssid); Serial.print(", station IP address: "); Serial.println(WiFi.localIP()); server.on("/",handleWebsite); server.on("/xml",handleXML); server.on("/led",handleLed); server.begin(); } void loop() { server.handleClient(); delay(1); }
Это есть в выше выложенных примерах tretyakov_sa.А вот подскажите новичку как кусок этого кода от сих (String javaScript = "<script>\n") до сих (void setup()) оформить в виде отдельного файлика, кинуть этот файлик на SPIFFS (как кинуть я знаю), и запустить из void loop().
Буду премного благодарен если в ответе будет кусочек кода.