Several bug fixes in portal and added mqtt parameters
This commit is contained in:
parent
b857812bfe
commit
3d5db22d6b
107
src/main.cpp
107
src/main.cpp
@ -3,9 +3,9 @@
|
|||||||
#include <BH1750.h>
|
#include <BH1750.h>
|
||||||
#include <DHT.h>
|
#include <DHT.h>
|
||||||
#include <DHT_U.h>
|
#include <DHT_U.h>
|
||||||
#include <IotWebConf.h>
|
|
||||||
#include <ESPAsyncWebServer.h>
|
#include <ESPAsyncWebServer.h>
|
||||||
#include <ESPDash.h>
|
#include <ESPDash.h>
|
||||||
|
#include <IotWebConf.h>
|
||||||
|
|
||||||
#define I2C_SDA 25
|
#define I2C_SDA 25
|
||||||
#define I2C_SCL 26
|
#define I2C_SCL 26
|
||||||
@ -17,20 +17,37 @@
|
|||||||
#define POWER_CTRL 4
|
#define POWER_CTRL 4
|
||||||
#define USER_BUTTON 35
|
#define USER_BUTTON 35
|
||||||
|
|
||||||
// -- Initial name of the Thing. Used e.g. as SSID of the own Access Point.
|
|
||||||
const char thingName[] = "hiGrow";
|
|
||||||
|
|
||||||
// -- Initial password to connect to the Thing, when it creates an own Access Point.
|
|
||||||
const char wifiInitialApPassword[] = "test1234";
|
|
||||||
|
|
||||||
DNSServer dnsServer;
|
|
||||||
AsyncWebServer server(80);
|
|
||||||
IotWebConf iotWebConf(thingName, &dnsServer, &server, wifiInitialApPassword);
|
|
||||||
|
|
||||||
BH1750 lightMeter;
|
BH1750 lightMeter;
|
||||||
DHT_Unified dht(DHT12_PIN, DHT11);
|
DHT_Unified dht(DHT12_PIN, DHT11);
|
||||||
|
|
||||||
void wifiConnected();
|
#define STRING_LEN 128
|
||||||
|
#define BOOL_LEN 1
|
||||||
|
|
||||||
|
// Configuration specific key. The value should be modified if config structure was changed.
|
||||||
|
#define CONFIG_VERSION "hgr1"
|
||||||
|
|
||||||
|
// Initial name of the Thing. Used e.g. as SSID of the own Access Point.
|
||||||
|
const char thingName[] = "hiGrow";
|
||||||
|
|
||||||
|
// Initial password to connect to the Thing, when it creates an own Access Point.
|
||||||
|
const char wifiInitialApPassword[] = "test1234";
|
||||||
|
|
||||||
|
char mqttEnabledValue[BOOL_LEN];
|
||||||
|
char mqttServerValue[STRING_LEN];
|
||||||
|
char mqttUserNameValue[STRING_LEN];
|
||||||
|
char mqttUserPasswordValue[STRING_LEN];
|
||||||
|
char mqttTopicValue[STRING_LEN];
|
||||||
|
IotWebConfSeparator separator1 = IotWebConfSeparator();
|
||||||
|
IotWebConfParameter mqttEnabledParam = IotWebConfParameter("MQTT enabled", "mqttEnabled", mqttEnabledValue, BOOL_LEN, "checkbox");
|
||||||
|
IotWebConfParameter mqttServerParam = IotWebConfParameter("MQTT server", "mqttServer", mqttServerValue, STRING_LEN);
|
||||||
|
IotWebConfParameter mqttUserNameParam = IotWebConfParameter("MQTT user", "mqttUser", mqttUserNameValue, STRING_LEN);
|
||||||
|
IotWebConfParameter mqttUserPasswordParam = IotWebConfParameter("MQTT password", "mqttPass", mqttUserPasswordValue, STRING_LEN, "password");
|
||||||
|
IotWebConfParameter mqttTopicParam = IotWebConfParameter("MQTT topic", "mqttTopic", mqttTopicValue, STRING_LEN);
|
||||||
|
|
||||||
|
DNSServer dnsServer;
|
||||||
|
AsyncWebServer server(80);
|
||||||
|
AsyncCallbackWebHandler* rootHandler;
|
||||||
|
IotWebConf iotWebConf(thingName, &dnsServer, &server, wifiInitialApPassword, CONFIG_VERSION);
|
||||||
|
|
||||||
uint16_t soil = 0;
|
uint16_t soil = 0;
|
||||||
uint32_t salt = 0;
|
uint32_t salt = 0;
|
||||||
@ -39,10 +56,13 @@ float temperature = 0;
|
|||||||
float humidity = 0;
|
float humidity = 0;
|
||||||
float lux = 0;
|
float lux = 0;
|
||||||
|
|
||||||
|
bool needMqttReconnect = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle web requests to "/" path.
|
* Handle web requests to "/" path.
|
||||||
*/
|
*/
|
||||||
void handleRoot(AsyncWebServerRequest *request){
|
void handleRoot(AsyncWebServerRequest* request)
|
||||||
|
{
|
||||||
// -- Let IotWebConf test and handle captive portal requests.
|
// -- Let IotWebConf test and handle captive portal requests.
|
||||||
if (iotWebConf.handleCaptivePortal(request)) {
|
if (iotWebConf.handleCaptivePortal(request)) {
|
||||||
// -- Captive portal request were already served.
|
// -- Captive portal request were already served.
|
||||||
@ -56,7 +76,7 @@ void handleRoot(AsyncWebServerRequest *request){
|
|||||||
request->send(200, "text/html", s);
|
request->send(200, "text/html", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleValues(AsyncWebServerRequest *request)
|
void handleValues(AsyncWebServerRequest* request)
|
||||||
{
|
{
|
||||||
StaticJsonDocument<200> doc;
|
StaticJsonDocument<200> doc;
|
||||||
doc[F("temperature")] = temperature;
|
doc[F("temperature")] = temperature;
|
||||||
@ -75,6 +95,10 @@ void handleValues(AsyncWebServerRequest *request)
|
|||||||
void wifiConnected()
|
void wifiConnected()
|
||||||
{
|
{
|
||||||
Serial.println("WiFi was connected.");
|
Serial.println("WiFi was connected.");
|
||||||
|
if (server.removeHandler(rootHandler)) {
|
||||||
|
Serial.println("Root handler disabled.");
|
||||||
|
}
|
||||||
|
ESPDash.init(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t readSalt()
|
uint32_t readSalt()
|
||||||
@ -111,6 +135,29 @@ float readBattery()
|
|||||||
return battery_voltage;
|
return battery_voltage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void configSaved()
|
||||||
|
{
|
||||||
|
Serial.println("Configuration was updated.");
|
||||||
|
needMqttReconnect = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean formValidator(AsyncWebServerRequest* request)
|
||||||
|
{
|
||||||
|
Serial.println("Validating form.");
|
||||||
|
boolean valid = true;
|
||||||
|
/*
|
||||||
|
if (request->arg(mqttServerParam.getId()).length() < 3) {
|
||||||
|
mqttServerParam.errorMessage = "Please provide at least 3 characters!";
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
if (request->arg(mqttTopicParam.getId()).length() < 1) {
|
||||||
|
mqttTopicParam.errorMessage = "Please provide at least 1 character!";
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
@ -119,17 +166,34 @@ void setup()
|
|||||||
|
|
||||||
// Init IotWebConf
|
// Init IotWebConf
|
||||||
iotWebConf.setWifiConnectionCallback(&wifiConnected);
|
iotWebConf.setWifiConnectionCallback(&wifiConnected);
|
||||||
iotWebConf.init();
|
iotWebConf.addParameter(&separator1);
|
||||||
|
iotWebConf.addParameter(&mqttEnabledParam);
|
||||||
|
iotWebConf.addParameter(&mqttServerParam);
|
||||||
|
iotWebConf.addParameter(&mqttUserNameParam);
|
||||||
|
iotWebConf.addParameter(&mqttUserPasswordParam);
|
||||||
|
iotWebConf.addParameter(&mqttTopicParam);
|
||||||
|
iotWebConf.setConfigSavedCallback(&configSaved);
|
||||||
|
iotWebConf.setFormValidator(&formValidator);
|
||||||
|
if (!iotWebConf.init()) {
|
||||||
|
mqttServerValue[0] = '\0';
|
||||||
|
mqttUserNameValue[0] = '\0';
|
||||||
|
mqttUserPasswordValue[0] = '\0';
|
||||||
|
}
|
||||||
iotWebConf.doLoop();
|
iotWebConf.doLoop();
|
||||||
|
|
||||||
// Init WebServer
|
// Init WebServer
|
||||||
server.on("/config", HTTP_GET, [](AsyncWebServerRequest *request) { iotWebConf.handleConfig(request); });
|
rootHandler = new AsyncCallbackWebHandler();
|
||||||
|
rootHandler->setUri("/");
|
||||||
|
rootHandler->setMethod(HTTP_GET);
|
||||||
|
rootHandler->onRequest(handleRoot);
|
||||||
|
server.addHandler(rootHandler);
|
||||||
|
|
||||||
|
server.on("/config", HTTP_ANY, [](AsyncWebServerRequest* request) { iotWebConf.handleConfig(request); });
|
||||||
server.on("/values", HTTP_GET, handleValues);
|
server.on("/values", HTTP_GET, handleValues);
|
||||||
server.onNotFound([](AsyncWebServerRequest *request) { iotWebConf.handleNotFound(request); });
|
server.onNotFound([](AsyncWebServerRequest* request) { iotWebConf.handleNotFound(request); });
|
||||||
server.begin();
|
server.begin();
|
||||||
|
|
||||||
// Init Dashboard
|
// Init Dashboard
|
||||||
ESPDash.init(server);
|
|
||||||
ESPDash.addTemperatureCard("temp", "Temperature/C", 0, 0);
|
ESPDash.addTemperatureCard("temp", "Temperature/C", 0, 0);
|
||||||
ESPDash.addHumidityCard("hum", "Humidity/%", 0);
|
ESPDash.addHumidityCard("hum", "Humidity/%", 0);
|
||||||
ESPDash.addNumberCard("lux", "BH1750/lx", 0);
|
ESPDash.addNumberCard("lux", "BH1750/lx", 0);
|
||||||
@ -161,6 +225,11 @@ void loop()
|
|||||||
static uint64_t timestamp;
|
static uint64_t timestamp;
|
||||||
iotWebConf.doLoop();
|
iotWebConf.doLoop();
|
||||||
|
|
||||||
|
if (needMqttReconnect) {
|
||||||
|
Serial.println("Reconfigure & reconnect MqTT");
|
||||||
|
needMqttReconnect = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (millis() - timestamp > 1000) {
|
if (millis() - timestamp > 1000) {
|
||||||
timestamp = millis();
|
timestamp = millis();
|
||||||
|
|
||||||
@ -198,7 +267,7 @@ void loop()
|
|||||||
ESPDash.updateNumberCard("salt", (int)salt);
|
ESPDash.updateNumberCard("salt", (int)salt);
|
||||||
ESPDash.updateNumberCard("batt", (int)bat);
|
ESPDash.updateNumberCard("batt", (int)bat);
|
||||||
|
|
||||||
Serial.printf("DHTT:%.2f H:%.2f Lux:%.2f Soil:%u Salt:%u Bat:%.2f\n",
|
Serial.printf("DHTT:%.2f H:%.2f Lux:%.2f Soil:%u Salt:%u Bat:%.2f\r\n",
|
||||||
temperature, humidity, lux, soil, salt, bat);
|
temperature, humidity, lux, soil, salt, bat);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user