aboutsummaryrefslogtreecommitdiff
path: root/remote-wheels.ino
blob: 1822fdc048ebb89a6383f6b8b2aad63f7dec52a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#include <EEPROM.h>
#include <ESP8266WiFi.h>

#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();
}