#include <WiFi.h>
#include <HTTPClient.h>
#include "DHTesp.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DHT_PIN 15
#define LED_WIFI 2
#define LED_SEND 4
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHTesp dht;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String apiKey = "D9GKLDPFZSR9GVLZ";
unsigned long lastSend = 0;
const long interval = 2000;
void setup() {
Serial.begin(115200);
pinMode(LED_WIFI, OUTPUT);
pinMode(LED_SEND, OUTPUT);
dht.setup(DHT_PIN, DHTesp::DHT22);
Wire.begin(21, 22);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED gagal");
while(true);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nWiFi Connected!");
}
void loop() {
// Status WiFi LED
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(LED_WIFI, HIGH);
} else {
digitalWrite(LED_WIFI, LOW);
}
if (millis() - lastSend >= interval) {
lastSend = millis();
TempAndHumidity data = dht.getTempAndHumidity();
float suhu = data.temperature;
float hum = data.humidity;
int httpResponseCode = 0;
String statusKirim = "Gagal";
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://api.thingspeak.com/update?api_key=" + apiKey +
"&field1=" + String(suhu) +
"&field2=" + String(hum);
http.begin(url);
httpResponseCode = http.GET();
Serial.print("HTTP Response: ");
Serial.println(httpResponseCode);
if (httpResponseCode > 0) {
statusKirim = "Berhasil";
// LED kirim berkedip
digitalWrite(LED_SEND, HIGH);
delay(200);
digitalWrite(LED_SEND, LOW);
} else {
Serial.println("Error mengirim data!");
}
http.end();
}
// Update OLED
display.clearDisplay();
display.setCursor(0,0);
display.println("Monitoring IoT");
display.setCursor(0,15);
display.print("Temp: ");
display.print(suhu);
display.println(" C");
display.setCursor(0,25);
display.print("Hum : ");
display.print(hum);
display.println(" %");
display.setCursor(0,40);
display.print("WiFi: ");
if (WiFi.status() == WL_CONNECTED) {
display.println("Connected");
} else {
display.println("Disconnected");
}
display.setCursor(0,50);
display.print("Send: ");
display.println(statusKirim);
display.display();
}
}