diff options
-rw-r--r-- | remote-wheels.ino | 167 |
1 files changed, 149 insertions, 18 deletions
diff --git a/remote-wheels.ino b/remote-wheels.ino index 816a412..89d7cc3 100644 --- a/remote-wheels.ino +++ b/remote-wheels.ino @@ -1,7 +1,17 @@ +#include <EEPROM.h> +#include <ESP8266WiFi.h> + +#define SSID_SIZE 64 +#define PWD_SIZE 64 +#define EEPROM_SIZE SSID_SIZE+PWD_SIZE +#define MY_BLUE_LED_PIN 2 + String VERSION = "0.0.0-alpha.0"; String wifi_ssid = ""; String wifi_password = ""; +int init_config = 0; + void printBanner() { Serial.println(" ____ _ __ ___ _ "); Serial.println("| _ \\ ___ _ __ ___ ___ | |_ ___ \\ \\ / / |__ ___ ___| |___ "); @@ -11,9 +21,72 @@ void printBanner() { 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(MY_BLUE_LED_PIN, HIGH); + } else { + digitalWrite(MY_BLUE_LED_PIN, 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."); @@ -28,37 +101,89 @@ void printHelp() { 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.println(); + + 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() { - if (Serial.available() <= 0) return; - - String cmd = readString(); - - if (cmd.equals("aiuto")) { - printHelp(); - } else if (cmd.equals("set ssid")) { - Serial.println("Inserisci SSID"); - Serial.readString(); - wifi_ssid = readString(); - Serial.println("OK."); - } else if (cmd.equals("set password")) { - } else if (cmd.equals("print ssid")) { - } else if (cmd.equals("print password")) { - } else if (cmd.equals("print config")) { - printConfig(); + String cmd = readCommand(); + if (cmd.equals("config")) { + initConfig(); + } else if (cmd.equals("connetti")) { + connectWifi(); } } @@ -66,11 +191,17 @@ void setup() { delay(3000); Serial.begin(9600); - printBanner(); + EEPROM.begin(EEPROM_SIZE); + + loadConfig(); + connectWifi(); + + pinMode(MY_BLUE_LED_PIN, OUTPUT); } void loop() { parseCommand(); + checkWifiStatus(); } |