#include #include #include #include #include #include struct Config { char ssid[32]; char password[32]; char ep[32]; char port[32]; }; Config config; const char *cfg = "/etc/config.json"; TFT_eSPI tft = TFT_eSPI(); void setup() { Serial.begin(115200); delay(1000); Serial.println("Starting setup..."); // TFT initialization tft.begin(); tft.setRotation(1); tft.fillScreen(TFT_BLACK); tft.setCursor(0, 0); tft.setTextFont(1); tft.setTextSize(2); tft.setTextColor(TFT_WHITE, TFT_BLACK); Serial.println("TFT initialized."); // SD card initialization if (!SD.begin()) { Serial.println("SD card mount failure"); return; } Serial.println("SD card initialized successfully"); tft.println("SD card initialized successfully"); // Load configuration from SD card File file = SD.open(cfg); if (!file) { Serial.println("Configuration file not found"); tft.println("Config file not found"); } else { Serial.println("Configuration file found"); loadConfiguration(config); file.close(); } // Attempt WiFi connection connectToWiFi(); } void loop() { // Placeholder for main loop code } void connectToWiFi() { Serial.println("Attempting to connect to WiFi..."); tft.println("Attempting to connect to WiFi..."); WiFi.begin(config.ssid, config.password); unsigned long startTime = millis(); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); tft.print("."); if (millis() - startTime > 20000) { // 20 seconds timeout Serial.println("Failed to connect to WiFi"); tft.println("Failed to connect to WiFi"); return; } } Serial.println(); Serial.println("Connected to WiFi"); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); tft.println(); tft.println("Connected to WiFi"); tft.print("IP: "); tft.println(WiFi.localIP()); } void loadConfiguration(Config &config) { File file = SD.open(cfg, FILE_READ); if (!file) { Serial.println("Failed to open config file"); return; } StaticJsonDocument<512> doc; DeserializationError error = deserializeJson(doc, file); if (error) { Serial.print("Failed to parse config file: "); Serial.println(error.c_str()); return; } strlcpy(config.ssid, doc["SSID"] | "", sizeof(config.ssid)); strlcpy(config.password, doc["pass"] | "", sizeof(config.password)); strlcpy(config.ep, doc["ep"] | "", sizeof(config.ep)); strlcpy(config.port, doc["port"] | "", sizeof(config.port)); Serial.println("Configuration loaded:"); Serial.print("SSID: "); Serial.println(config.ssid); Serial.print("Password: "); Serial.println(config.password); Serial.print("Endpoint: "); Serial.println(config.ep); Serial.print("Port: "); Serial.println(config.port); }