Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <ESP8266mDNS.h>
- #include <ArduinoOTA.h>
- #include <FS.h>
- #include <Hash.h>
- #include <ESPAsyncTCP.h>
- #include <ESPAsyncWebServer.h>
- #include <SPIFFSEditor.h>
- // SKETCH BEGIN
- AsyncWebServer server(80);
- AsyncWebSocket ws("/ws");
- AsyncEventSource events("/events");
- void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
- if(type == WS_EVT_CONNECT){
- Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
- client->printf("Hello Client %u :)", client->id());
- client->ping();
- } else if(type == WS_EVT_DISCONNECT){
- Serial.printf("ws[%s][%u] disconnect: %u\n", server->url(), client->id());
- } else if(type == WS_EVT_ERROR){
- Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data);
- } else if(type == WS_EVT_PONG){
- Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:"");
- } else if(type == WS_EVT_DATA){
- AwsFrameInfo * info = (AwsFrameInfo*)arg;
- String msg = "";
- if(info->final && info->index == 0 && info->len == len){
- //the whole message is in a single frame and we got all of it's data
- Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len);
- if(info->opcode == WS_TEXT){
- for(size_t i=0; i < info->len; i++) {
- msg += (char) data[i];
- }
- } else {
- char buff[3];
- for(size_t i=0; i < info->len; i++) {
- sprintf(buff, "%02x ", (uint8_t) data[i]);
- msg += buff ;
- }
- }
- if(msg=="RESET"){
- ESP.reset();
- ESP.restart();
- }
- if(msg=="HEAP"){
- client->text((String)ESP.getFreeHeap());
- }
- if(msg=="CLOSE"){
- ws.closeAll();
- }
- if(msg=="fsinfo()"){
- fsinfo();
- client->text("-----------------------------------------------");
- client->text("Flash Real Size: " + (String) ESP.getFlashChipRealSize());
- client->text("Flash Firmware Configured Size: " + (String) ESP.getFlashChipSize());
- FSInfo fsInfo;
- SPIFFS.info(fsInfo);
- client->text("FS Bytes: " + (String) fsInfo.usedBytes + " / " + (String) fsInfo.totalBytes);
- uint8_t used = fsInfo.usedBytes;
- uint8_t total = fsInfo.totalBytes;
- uint8_t percent = (used/total);
- client->text("FS % Used: " + (String)(percent));
- }
- Serial.printf("%s\n",msg.c_str());
- if(info->opcode == WS_TEXT)
- int null;
- else
- client->binary("I got your binary message");
- } else {
- //message is comprised of multiple frames or the frame is split into multiple packets
- if(info->index == 0){
- if(info->num == 0)
- Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary");
- Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len);
- }
- Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT)?"text":"binary", info->index, info->index + len);
- if(info->opcode == WS_TEXT){
- for(size_t i=0; i < info->len; i++) {
- msg += (char) data[i];
- }
- } else {
- char buff[3];
- for(size_t i=0; i < info->len; i++) {
- sprintf(buff, "%02x ", (uint8_t) data[i]);
- msg += buff ;
- }
- }
- Serial.printf("%s\n",msg.c_str());
- if((info->index + len) == info->len){
- Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len);
- if(info->final){
- Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary");
- if(info->message_opcode == WS_TEXT)
- client->text("I got your text message");
- else
- client->binary("I got your binary message");
- }
- }
- }
- }
- }
- const char* ssid = "***";
- const char* password = "****";
- const char * hostName = "esp8266";
- const char* http_username = "admin";
- const char* http_password = "admin";
- void setup(){
- Serial.begin(115200);
- Serial.setDebugOutput(true);
- WiFi.hostname(hostName);
- WiFi.mode(WIFI_AP_STA);
- WiFi.softAP(hostName);
- WiFi.begin(ssid, password);
- if (WiFi.waitForConnectResult() != WL_CONNECTED) {
- Serial.printf("STA: Failed!\n");
- WiFi.disconnect(false);
- delay(1000);
- WiFi.begin(ssid, password);
- }
- //Send OTA events to the browser
- ArduinoOTA.onStart([]() { events.send("Update Start", "ota"); });
- ArduinoOTA.onEnd([]() { events.send("Update End", "ota"); });
- ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
- char p[32];
- sprintf(p, "Progress: %u%%\n", (progress/(total/100)));
- events.send(p, "ota");
- });
- ArduinoOTA.onError([](ota_error_t error) {
- if(error == OTA_AUTH_ERROR) events.send("Auth Failed", "ota");
- else if(error == OTA_BEGIN_ERROR) events.send("Begin Failed", "ota");
- else if(error == OTA_CONNECT_ERROR) events.send("Connect Failed", "ota");
- else if(error == OTA_RECEIVE_ERROR) events.send("Recieve Failed", "ota");
- else if(error == OTA_END_ERROR) events.send("End Failed", "ota");
- });
- ArduinoOTA.setHostname(hostName);
- ArduinoOTA.begin();
- MDNS.addService("http","tcp",80);
- SPIFFS.begin();
- ws.onEvent(onWsEvent);
- server.addHandler(&ws);
- events.onConnect([](AsyncEventSourceClient *client){
- client->send("hello!",NULL,millis(),1000);
- });
- server.addHandler(&events);
- server.addHandler(new SPIFFSEditor(http_username,http_password));
- server.on("/heap", HTTP_GET, [](AsyncWebServerRequest *request){
- request->send(200, "text/plain", String(ESP.getFreeHeap()));
- });
- server.on("/scan", HTTP_GET, [](AsyncWebServerRequest *request){
- String json = "[";
- int n = WiFi.scanComplete();
- if(n == -2){
- WiFi.scanNetworks(true);
- } else if(n){
- for (int i = 0; i < n; ++i){
- if(i) json += ",";
- json += "{";
- json += "\"rssi\":"+String(WiFi.RSSI(i));
- json += ",\"ssid\":\""+WiFi.SSID(i)+"\"";
- json += ",\"bssid\":\""+WiFi.BSSIDstr(i)+"\"";
- json += ",\"channel\":"+String(WiFi.channel(i));
- json += ",\"secure\":"+String(WiFi.encryptionType(i));
- json += ",\"hidden\":"+String(WiFi.isHidden(i)?"true":"false");
- json += "}";
- }
- WiFi.scanDelete();
- if(WiFi.scanComplete() == -2){
- WiFi.scanNetworks(true);
- }
- }
- json += "]";
- request->send(200, "text/json", json);
- json = String();
- });
- server.on("/reset", HTTP_GET, [](AsyncWebServerRequest *request){
- ESP.reset();
- ESP.restart();
- });
- server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm");
- server.serveStatic("/counter", SPIFFS, "/").setDefaultFile("counter.txt");
- server.onNotFound([](AsyncWebServerRequest *request){
- Serial.printf("NOT_FOUND: ");
- if(request->method() == HTTP_GET)
- Serial.printf("GET");
- else if(request->method() == HTTP_POST)
- Serial.printf("POST");
- else if(request->method() == HTTP_DELETE)
- Serial.printf("DELETE");
- else if(request->method() == HTTP_PUT)
- Serial.printf("PUT");
- else if(request->method() == HTTP_PATCH)
- Serial.printf("PATCH");
- else if(request->method() == HTTP_HEAD)
- Serial.printf("HEAD");
- else if(request->method() == HTTP_OPTIONS)
- Serial.printf("OPTIONS");
- else
- Serial.printf("UNKNOWN");
- Serial.printf(" http://%s%s\n", request->host().c_str(), request->url().c_str());
- if(request->contentLength()){
- Serial.printf("_CONTENT_TYPE: %s\n", request->contentType().c_str());
- Serial.printf("_CONTENT_LENGTH: %u\n", request->contentLength());
- }
- int headers = request->headers();
- int i;
- for(i=0;i<headers;i++){
- AsyncWebHeader* h = request->getHeader(i);
- Serial.printf("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
- }
- int params = request->params();
- for(i=0;i<params;i++){
- AsyncWebParameter* p = request->getParam(i);
- if(p->isFile()){
- Serial.printf("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
- } else if(p->isPost()){
- Serial.printf("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
- } else {
- Serial.printf("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
- }
- }
- request->send(404);
- });
- server.onFileUpload([](AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final){
- if(!index)
- Serial.printf("UploadStart: %s\n", filename.c_str());
- Serial.printf("%s", (const char*)data);
- if(final)
- Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index+len);
- });
- server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
- if(!index)
- Serial.printf("BodyStart: %u\n", total);
- Serial.printf("%s", (const char*)data);
- if(index + len == total)
- Serial.printf("BodyEnd: %u\n", total);
- });
- server.begin();
- fsinfo();
- }
- void fsinfo(){
- File f = SPIFFS.open("/FSINFO.txt", "a+");
- f.println("-----------------------------------------------");
- f.print("Flash Real Size: ");
- f.println(ESP.getFlashChipRealSize());
- f.print("Flash Firmware Configured Size: ");
- f.println(ESP.getFlashChipSize());
- FSInfo fsInfo;
- SPIFFS.info(fsInfo);
- f.print("FS Bytes: ");
- f.print(fsInfo.usedBytes);
- f.print(" / ");
- f.println(fsInfo.totalBytes);
- f.print("FS % Used: ");
- uint8_t used = fsInfo.usedBytes;
- uint8_t total = fsInfo.totalBytes;
- f.println(used/total);
- f.close();
- }
- long OLD = millis();
- long NEW;
- void loop(){
- ArduinoOTA.handle();
- NEW = millis();
- if(NEW - OLD > 1000){
- File f = SPIFFS.open("/counter.txt", "a+");
- if (!f) {
- Serial.println("file open failed");
- }
- f.print((String)random(0,100));
- f.print(" ");
- f.println(round(NEW/1000));
- //f.print("File Size: ");
- //f.print(f.size());
- //f.println("");
- f.close();
- OLD = NEW;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement