#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DHTPIN 19 // Pin which is connected to the DHT sensor.
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* nama = "Muhammad Rifqi Rajwa";
const char* nim = "210536615229";
const char* kelas = "IoT 2";
bool connected = false;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200); // UTC +7 (7 hours * 60 minutes * 60 seconds)
void setup() {
Serial.begin(9600);
delay(1000); // Delay for Serial Monitor to open
// Initialize the OLED display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000); // Pause for 2 seconds
// Display name, NIM, and class
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println(nama);
display.println(nim);
display.println(kelas);
display.display();
delay(3000); // Pause for 3 seconds before connecting to WiFi
// Connect to WiFi
Serial.println();
Serial.println("Connecting to WiFi");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Connecting to WiFi");
display.display();
connectToWiFi();
}
void loop() {
if (!connected) {
connectToWiFi();
}
if (connected) {
// Update time from NTP server
timeClient.update();
// Read temperature in Celsius
float temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Convert temperature to Fahrenheit and Kelvin
float temperatureFahrenheit = (temperature * 9 / 5) + 32;
float temperatureKelvin = temperature + 273.15;
// Displaying information on OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Waktu: ");
display.println(timeClient.getFormattedTime());
display.print("Tanggal: ");
display.print(timeClient.getDay()); // Menampilkan tanggal
display.print("/");
//display.print(timeClient.getMonth()); // Menampilkan bulan
display.print("/");
// display.println(timeClient.getYear()); // Menampilkan tahun
display.print("Temperature: ");
display.print(temperature);
display.println(" C");
display.print(temperatureFahrenheit);
display.println(" F");
display.print(temperatureKelvin);
display.println(" K");
display.display();
delay(2000); // Update every 2 seconds
}
}
void connectToWiFi() {
WiFi.begin(ssid, password);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 10) {
delay(1000);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
connected = true;
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
display.clearDisplay();
display.setCursor(0, 0);
display.println("WiFi Connected");
display.display();
// Initialize NTP client
timeClient.begin();
} else {
Serial.println("");
Serial.println("WiFi connection failed. Please check your credentials or router.");
display.clearDisplay();
display.setCursor(0, 0);
display.println("WiFi Connection Failed");
display.display();
}
}