// ============ Include Library ===================
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHTesp.h"
// ============ End Include Library ===================
// ============ Define Pin ===================
#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
// ============ End Define Pin ==============
// ============ Class ===================
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHTesp dht;
// ============ End Class ===================
// ============ Variabel ===================
float temperature, humadity;
float celcius, fahrenheit, kelvin;
// ============ End Variabel ===================
// ============ 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();
// ============ End Function ===================
void setup() {
Serial.begin(9600);
oled_init();
identity_display();
wifi_connect();
ntp_update();
// dht_init();
}
void loop() {
ntp_display();
// dht_read();
// convert_temperature();
// oled_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("Mohammad Ibnu");
oled.setCursor(0, 20);
oled.println("NIM :");
oled.setCursor(0, 30);
oled.println("20515030111036");
oled.setCursor(0, 40);
oled.println("Kelas :");
oled.setCursor(0, 50);
oled.println("IoT - 3");
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("Fahrenheit: ");
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;
}
}