• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Прикрутить EspFS

sav-13

Member
Всем доброго времени суток

Никто не озадачивался прикручиванием поддержки espFS ?
Чтобы можно было отдельно генерить странички для WEB-сервера и зашивать их прямо на флэшку ESP по свободному от прошивки адресу?
 

tretyakov_sa

Moderator
Команда форума
Всем доброго времени суток

Никто не озадачивался прикручиванием поддержки espFS ?
Чтобы можно было отдельно генерить странички для WEB-сервера и зашивать их прямо на флэшку ESP по свободному от прошивки адресу?
 

ave

New member
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);
}
 
Последнее редактирование:

Pilnikov

Active member
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);
}
А вот подскажите новичку как кусок этого кода от сих (String javaScript = "<script>\n") до сих (void setup()) оформить в виде отдельного файлика, кинуть этот файлик на SPIFFS (как кинуть я знаю), и запустить из void loop().
Буду премного благодарен если в ответе будет кусочек кода.
 

ave

New member
А вот подскажите новичку как кусок этого кода от сих (String javaScript = "<script>\n") до сих (void setup()) оформить в виде отдельного файлика, кинуть этот файлик на SPIFFS (как кинуть я знаю), и запустить из void loop().
Буду премного благодарен если в ответе будет кусочек кода.
Это есть в выше выложенных примерах tretyakov_sa.
 
Сверху Снизу