/* ** Demo of memory depletion during ** ESP8266WebServer responses, based on ** ESP8266WebServer->HelloServer example. ** Pat Deegan, 2015 ** ** Repeated GETs to /inline will show ** memory depletion on Serial, starting with ** Resp #1 ** Free heap: 33728 @ 18s. ** Free heap: 33768 @ 18s. ** Free heap: 33896 @ 18s. ** Free heap: 33528 @ 18s. ** Resp #2 ** Free heap: 33536 @ 18s. ** Free heap: 33576 @ 18s. ** Free heap: 33704 @ 18s. ** Free heap: 33336 @ 19s. ** ... ** and finally, after 50 requests ** ** Resp #48 ** Free heap: 24704 @ 33s. ** Free heap: 24744 @ 33s. ** Free heap: 24872 @ 33s. ** Free heap: 24504 @ 33s. ** Resp #49 ** Free heap: 24512 @ 33s. ** Free heap: 24552 @ 33s. ** Free heap: 24680 @ 33s. ** ... ** after 1 minute or so from the first request, ** memory will start returning to the heap ** without intervention in blocks of 192 bytes: ** ** Free heap: 24872 @ 79s. ** Free heap: 25064 @ 79s. ** Free heap: 25256 @ 79s. ** Free heap: 25448 @ 79s. ** ... all the way to ** Free heap: 33896 @ 93s. ** Free heap: 34088 @ 93s. ** Free heap: 34312 @ 93s. */ #include #include #include #include const char* ssid = "........" const char* password = "........"; ESP8266WebServer server(80); uint32_t lastFreeHeap = 0; const int led = 13; void showFreeHeap() { uint32_t freeNow = ESP.getFreeHeap(); if (freeNow != lastFreeHeap) { lastFreeHeap = freeNow; Serial.print("Free heap: "); Serial.print(freeNow); Serial.print(" @ " ); Serial.print(millis()/1000); Serial.println("s."); } } void handleRoot() { digitalWrite(led, 1); server.send(200, "text/plain", "hello from esp8266!"); digitalWrite(led, 0); } void handleNotFound(){ digitalWrite(led, 1); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i