#include <Arduino.h>
#include <U8g2lib.h> // u8g2 library for drawing on OLED display - needs to be installed in Arduino IDE first
#include <Wire.h> // wire library for IIC communication with the OLED display
#include <DHT.h>
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
char temperature [5];
char humidity [5];
const char DEGREE_SYMBOL[] = { 0xB0, '\0' };
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0); // set the OLED display to 128x64px, HW IIC, no rotation, used in WOKWI
//U8G2_SH1107_128X128_1_HW_I2C u8g2(U8G2_R0); // final display, 128x128px [page buffer, size = 128 bytes], HW IIC connection
// IIC connection of the OLED display and Arduino UNO
// +5V > +5V
// GND > GND
// SCL (serial clock) > A5 or SCL
// SDA (serial data) > A4 or SDA
void setup(void) { // Arduino setup
dht.begin();
Serial.begin(9600);
u8g2.begin();
u8g2.setContrast(255); // set display contrast/brightness
u8g2.enableUTF8Print();
u8g2.setFont(u8g2_font_helvB10_tf);
u8g2.setColorIndex(1);
}
void loop() {
u8g2.firstPage();
do {
draw();
} while( u8g2.nextPage() );
}
void draw(){
readTemperature();
readHumidity();
u8g2.drawFrame(0,0,128,31);
u8g2.drawFrame(0,33,128,31);
u8g2.drawStr( 15, 13, "Temperature");
u8g2.drawStr( 35, 28, temperature);
u8g2.drawUTF8(70, 28, DEGREE_SYMBOL);
u8g2.drawUTF8(76, 28, "C");
u8g2.drawStr(30,46, "Humidity");
u8g2.drawStr( 37, 61, humidity);
u8g2.drawStr(75,61, "%");
}
void readTemperature()
{
float t = dht.readTemperature();
dtostrf(t, 3, 1, temperature);
}
void readHumidity()
{
float h = dht.readHumidity();
dtostrf(h, 3, 1, humidity);
}