#include <DHT.h>
// #include <ESP32Servo.h> // Uncomment this when running on real ESP32-S3 hardware
// ---------------- PIN MAP (from your JSON) ----------------
#define PIN_SOIL_ADC 4
#define PIN_PRESS_ADC 5
#define PIN_DHT 6
// Servo replacement (simulation)
#define PIN_SERVO_SIM 2 // LED used instead of servo in Wokwi
// Relays
#define PIN_RLY_SPRAY 21
#define PIN_RLY_IRR 20
#define PIN_RLY_MOTOR_L 11
#define PIN_RLY_MOTOR_R 12
#define PIN_RLY_WEED 3
#define PIN_RLY_SPARE 14
// Line sensors (slide switch)
#define PIN_LINE_L 7
#define PIN_LINE_C 8
#define PIN_LINE_R 9
// Status LEDs
#define PIN_LED_TASK 2
#define PIN_LED_NET 10
// Mode switch
#define PIN_MODE 15
// DHT
#define DHTTYPE DHT22
DHT dht(PIN_DHT, DHTTYPE);
// === Servo real hardware ===
// Servo sowServo; // Uncomment this for real ESP32-S3
void setup() {
Serial.begin(115200);
dht.begin();
// Relays
pinMode(PIN_RLY_SPRAY, OUTPUT);
pinMode(PIN_RLY_IRR, OUTPUT);
pinMode(PIN_RLY_MOTOR_L, OUTPUT);
pinMode(PIN_RLY_MOTOR_R, OUTPUT);
pinMode(PIN_RLY_WEED, OUTPUT);
pinMode(PIN_RLY_SPARE, OUTPUT);
// Mode + line sensors
pinMode(PIN_MODE, INPUT_PULLUP);
pinMode(PIN_LINE_L, INPUT_PULLUP);
pinMode(PIN_LINE_C, INPUT_PULLUP);
pinMode(PIN_LINE_R, INPUT_PULLUP);
// Status LEDs
pinMode(PIN_LED_TASK, OUTPUT);
pinMode(PIN_LED_NET, OUTPUT);
// === Servo real hardware ===
// sowServo.attach(18); // GPIO18 for real servo signal
// sowServo.write(90); // Start at center position
// === Servo simulation ===
pinMode(PIN_SERVO_SIM, OUTPUT);
digitalWrite(PIN_SERVO_SIM, LOW);
Serial.println("AgriBot simulation started...");
}
void loop() {
// Read soil & pressure (from pots)
int soil = analogRead(PIN_SOIL_ADC);
int press = analogRead(PIN_PRESS_ADC);
float h = dht.readHumidity();
float t = dht.readTemperature();
int mode = digitalRead(PIN_MODE);
Serial.print("Soil: "); Serial.print(soil);
Serial.print(" Pressure: "); Serial.print(press);
Serial.print(" Temp: "); Serial.print(t);
Serial.print(" Hum: "); Serial.println(h);
// === Servo simulation ===
// Blink LED instead of rotating servo
digitalWrite(PIN_SERVO_SIM, HIGH);
delay(200);
digitalWrite(PIN_SERVO_SIM, LOW);
// === Example relay control ===
if (soil < 2000) {
digitalWrite(PIN_RLY_IRR, HIGH); // Turn irrigation ON
} else {
digitalWrite(PIN_RLY_IRR, LOW); // Turn irrigation OFF
}
if (press > 3000) {
digitalWrite(PIN_RLY_SPRAY, HIGH); // Spray ON
} else {
digitalWrite(PIN_RLY_SPRAY, LOW); // Spray OFF
}
// Mode check
if (mode == LOW) {
Serial.println("Manual Mode");
// TODO: Add WiFi/App control here
} else {
Serial.println("Line Following Mode");
// TODO: Add line following logic here
}
delay(1000);
}