Added settings

This commit is contained in:
Gašper Dobrovoljc
2023-02-19 14:16:00 +01:00
parent af449d1a2b
commit 59252e81b0
7 changed files with 171 additions and 24 deletions

View File

@@ -1,11 +1,22 @@
#include "settings.h"
#include <Arduino.h>
#include <ArduinoJson.h>
#include <AsyncJson.h>
#include <DHT.h>
#include <EEPROM.h>
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>
#include <WiFi.h>
void sendSensorData();
void setupSensor();
const char *ssid = "stoenka";
const char *password = "topavem2020";
DHT *dht;
Settings settings;
AsyncWebServer server(80);
AsyncEventSource events("/events");
@@ -20,20 +31,46 @@ void setupWifi() {
Serial.println();
Serial.print("Connected: ");
Serial.println(WiFi.localIP());
Serial.println();
}
void onConnect(AsyncEventSourceClient *client) {
Serial.println("Client connected to events");
Serial.println("New client connected");
sendSensorData();
}
void setupServer() {
if (!SPIFFS.begin(true)) {
Serial.println("Failed to mount file system");
return;
}
// GET /settings - Get the current settings
server.on("/settings", HTTP_GET, [](AsyncWebServerRequest *req) {
StaticJsonDocument<200> json;
json["refreshInterval"] = settings.getRefreshInterval();
json["sensorPin"] = settings.getSensorPin();
String buffer;
serializeJson(json, buffer);
req->send(200, "application/json", buffer);
});
// PATCH /settings - Update settings
AsyncCallbackJsonWebHandler *settingsHandler =
new AsyncCallbackJsonWebHandler(
"/settings", [](AsyncWebServerRequest *req, JsonVariant &json) {
if (!json["refreshInterval"].isNull()) {
settings.setRefreshInterval(json["refreshInterval"].as<long>());
}
if (!json["sensorPin"].isNull()) {
settings.setSensorPin(json["sensorPin"].as<unsigned int>());
setupSensor();
}
req->send(200);
});
server.addHandler(settingsHandler);
events.onConnect(onConnect);
server.addHandler(&events);
server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html");
@@ -42,19 +79,39 @@ void setupServer() {
Serial.println("Server running");
}
void setupSensor() {
dht = new DHT(settings.getSensorPin(), DHT11);
dht->begin();
}
void sendSensorData() {
StaticJsonDocument<200> json;
json["temp"] = (int)(dht->readTemperature() * 100 + 0.5) / 100.0;
json["hum"] = dht->readHumidity();
String buffer;
serializeJson(json, buffer);
events.send(buffer.c_str(), "message", millis());
}
void setup() {
Serial.begin(115200);
setupWifi();
setupServer();
settings.load();
setupSensor();
}
int i = 0;
unsigned long prevMillis = 0;
void loop() {
i++;
if (i > 100000) {
i = 0;
events.send("hello", "message", millis());
unsigned long currMillis = millis();
if (currMillis - prevMillis > settings.getRefreshInterval()) {
prevMillis = currMillis;
sendSensorData();
}
}