#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_MPU6050.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"
#define DHTPIN 4 // Pin DHT22
#define DHTTYPE DHT22
#define MOISTURE_PIN 34 // Pin Soil Moisture
#define RELAY_PIN 5 // Pin Relay (Pompa)
// SSD1306 OLED Display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHT dht(DHTPIN, DHTTYPE);
// MPU6050
Adafruit_MPU6050 mpu;
// Wi-Fi Credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak API
const char* serverName = "http://api.thingspeak.com/update";
const char* apiKey = "55010CAC4JCMFECE"; // Masukkan API key dari Thingspeak
void setup() {
Serial.begin(115200);
// Wi-Fi setup
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to Wi-Fi...");
}
Serial.println("Connected to Wi-Fi");
// Sensor setup
dht.begin();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
// OLED setup
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println("SSD1306 allocation failed!");
while (1);
}
display.display();
delay(2000);
display.clearDisplay();
// MPU6050 setup
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1);
}
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("MPU6050 ready!");
}
void loop() {
// Read sensor data
float soilMoisture = analogRead(MOISTURE_PIN) / 4095.0 * 100;
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Read MPU6050 data
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Log sensor data
Serial.print("Soil Moisture: ");
Serial.print(soilMoisture);
Serial.println("%");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println("°C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println("%");
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(" m/s², Y: ");
Serial.print(a.acceleration.y);
Serial.print(" m/s², Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s²");
// Control pump
if (soilMoisture < 30) {
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Pompa Aktif!");
} else {
digitalWrite(RELAY_PIN, LOW);
Serial.println("Pompa Mati.");
}
// Display data on OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Soil Moisture: ");
display.print(soilMoisture);
display.println("%");
display.print("Temp: ");
display.print(temperature);
display.println(" C");
display.print("Humidity: ");
display.print(humidity);
display.println(" %");
display.print("Accel X: ");
display.print(a.acceleration.x);
display.println(" m/s²");
display.print("Accel Y: ");
display.print(a.acceleration.y);
display.println(" m/s²");
display.print("Accel Z: ");
display.print(a.acceleration.z);
display.println(" m/s²");
display.display();
// Send data to ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(serverName) + "?api_key=" + apiKey +
"&field1=" + String(soilMoisture) +
"&field2=" + String(temperature) +
"&field3=" + String(humidity) +
"&field4=" + String(a.acceleration.x) +
"&field5=" + String(a.acceleration.y) +
"&field6=" + String(a.acceleration.z);
http.begin(url);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("Data sent. Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error sending data. HTTP code: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("Wi-Fi disconnected!");
}
delay(5000); // Delay 5 detik
}