#include #include #include #define DHTPIN D2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); // U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); int currentMode = 0; // 0 = Hello, 1 = humidity, 2 = temp C, 3 = temp F void showHello() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(22, 20, "DHT11 Ready"); u8g2.drawHLine(0, 25, 128); u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(10, 40, "0 - Hello Fab Lab"); u8g2.drawStr(10, 52, "1 - Humidity"); u8g2.drawStr(10, 64, "2 - Temp (C) 3 - Temp (F)"); u8g2.sendBuffer(); } void showFabLab() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB14_tr); u8g2.drawStr(18, 24, "Hello"); u8g2.setFont(u8g2_font_ncenB18_tr); u8g2.drawStr(8, 54, "Fab Lab!"); u8g2.sendBuffer(); } void showHumidity(float h) { char valStr[10]; dtostrf(h, 4, 1, valStr); strcat(valStr, " %"); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(28, 14, "Humidity"); u8g2.drawHLine(0, 18, 128); u8g2.setFont(u8g2_font_ncenB24_tr); u8g2.drawStr(14, 52, valStr); u8g2.sendBuffer(); } void showTempC(float t) { char valStr[10]; dtostrf(t, 4, 1, valStr); strcat(valStr, " C"); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(18, 14, "Temperature"); u8g2.drawHLine(0, 18, 128); u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(44, 32, "Celsius"); u8g2.setFont(u8g2_font_ncenB24_tr); u8g2.drawStr(14, 62, valStr); u8g2.sendBuffer(); } void showTempF(float t) { float f = (t * 9.0 / 5.0) + 32.0; char valStr[10]; dtostrf(f, 4, 1, valStr); strcat(valStr, " F"); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(18, 14, "Temperature"); u8g2.drawHLine(0, 18, 128); u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(30, 32, "Fahrenheit"); u8g2.setFont(u8g2_font_ncenB24_tr); u8g2.drawStr(14, 62, valStr); u8g2.sendBuffer(); } void setup() { Serial.begin(115200); dht.begin(); u8g2.begin(); showHello(); Serial.println("DHT11 Monitor ready."); Serial.println("Send 0 = Hello Fab Lab | 1 = Humidity | 2 = Temp C | 3 = Temp F"); } void loop() { if (Serial.available() > 0) { char input = Serial.read(); if (input == '0') { currentMode = 0; showFabLab(); Serial.println("Mode: Hello Fab Lab"); } else if (input == '1') { currentMode = 1; Serial.println("Mode: Humidity"); } else if (input == '2') { currentMode = 2; Serial.println("Mode: Temperature (Celsius)"); } else if (input == '3') { currentMode = 3; Serial.println("Mode: Temperature (Fahrenheit)"); } else if (input != '\n' && input != '\r') { Serial.println("Invalid. Send 0, 1, 2 or 3."); } } // Sensor modes refresh every 2 seconds if (currentMode == 1 || currentMode == 2 || currentMode == 3) { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); if (isnan(humidity) || isnan(temperature)) { Serial.println("DHT11 read error!"); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(10, 35, "Sensor error!"); u8g2.sendBuffer(); delay(2000); return; } if (currentMode == 1) { showHumidity(humidity); Serial.print("Humidity: "); Serial.print(humidity, 1); Serial.println(" %"); } else if (currentMode == 2) { showTempC(temperature); Serial.print("Temperature: "); Serial.print(temperature, 1); Serial.println(" C"); } else if (currentMode == 3) { showTempF(temperature); float f = (temperature * 9.0 / 5.0) + 32.0; Serial.print("Temperature: "); Serial.print(f, 1); Serial.println(" F"); } delay(2000); } }