aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2024-03-15 00:31:12 +0100
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2024-03-15 00:31:12 +0100
commitbc8e3137124a3fa54ba7eefc87cf0d235cba5a32 (patch)
tree033674ef3662440ee427704f43167016853aa3af
parentfa438d87a8bcd46a1b66eb1f9371aa372dc253ff (diff)
downloadremote-wheels-bc8e3137124a3fa54ba7eefc87cf0d235cba5a32.tar.gz
remote-wheels-bc8e3137124a3fa54ba7eefc87cf0d235cba5a32.zip
Add WiFi configuration
-rw-r--r--remote-wheels.ino167
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();
}