#include #include #include #include #include #include #include #include "credential.h" #define SLEEP_MINUTES 1 DHTesp dht; char* mqtt_server = "ashpool.lan"; WiFiClient wclient; PubSubClient client(wclient, mqtt_server, 1883); String nodeID; #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(115200); nodeID = "ESP_" + String(ESP.getChipId(), 16); Serial.println("DHT MQTT Logger:" + nodeID + " Starting\n"); dht.setup(D4, DHTesp::DHT22); Wire.begin(D6, D5); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { Serial.println("SSD1306 allocation failed"); } wifi_set_sleep_type(LIGHT_SLEEP_T); wifi(); if (client.connect((char*) nodeID.c_str())) { Serial.println("Connected to MQTT broker"); } display.display(); display.drawPixel(10, 10, SSD1306_WHITE); display.clearDisplay(); display.setTextSize(4); display.setTextColor(SSD1306_WHITE); } void wifi() { WiFi.persistent(false); WiFi.mode(WIFI_OFF); WiFi.mode(WIFI_STA); WiFi.begin(ssid_name, ssid_pass); // Access WiFi, details from credential.h Serial.print("Connecting to "); Serial.print(ssid_name); Serial.print(" ..."); while (WiFi.status() != WL_CONNECTED) { // Wait for WiFi to connect delay(250); Serial.print("."); } Serial.println('\n'); Serial.println("WiFi connection established"); Serial.print("Device's IP address is "); Serial.println(WiFi.localIP()); // Show device's IP address } template void publish(const char * topic, T msg) { if (!client.connected()) { client.connect((char*) nodeID.c_str()); } client.publish(nodeID + "/" + topic, String(msg)); Serial.println(nodeID + "/" + topic + ": " + String(msg)); } void loop() { delay(dht.getMinimumSamplingPeriod()); Serial.println ( "------------------------" ) ; if (WiFi.status() != WL_CONNECTED) { wifi(); } float h = dht.getHumidity(); float t = dht.getTemperature(); float hic = dht.computeHeatIndex(t, h, false); publish("temp", t); publish("relative_humidity", h); publish("heat_index", String(hic)); display.clearDisplay(); display.setCursor(10,0); display.println(String(t)); display.display(); delay(SLEEP_MINUTES * 60 * 1000L); }