Remove WiFiManager because that is Not Simple
This commit is contained in:
parent
044a0313c5
commit
31f0b47a92
|
@ -4,3 +4,4 @@
|
||||||
.vscode/launch.json
|
.vscode/launch.json
|
||||||
.vscode/ipch
|
.vscode/ipch
|
||||||
secrets.h
|
secrets.h
|
||||||
|
.DS_Store
|
||||||
|
|
|
@ -13,12 +13,12 @@ platform = espressif8266
|
||||||
board = esp01
|
board = esp01
|
||||||
framework = arduino
|
framework = arduino
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
; monitor_port = /dev/cu.usbserial-22430
|
upload_speed = 460800
|
||||||
; upload_port = /dev/cu.usbserial-22430 ;/dev/cu.usbserial-142320 ;
|
monitor_port = /dev/cu.usbserial-142310
|
||||||
|
upload_port = /dev/cu.usbserial-142310 ;/dev/cu.usbserial-142320 ;
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
PubSubClient
|
knolleary/PubSubClient @ ^2.8
|
||||||
DHT sensor library
|
adafruit/Adafruit Unified Sensor @ ^1.1.4
|
||||||
WifiManager
|
adafruit/DHT sensor library @ ^1.4.0
|
||||||
ESP8266WebServer
|
milesburton/DallasTemperature @ ^3.9.1
|
||||||
DNSServer
|
|
||||||
ArduinoJson@5.9.0
|
|
|
@ -6,12 +6,4 @@ I use an ESP-01 to keep things cheap. The goal is to have one of these things pe
|
||||||
Keep the ESP separated from the DHT — or else the heat from the wifi module affects the temperature and humidity readings.
|
Keep the ESP separated from the DHT — or else the heat from the wifi module affects the temperature and humidity readings.
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
Flash your device and it will create a wifi network called SimpleWeather. Connect to this and wait for the captive portal, or visit 192.168.4.1 to set up. Fields are:
|
Edit your wifi/mqtt settings and flash your device.
|
||||||
1. Wifi network to join
|
|
||||||
2. Wifi password
|
|
||||||
3. MQTT server address
|
|
||||||
4. MQTT server port
|
|
||||||
5. Temperature topic
|
|
||||||
6. Humidity topic
|
|
||||||
|
|
||||||
If your ESP device needs clearing out (old wifi credentials, etc) then set `resetWifiSettings` to true. Flash and let the device restart, then set it back to false and reflash again. Re-run setup.
|
|
|
@ -1,30 +1,35 @@
|
||||||
#include <LittleFS.h> //this needs to be first, or it all crashes and burns...
|
#include <ESP8266WiFi.h>
|
||||||
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
|
|
||||||
#include <DNSServer.h>
|
|
||||||
#include <ESP8266WebServer.h>
|
|
||||||
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
|
|
||||||
#include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson
|
|
||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
#include <DHT.h>
|
|
||||||
|
|
||||||
#define DHTPIN 2
|
// #define DHTMODE
|
||||||
#define DHTTYPE DHT11
|
#define ONEWIREMODE
|
||||||
|
|
||||||
const bool resetWifiSettings = false; // set true to clear out old settings and start fresh!
|
#ifdef DHTMODE
|
||||||
bool shouldSaveConfig = false;
|
#include <DHT.h>
|
||||||
const bool debug = false;
|
DHT dht(2, DHT11);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ONEWIREMODE
|
||||||
|
#include <DallasTemperature.h>
|
||||||
|
OneWire oneWire(2);
|
||||||
|
DallasTemperature sensors(&oneWire);
|
||||||
|
DeviceAddress insideThermometer;
|
||||||
|
#endif
|
||||||
|
|
||||||
DHT dht(DHTPIN, DHTTYPE);
|
|
||||||
WiFiClient wifiClient;
|
WiFiClient wifiClient;
|
||||||
PubSubClient mqttClient(wifiClient);
|
PubSubClient mqttClient(wifiClient);
|
||||||
|
|
||||||
char hostName[40] = "SimpleWeather";
|
const bool debug = false;
|
||||||
char mqtt_server[40];
|
const char* ssid = "*******";
|
||||||
char mqtt_port[6];
|
const char* password = "*******";
|
||||||
char humidityTopic[40];
|
const char* hostName = "bedroomTemp";
|
||||||
char temperatureTopic[40];
|
const char* mqtt_server = "192.168.1.2";
|
||||||
|
const uint16_t mqtt_port = 1883;
|
||||||
|
const char* statusTopic = "device/bedroomTemp/status";
|
||||||
|
const char* humidityTopic = "sensors/bedroom/humidity";
|
||||||
|
const char* temperatureTopic = "sensors/bedroom/temperature";
|
||||||
|
|
||||||
const long measurementInterval = 5000;
|
const long measurementInterval = 30000;
|
||||||
unsigned long lastMeasureAttempt = 0;
|
unsigned long lastMeasureAttempt = 0;
|
||||||
|
|
||||||
void yield(unsigned long yieldDuration) { //overload yield function to allow for any ms delay
|
void yield(unsigned long yieldDuration) { //overload yield function to allow for any ms delay
|
||||||
|
@ -32,11 +37,6 @@ void yield(unsigned long yieldDuration) { //overload yield function to allow for
|
||||||
while ( (millis() - yieldBegan) < yieldDuration ) yield();
|
while ( (millis() - yieldBegan) < yieldDuration ) yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveConfigCallback () {
|
|
||||||
if(debug) Serial.println("Should save config");
|
|
||||||
shouldSaveConfig = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void reportResults(float temp, float humid) {
|
void reportResults(float temp, float humid) {
|
||||||
if (!isnan(temp) || !isnan(humid)) {
|
if (!isnan(temp) || !isnan(humid)) {
|
||||||
if(debug) {
|
if(debug) {
|
||||||
|
@ -45,16 +45,29 @@ void reportResults(float temp, float humid) {
|
||||||
Serial.println("Temperature (°C): " + String(temp));
|
Serial.println("Temperature (°C): " + String(temp));
|
||||||
Serial.println("-----------------------");
|
Serial.println("-----------------------");
|
||||||
}
|
}
|
||||||
mqttClient.publish(humidityTopic, String(humid).c_str(), true);
|
mqttClient.publish(humidityTopic, String(humid).c_str(), false);
|
||||||
mqttClient.publish(temperatureTopic, String(temp).c_str(), true);
|
mqttClient.publish(temperatureTopic, String(temp).c_str(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void reportResults(float temp) {
|
||||||
|
if (!isnan(temp)) {
|
||||||
|
if(debug) {
|
||||||
|
Serial.println("-----------------------");
|
||||||
|
Serial.println("Temperature (°C): " + String(temp));
|
||||||
|
Serial.println("-----------------------");
|
||||||
|
}
|
||||||
|
mqttClient.publish(temperatureTopic, String(temp).c_str(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void reconnectMqtt() {
|
void reconnectMqtt() {
|
||||||
while (!mqttClient.connected()) {
|
while (!mqttClient.connected()) {
|
||||||
if(debug) Serial.print("Attempting MQTT connection...");
|
if(debug) Serial.print("Attempting MQTT connection...");
|
||||||
if (mqttClient.connect(hostName)) {
|
// boolean connect (clientID, [username, password], [willTopic, willQoS, willRetain, willMessage], [cleanSession])
|
||||||
|
if (mqttClient.connect(hostName, NULL, NULL, statusTopic, 1, true, "offline")) {
|
||||||
if(debug) Serial.println("connected");
|
if(debug) Serial.println("connected");
|
||||||
|
mqttClient.publish(statusTopic, "online", true);
|
||||||
} else {
|
} else {
|
||||||
if(debug) {
|
if(debug) {
|
||||||
Serial.print(" failed. MQTT connection error: ");
|
Serial.print(" failed. MQTT connection error: ");
|
||||||
|
@ -66,112 +79,50 @@ void reconnectMqtt() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup_wifi() {
|
||||||
|
delay(10);
|
||||||
|
if(debug){
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("Connecting to ");
|
||||||
|
Serial.println(ssid);
|
||||||
|
}
|
||||||
|
WiFi.mode(WIFI_STA);
|
||||||
|
WiFi.begin(ssid, password);
|
||||||
|
if(debug){
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(500);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
Serial.print("\nWiFi connected!\nIP address: ");
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
if(debug) Serial.begin(115200);
|
if(debug) Serial.begin(115200);
|
||||||
if(resetWifiSettings) LittleFS.format();
|
#ifdef ONEWIREMODE
|
||||||
if(debug) Serial.println("mounting FS...");
|
sensors.begin();
|
||||||
|
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
|
||||||
if (LittleFS.begin()) {
|
sensors.setResolution(insideThermometer, 12);
|
||||||
if(debug) Serial.println("mounted file system");
|
#endif
|
||||||
if (LittleFS.exists("/config.json")) {
|
#ifdef DHTMODE
|
||||||
//file exists, reading and loading
|
dht.begin();
|
||||||
if(debug) Serial.println("reading config file");
|
#endif
|
||||||
File configFile = LittleFS.open("/config.json", "r");
|
setup_wifi();
|
||||||
if (configFile) {
|
mqttClient.setServer(mqtt_server, mqtt_port);
|
||||||
if(debug) Serial.println("opened config file");
|
|
||||||
size_t size = configFile.size();
|
|
||||||
// Allocate a buffer to store contents of the file.
|
|
||||||
std::unique_ptr<char[]> buf(new char[size]);
|
|
||||||
configFile.readBytes(buf.get(), size);
|
|
||||||
DynamicJsonBuffer jsonBuffer;
|
|
||||||
JsonObject& json = jsonBuffer.parseObject(buf.get());
|
|
||||||
if(debug) json.printTo(Serial);
|
|
||||||
if (json.success()) {
|
|
||||||
if(debug) Serial.println("\nparsed json");
|
|
||||||
strcpy(mqtt_server, json["mqtt_server"]);
|
|
||||||
strcpy(mqtt_port, json["mqtt_port"]);
|
|
||||||
strcpy(hostName, json["hostName"]);
|
|
||||||
strcpy(humidityTopic, json["humidityTopic"]);
|
|
||||||
strcpy(temperatureTopic, json["temperatureTopic"]);
|
|
||||||
} else {
|
|
||||||
if(debug) Serial.println("failed to load json config");
|
|
||||||
}
|
|
||||||
configFile.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(debug) Serial.println("failed to mount FS");
|
|
||||||
}
|
|
||||||
//end read
|
|
||||||
|
|
||||||
WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 6);
|
|
||||||
WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);
|
|
||||||
WiFiManagerParameter custom_mqtt_hostname("hostname", "host name", hostName, 40);
|
|
||||||
WiFiManagerParameter custom_mqtt_humidityTopic("humidityTopic", "humidity topic", humidityTopic, 40);
|
|
||||||
WiFiManagerParameter custom_mqtt_temperatureTopic("temperatureTopic", "temperature topic", temperatureTopic, 40);
|
|
||||||
|
|
||||||
WiFiManager wifiManager;
|
|
||||||
|
|
||||||
//set config save notify callback
|
|
||||||
wifiManager.setSaveConfigCallback(saveConfigCallback);
|
|
||||||
|
|
||||||
//add all your parameters here
|
|
||||||
wifiManager.addParameter(&custom_mqtt_server);
|
|
||||||
wifiManager.addParameter(&custom_mqtt_port);
|
|
||||||
wifiManager.addParameter(&custom_mqtt_hostname);
|
|
||||||
wifiManager.addParameter(&custom_mqtt_humidityTopic);
|
|
||||||
wifiManager.addParameter(&custom_mqtt_temperatureTopic);
|
|
||||||
|
|
||||||
if (resetWifiSettings) wifiManager.resetSettings();
|
|
||||||
if (!wifiManager.autoConnect("SimpleWeather", "password")) {
|
|
||||||
if(debug) Serial.println("failed to connect and hit timeout");
|
|
||||||
delay(3000);
|
|
||||||
ESP.reset();
|
|
||||||
delay(5000);
|
|
||||||
}
|
|
||||||
|
|
||||||
//if you get here you have connected to the WiFi
|
|
||||||
if(debug) Serial.println("connected!");
|
|
||||||
|
|
||||||
//read updated parameters
|
|
||||||
strcpy(mqtt_port, custom_mqtt_port.getValue());
|
|
||||||
strcpy(mqtt_server, custom_mqtt_server.getValue());
|
|
||||||
strcpy(hostName, custom_mqtt_hostname.getValue());
|
|
||||||
strcpy(humidityTopic, custom_mqtt_humidityTopic.getValue());
|
|
||||||
strcpy(temperatureTopic, custom_mqtt_temperatureTopic.getValue());
|
|
||||||
|
|
||||||
//save the custom parameters to FS
|
|
||||||
if (shouldSaveConfig) {
|
|
||||||
if(debug) Serial.println("saving config");
|
|
||||||
DynamicJsonBuffer jsonBuffer;
|
|
||||||
JsonObject& json = jsonBuffer.createObject();
|
|
||||||
json["mqtt_server"] = mqtt_server;
|
|
||||||
json["mqtt_port"] = mqtt_port;
|
|
||||||
json["hostName"] = hostName;
|
|
||||||
json["humidityTopic"] = humidityTopic;
|
|
||||||
json["temperatureTopic"] = temperatureTopic;
|
|
||||||
|
|
||||||
File configFile = LittleFS.open("/config.json", "w");
|
|
||||||
if (!configFile) Serial.println("failed to open config file for writing");
|
|
||||||
|
|
||||||
if(debug) json.printTo(Serial);
|
|
||||||
json.printTo(configFile);
|
|
||||||
configFile.close();
|
|
||||||
//end save
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debug) Serial.println("local ip");
|
|
||||||
if(debug) Serial.println(WiFi.localIP());
|
|
||||||
uint16_t mqtt_port_int = (uint16_t)strtol(mqtt_port, NULL, 10);
|
|
||||||
mqttClient.setServer(mqtt_server, mqtt_port_int);
|
|
||||||
dht.begin();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (!mqttClient.connected()) reconnectMqtt();
|
if (!mqttClient.connected()) reconnectMqtt();
|
||||||
mqttClient.loop();
|
mqttClient.loop();
|
||||||
if ((millis() - lastMeasureAttempt) > measurementInterval) {
|
if ((millis() - lastMeasureAttempt) > measurementInterval) {
|
||||||
reportResults(dht.readTemperature(), dht.readHumidity());
|
#ifdef DHTMODE
|
||||||
|
reportResults(dht.readTemperature(), dht.readHumidity());
|
||||||
|
#endif
|
||||||
|
#ifdef ONEWIREMODE
|
||||||
|
sensors.requestTemperatures();
|
||||||
|
reportResults(sensors.getTempC(insideThermometer));
|
||||||
|
#endif
|
||||||
lastMeasureAttempt = millis();
|
lastMeasureAttempt = millis();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue