#include "DHTesp.h"
#include <WiFi.h>
#include <PubSubClient.h>
#include "wifi_secrets.h"
#include "mqtt_secrets.h"
#define MQTT_VERSION MQTT_VERSION_3_1_1
const PROGMEM int DHT_PIN = 15; // 2
const PROGMEM char* MQTT_TEMP_SENSOR_STATE_TOPIC = "home/sensors/temp/1/state"; // online/offline
const PROGMEM char* MQTT_TEMP_SENSOR_COMMAND_TOPIC = "home/sensors/temp/1/set"; // {temperature: xx, humidity: yy}}
PubSubClient mqttClient(espClient);
DHTesp dhtSensor;
// setup funcs
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Connected to AP successfully!");
}
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Disconnected from WiFi access point");
Serial.print("WiFi lost connection. Reason: ");
Serial.println("Trying to Reconnect");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
}
void WifiSetup() {
// delete old config
WiFi.disconnect(true);
delay(1000);
WiFi.onEvent(WiFiStationConnected,ARDUINO_EVENT_WIFI_STA_CONNECTED);
WiFi.onEvent(WiFiGotIP, ARDUINO_EVENT_WIFI_STA_GOT_IP);
WiFi.onEvent(WiFiStationDisconnected, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println();
Serial.println();
Serial.println("Wait for WiFi... ");
}
void SensorSetup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void setup() {
SensorSetup();
WifiSetup();
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(1000);
}
// mqtt
void publishData() {
if (!mqttClient.connected()) return;
mqttClient.publish(MQTT_ALWAYS_ON_STATE_TOPIC, alwaysOnState ? LIGHT_ON : LIGHT_OFF, true);
}