#include #include #define SSID_SIZE 64 #define PWD_SIZE 64 #define EEPROM_SIZE SSID_SIZE+PWD_SIZE String VERSION = "0.0.0-alpha.0"; String wifi_ssid = ""; String wifi_password = ""; int init_config = 0; void printBanner() { Serial.println(" ____ _ __ ___ _ "); Serial.println("| _ \\ ___ _ __ ___ ___ | |_ ___ \\ \\ / / |__ ___ ___| |___ "); Serial.println("| |_) / _ \\ '_ ` _ \\ / _ \\| __/ _ \\ \\ \\ /\\ / /| '_ \\ / _ \\/ _ \\ / __|"); Serial.println("| _ < __/ | | | | | (_) | || __/ \\ V V / | | | | __/ __/ \\__ \\"); Serial.println("|_| \\_\\___|_| |_| |_|\\___/ \\__\\___| \\_/\\_/ |_| |_|\\___|\\___|_|___/"); Serial.println("v" + VERSION); Serial.println(); Serial.println("Digita `aiuto` per una lista di comandi."); Serial.println("Se รจ la prima volta che configuri il dispositivo, esegui `init`."); Serial.println(); } void connectWifi() { WiFi.begin(wifi_ssid.c_str(), wifi_password.c_str()); int i = 0; Serial.print("Connessione in corso alla rete WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(1000); i++; if (i == 5) break; Serial.print("."); } Serial.println(); if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi non connesso"); } else { Serial.println("WiFi connesso con IP: " + WiFi.localIP()); } } void checkWifiStatus() { if (WiFi.status() != WL_CONNECTED) { digitalWrite(BUILTIN_LED, HIGH); } else { digitalWrite(BUILTIN_LED, LOW); } } void erase(int from, int to) { for (int i = from ; i < to ; i++) EEPROM.write(i, '\0'); } int writeWord(int address, String str) { delay(10); for (int i = 0; i < str.length(); i++, address++) { EEPROM.write(address, str[i]); } EEPROM.write(address, '\0'); EEPROM.commit(); return address; } String readWord(int address) { String str; char readChar; int i = address; while ((readChar = char(EEPROM.read(i))) != '\0') { delay(10); str += readChar; i++; } return str; } void printHelp() { Serial.println("print|set ssid"); Serial.println(" Visualizza o imposta l'SSID del wifi."); Serial.println(); Serial.println("print|set password"); Serial.println(" Visualizza o imposta la password del wifi."); Serial.println(); Serial.println("print config"); Serial.println(" Visualizza l'attuale configurazione wifi."); Serial.println(); } void loadConfig() { wifi_ssid = readWord(0); wifi_password = readWord(SSID_SIZE + 1); } void printConfig() { Serial.println("Configurazione"); Serial.println(" SSID: <" + wifi_ssid + ">"); Serial.println(" Password: <" + wifi_password + ">"); Serial.print(" EEPROM: <"); Serial.print(EEPROM.length()); Serial.println(">"); Serial.print(" IP: <"); Serial.print(WiFi.localIP()); Serial.println(">"); } String readString() { while (Serial.available() == 0) { } String cmd = Serial.readString(); cmd.trim(); return cmd; } String readCommand() { String cmd = Serial.readString(); cmd.trim(); return cmd; } void initConfig() { printBanner(); String cmd; while (!(cmd = readString()).equals("exit")) { Serial.println("$ " + cmd); if (cmd.equals("aiuto")) { printHelp(); } else if (cmd.equals("set ssid")) { Serial.print("Inserisci SSID: "); wifi_ssid = readString(); Serial.println(wifi_ssid); erase(0, SSID_SIZE); writeWord(0, wifi_ssid); } else if (cmd.equals("set password")) { Serial.print("Inserisci la password: "); wifi_password = readString(); Serial.println(wifi_password); erase(SSID_SIZE + 1, PWD_SIZE); writeWord(SSID_SIZE + 1, wifi_password); } else if (cmd.equals("print ssid")) { } else if (cmd.equals("print password")) { } else if (cmd.equals("print config")) { printConfig(); } else if (cmd.equals("load config")) { loadConfig(); printConfig(); } else if (cmd.equals("init")) { Serial.println("Formattazione della EEPROM..."); erase(0, EEPROM.length()); Serial.println("EEPROM formattata."); } else { Serial.println("Comando sconosciuto."); } Serial.println(); } Serial.println("Esco dalla configurazione."); Serial.println(); } void parseCommand() { String cmd = readCommand(); if (cmd.equals("config")) { initConfig(); } else if (cmd.equals("connetti")) { connectWifi(); } } void setup() { delay(3000); Serial.begin(9600); EEPROM.begin(EEPROM_SIZE); loadConfig(); connectWifi(); pinMode(BUILTIN_LED, OUTPUT); } void loop() { parseCommand(); checkWifiStatus(); }