#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include "time.h"
#include "DHTesp.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 7 * 3600;
const int daylightOffset_sec = 3600;
const int DHT_PIN = 34;
DHTesp dhtSensor;
int nilaiCelcius;
float nilaiFahrenheit;
float nilaiKelvin;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Menampilkan Identitas
showIdentitas();
// Koneksi ke WIFI WOKWI
connectWifi();
// Konfigurasu NTP
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
delay(2000);
}
void loop() {
printLocalTime();
delay(10);
}
void showIdentitas(){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("NAMA :");
display.setCursor(0, 10);
display.println("NOVATA DWI WAHYUDI");
display.setCursor(0, 23);
display.println("NIM :");
display.setCursor(0, 33);
display.println("C411210006");
display.setCursor(0, 46);
display.println("KELAS :");
display.setCursor(0, 56);
display.println("IOT-2");
display.display();
delay(2000);
}
void connectWifi(){
display.clearDisplay();
display.setCursor(0, 0);
display.println("Connecting to");
display.setCursor(0, 15);
display.println("WiFi");
display.setCursor(25,15);
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
// Serial.print(".");
display.print(".");
display.display();
}
delay(500);
display.clearDisplay();
display.setCursor(0, 0);
display.println("Online -- Connected");
display.setCursor(0, 15);
display.println("Updating Time...");
display.display();
}
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
display.clearDisplay();
display.setTextSize(1.5);
display.setCursor(0,10);
display.println("----------------------");
display.setCursor(0,20);
display.println("ONLINE");
// Waktu Jam:Menit:Detik
display.setCursor(50,20);
display.println(&timeinfo, "%d/%B/%Y");
// Tanggal,Bulan,Tahun
display.setCursor(30,35);
display.println(&timeinfo, "%H:%M:%S WIB");
display.setCursor(0,47);
display.println("---------------------");
display.display();
}
void konversiSuhu(){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
nilaiCelcius = data.temperature;
//Operasi aritmatika untuk konversi suhu
nilaiFahrenheit = 9.0/5.0 * nilaiCelcius + 32;
nilaiKelvin = nilaiCelcius + 273;
// Menampilkan Nilai di OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Celcius");
display.setCursor(65, 0 );
display.println("Humaditiy");
display.setCursor(0, 15);
display.println(String(data.temperature, 1) + " C");
display.setCursor(65, 15);
display.println(String(data.humidity, 1));
display.setCursor(0, 40);
display.println("Fahrenheit");
display.setCursor(65, 40);
display.println("Kelvin");
display.setCursor(0, 55);
display.println(String(nilaiFahrenheit) + " F"); //
display.setCursor(65, 55);
display.println(String(nilaiKelvin) + " K"); //
display.display();
delay(2000);
}