basic work for the app interface #1

pull/1/head
Thomas Ballmann 4 years ago
parent d8227ec55b
commit 7ab6afc067

@ -3,11 +3,17 @@
*/
const _settings = {
// connected wifi
"wifi_ssid": "",
// oparation mode
"device_mode": "active",
// deep sleep
// Set rotation setting for display
// 0 thru 3 corresponding to 4 cardinal rotations
"device_rotation": 0,
// deep sleep timer
"cloud_refresh": 97
}

@ -3,12 +3,17 @@
#include "ESPAsyncWebServer.h"
#include "AsyncJson.h"
#include "ArduinoJson.h"
#include "settings.h"
// https://techtutorialsx.com/2018/09/17/esp32-arduino-web-server-serving-external-css-file/
// https://docs.platformio.org/en/latest/platforms/espressif8266.html#uploading-files-to-file-system-spiffs
AsyncWebServer server(80);
void setupSettingsGet();
void setupSettingsPost();
void setupWifiScan();
void setupWifiConnect();
void setupApp()
{
@ -21,6 +26,7 @@ void setupApp()
// @see https://github.com/me-no-dev/ESPAsyncWebServer
// @see https://arduinojson.org/v6/assistant/
// serve static files
server
@ -29,6 +35,11 @@ void setupApp()
.setCacheControl("max-age=600")
;
setupSettingsGet();
setupSettingsPost();
setupWifiScan();
setupWifiConnect();
// TODO response
server.on("/test", HTTP_GET, [] (AsyncWebServerRequest *request) {
@ -43,16 +54,127 @@ void setupApp()
});
// TODO request
AsyncCallbackJsonWebHandler* handler = new AsyncCallbackJsonWebHandler("/rest/endpoint", [](AsyncWebServerRequest *request, JsonVariant &json) {
// CORS
//DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*");
server.begin();
Serial.println("setup configure - done");
}
void setupSettingsGet()
{
server.on("/api/settings", HTTP_GET, [] (AsyncWebServerRequest *request) {
AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument root(1024);
//root["heap"] = ESP.getFreeHeap();
// NVS.getString("wifi_ssid");
root["wifi_ssid"] = NVS.getString("wifi_ssid"); // WiFi.SSID();
root["device_mode"] = "active";
root["device_rotation"] = 0;
root["cloud_refresh"] = 97; // aktueller sleep timer
serializeJson(root, *response);
request->send(response);
});
}
void setupSettingsPost()
{
AsyncCallbackJsonWebHandler* handler = new AsyncCallbackJsonWebHandler("/api/settings", [](AsyncWebServerRequest *request, JsonVariant &json) {
JsonObject jsonObj = json.to<JsonObject>();
Serial.println("/api/settings");
NVS.setString("wifi_ssid", jsonObj["wifi_ssid"], true);
/*
char hostname[64];
strlcpy(hostname, // <- destination
jsonObj["wifi_ssid"] | "example.com", // <- source
sizeof(hostname)); // <- destination's capacity
*/
Serial.println(NVS.getString("wifi_ssid"));
// ...
});
server.addHandler(handler);
server.begin();
}
Serial.println("setup configure - done");
void setupCurrentImage()
{
server.on("/current-image", HTTP_GET, [] (AsyncWebServerRequest *request) {
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/currentImage.bin", "image/vnd.wap.wbmp");
//response->addHeader("Content-Encoding", "gzip");
request->send(response);
});
}
void setupWifiScan()
{
//First request will return 0 results unless you start scan from somewhere else (loop/setup)
//Do not request more often than 3-5 seconds
server.on("/api/wifi/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 += "}";
}
WiFi.scanDelete();
if(WiFi.scanComplete() == -2){
WiFi.scanNetworks(true);
}
}
json += "]";
request->send(200, "application/json", json);
json = String();
});
}
void setupWifiConnect()
{
AsyncCallbackJsonWebHandler* handler = new AsyncCallbackJsonWebHandler("/api/wifi/connect", [](AsyncWebServerRequest *request, JsonVariant &json) {
//JsonObject jsonObj = json.to<JsonObject>();
// TODO save settings
AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument root(1024);
root["status"] = true;
root["message"] = "";
serializeJson(root, *response);
request->send(response);
// ist ein restart wichtig?
//ESP.restart();
});
server.addHandler(handler);
}

@ -1,6 +1,7 @@
#include <Arduino.h>
#include <pgmspace.h>
#include <HTTPClient.h>
#include <SPIFFS.h>
#include "settings.h"
#include "display.h"
@ -9,7 +10,7 @@
// TODO SMART SIGN CONFIG ========
#define config_PullServer "http://paperdash.sonic.da-tom.com/gateway.php/" // pull server address
String config_UUID = "22805938-2280-8022-3822-385980225980"; // TODO
String config_UUID = "22805938-2280-8022-3822-385980225980"; // TODO
//String config_PullServer;
//String config_UUID;
@ -20,8 +21,7 @@ const char *setting_HeaderKeys[] = {
// update deep sleep interval
"DeepSleepInterval",
// execute firmware update url
"UpdateFirmware"
};
"UpdateFirmware"};
//#include <GxEPD2_BW.h>
//#define FRAME_BUFFERBUFFE_SIZE GxEPD2_750::WIDTH *GxEPD2_750::HEIGHT / 8
@ -31,7 +31,6 @@ HTTPClient http;
void pullData();
void setupCloud()
{
Serial.println("setup cloud");
@ -40,7 +39,6 @@ void setupCloud()
//config_PullServer = NVS.getString("cloud_gateway");
config_UUID = NVS.getString("cloud_uuid");
http.useHTTP10(true); // http1.1 chunked übertragung funktioniert irgendwie nicht
http.setTimeout(7000);
http.collectHeaders(setting_HeaderKeys, sizeof(setting_HeaderKeys) / sizeof(char *));
@ -50,7 +48,7 @@ void setupCloud()
void loopCloud()
{
pullData();
pullData();
}
/**
@ -90,7 +88,6 @@ void pullData()
deviceSetSleepInterval(DeepSleepInterval.toInt());
}
// update to new firmware
String UpdateFirmware = http.header("UpdateFirmware");
if (UpdateFirmware.length() > 0)
@ -116,6 +113,13 @@ void pullData()
int imageBufferOffset = 0;
displayOpenFramebuffer();
// persist image to display
File file = SPIFFS.open("/currentImage.bin", FILE_WRITE);
if (!file)
{
Serial.println("Failed to open file for writing");
}
// read all data from server
while (http.connected() && (len > 0 || len == -1))
{
@ -127,9 +131,16 @@ void pullData()
// read up to 128 byte
int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
// write to storage
if (file)
{
file.write(buff, c);
}
// write display frame
displayWriteFramebuffer(imageBufferOffset, buff, c);
imageBufferOffset += c;
/*
/*
for (int i = 0; i < c; i++)
{
// write to display buffer
@ -163,6 +174,11 @@ void pullData()
delay(1);
}
if (file)
{
file.close();
}
// done
displayFlushFramebuffer();
}

@ -1,5 +1,8 @@
#include "settings.h"
// setting keys
const char *config_DeviceCurrentImage = "/currentImage.bin";
void setupSettings()
{

Loading…
Cancel
Save