Added settings
This commit is contained in:
73
src/main.cpp
73
src/main.cpp
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user