#include <Arduino.h>
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <ArduinoJson.h> // ArduinoJSON library for parsing JSON
// Replace with your network credentials
const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";
// Create an instance of the web server
AsyncWebServer server(80);
// Define the pins based on the JSON configuration
const int servoStartAngle = 0; // Default start angle for servos
const int relayStartState = LOW; // Default start state for relays
const int ledStartState = 0; // Default start state for LEDs (off)
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Load pins configuration from "pins.json"
File configFile = SPIFFS.open("/pins.json", "r");
if (!configFile) {
Serial.println("Failed to open pins.json");
return;
}
// Parse JSON
StaticJsonDocument<1024> doc;
DeserializationError error = deserializeJson(doc, configFile);
if (error) {
Serial.println("Error parsing pins.json");
return;
}
// Set up pins based on JSON data
for (const auto& entry : doc.as<JsonObject>()) {
const String& label = entry.key();
const JsonObject& pinData = entry.value();
int pinNumber = pinData["pin"];
String type = pinData["type"];
pinMode(pinNumber, OUTPUT);
if (type == "servo") {
int startAngle = pinData["start"] | servoStartAngle;
int actionAngle = pinData["action"];
// Set up servo logic here
// ...
} else if (type == "relay") {
int startState = pinData["start"] | relayStartState;
// Set up relay logic here
// ...
} else if (type == "LED") {
int startState = pinData["start"] | ledStartState;
// Set up LED logic here
// ...
}
// Set up URL handlers for each label
server.on("/" + label, HTTP_GET, {
// Handle requests for this label's URL
// Implement logic to trigger actions based on type
// ...
});
}
configFile.close();
// Start the server
server.begin();
}
void loop() {
// Your main loop logic here
}