#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHTesp.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define DHT_PIN 18
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 7 * 3600
#define UTC_OFFSET_DST 0
// Class
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHTesp dht;
// Variabel
float temperature, humadity;
float celcius, fahrenheit, kelvin;
// Function
void identity_display();
void wifi_connect();
void ntp_update();
void ntp_display(); void dht_init(); void dht_read();
void convert_temperature(); void oled_init();
void oled_display(); void spinner();
void setup() { Serial.begin(9600); oled_init(); identity_display(); wifi_connect(); ntp_update();
}
void loop() { ntp_display();
}
void identity_display() { oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(SSD1306_WHITE); oled.setCursor(0, 0); oled.println("Nama :"); oled.setCursor(0, 10); oled.println("Regina Juniantika"); oled.setCursor(0, 20); oled.println("NIM :"); oled.setCursor(0, 30); oled.println("E41210026"); oled.setCursor(0, 40); oled.println("Kelas :"); oled.setCursor(0, 50); oled.println("IoT1"); oled.display();
delay(2000);
}
void wifi_connect() { oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(SSD1306_WHITE); oled.setCursor(0, 0); oled.println("Connecting to "); oled.setCursor(0, 10); oled.println("WiFi"); oled.display();
WiFi.begin("Wokwi-GUEST", "", 6); while (WiFi.status() != WL_CONNECTED) {
delay(250); spinner();
}
}
void ntp_update() {
oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(SSD1306_WHITE); oled.setCursor(0, 0); oled.println("Online"); oled.setCursor(0, 10); oled.println("Updating time..."); oled.display();
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void ntp_display() { struct tm timeinfo; oled.clearDisplay(); oled.setCursor(0, 0); oled.println("Online");
if (!getLocalTime(&timeinfo)) { oled.setCursor(0, 10); oled.println("Connection Err"); oled.display();
return;
}
oled.setCursor(64, 0); oled.println(&timeinfo, "%H:%M:%S");
oled.setCursor(0, 10); oled.println(&timeinfo, "%d/%m/%Y WIB"); oled.display();
}
void dht_init() {
dht.setup(DHT_PIN, DHTesp::DHT22);
}
void dht_read() {
TempAndHumidity data = dht.getTempAndHumidity(); temperature = data.temperature;
humadity = data.humidity;
}
void convert_temperature() { celcius = temperature;
fahrenheit = (9 / 5 * celcius) + 32; kelvin = celcius + 273.15;
}
void oled_init() {
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("failed to start SSD1306 OLED")); while (1);
}
}
void oled_display() { oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(SSD1306_WHITE); oled.setCursor(0, 0); oled.println("CELCIUS: "); oled.setCursor(0, 10); oled.println(celcius);
oled.setCursor(0, 20); oled.println("FAHRENHAIT: "); oled.setCursor(0, 30); oled.println(fahrenheit); oled.setCursor(0, 40); oled.println("KELVIN: "); oled.setCursor(0, 50); oled.println(kelvin); oled.setCursor(64, 0); oled.println("HUMADITY: "); oled.setCursor(64, 10); oled.println(humadity); oled.display();
}
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb"; oled.setCursor(92, 10); oled.println(glyphs[counter++]); oled.display();
if (counter == strlen(glyphs)) { counter = 0;
}
}