123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /*
- SPIFFS-served REST API example for PersWiFiManager v3.0
- */
- #define DEBUG_SERIAL //uncomment for Serial debugging statements
- #ifdef DEBUG_SERIAL
- #define DEBUG_BEGIN Serial.begin(115200)
- #define DEBUG_PRINT(x) Serial.println(x)
- #else
- #define DEBUG_PRINT(x)
- #define DEBUG_BEGIN
- #endif
- //includes
- #include <PersWiFiManager.h>
- #include <ArduinoJson.h>
- #include <ESP8266WiFi.h>
- #include <WiFiClient.h>
- //#include <ESP8266WebServer.h>
- #include <ESP8266mDNS.h>
- #include <ESP8266HTTPUpdateServer.h>
- //#include <PubSubClient.h>
- //#include <EasySSDP.h> // http://ryandowning.net/EasySSDP/
- //extension of ESP8266WebServer with SPIFFS handlers built in
- #include <SPIFFSReadServer.h> // http://ryandowning.net/SPIFFSReadServer/
- // upload data folder to chip with Arduino ESP8266 filesystem uploader
- // https://github.com/esp8266/arduino-esp8266fs-plugin
- #include <DNSServer.h>
- #include <FS.h>
- #define DEVICE_NAME "ESP8266 DEVICE"
- //server objects
- SPIFFSReadServer server(80);
- DNSServer dnsServer;
- PersWiFiManager persWM(server, dnsServer);
- ESP8266HTTPUpdateServer httpUpdater;
- ////// Sample program data
- int x;
- String y;
- float z;
- void setup() {
- DEBUG_BEGIN; //for terminal debugging
- DEBUG_PRINT();
-
- //optional code handlers to run everytime wifi is connected...
- persWM.onConnect([]() {
- DEBUG_PRINT("wifi connected");
- DEBUG_PRINT(WiFi.SSID());
- DEBUG_PRINT(WiFi.localIP());
- //EasySSDP::begin(server);
- });
- //...or AP mode is started
- persWM.onAp([](){
- DEBUG_PRINT("AP MODE");
- DEBUG_PRINT(persWM.getApSsid());
- });
- //allows serving of files from SPIFFS
- SPIFFS.begin();
- //sets network name for AP mode
- persWM.setApCredentials(DEVICE_NAME);
- //persWM.setApCredentials(DEVICE_NAME, "password"); optional password
- //make connecting/disconnecting non-blocking
- persWM.setConnectNonBlock(true);
- //in non-blocking mode, program will continue past this point without waiting
- persWM.begin();
- //handles commands from webpage, sends live data in JSON format
- server.on("/api", []() {
- DEBUG_PRINT("server.on /api");
- if (server.hasArg("x")) {
- x = server.arg("x").toInt();
- DEBUG_PRINT(String("x: ") + x);
- } //if
- if (server.hasArg("y")) {
- y = server.arg("y");
- DEBUG_PRINT("y: " + y);
- } //if
- if (server.hasArg("z")) {
- z = server.arg("z").toFloat();;
- //DEBUG_PRINT("z: " + z);
- } //if
- //build json object of program data
- StaticJsonBuffer<200> jsonBuffer;
- JsonObject &json = jsonBuffer.createObject();
- json["x"] = x;
- json["y"] = y;
- json["z"] = z;
- json["ssid"] = WiFi.SSID();
- char jsonchar[200];
- json.printTo(jsonchar); //print to char array, takes more memory but sends in one piece
- server.send(200, "application/json", jsonchar);
- }); //server.on api
- // HTTP Updater at /update
- httpUpdater.setup(&server);
-
- server.begin();
-
- DEBUG_PRINT("setup complete.");
- DEBUG_PRINT("Hodensack!");
- } //void setup
- void loop() {
- //in non-blocking mode, handleWiFi must be called in the main loop
- persWM.handleWiFi();
- dnsServer.processNextRequest();
- server.handleClient();
- //DEBUG_PRINT(millis());
- // do stuff with x and y
- } //void loop
|