-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConnectivity.cpp
60 lines (56 loc) · 1.73 KB
/
Connectivity.cpp
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
#include "Connectivity.h"
#include <ESP8266WiFi.h>
#include "Files.h"
#include "Logging.h"
#include "Config.h"
void configureNetwork() {
log("Configuring network...");
char* ssid = readFromFile("ssid");
char* password = readFromFile("password");
wifi_set_sleep_type(NONE_SLEEP_T);
if (strlen(ssid) == 0 || strlen(password) == 0) {
startAP();
} else {
log("Attempting to connect...");
char* roomName = readFromFile("room_name");
char* customHostname = (char*) malloc(sizeof(char) * 64);
sprintf_P(customHostname, PSTR("ESP8266-SimpleHome-%s"), SAVED_OR_DEFAULT_ROOM_NAME(roomName));
WiFi.mode(WIFI_STA);
WiFi.hostname(customHostname);
WiFi.begin(ssid, password);
free(roomName);
free(customHostname);
for (uint8_t i = 0; i < 50 && WiFi.status() != WL_CONNECTED; i++) delay(100);
if (WiFi.status() != WL_CONNECTED) {
log("Failed to connect");
WiFi.disconnect();
startAP();
} else {
#ifdef LOGGING
char* logMessage = (char*) malloc(sizeof(char) * 64);
sprintf(logMessage, "Connected to %s", WiFi.SSID());
log(logMessage);
sprintf(logMessage, "IP address: %s", WiFi.localIP().toString().c_str());
log(logMessage);
sprintf(logMessage, "Signal strength (RSSI): %ld dBm\n", WiFi.RSSI());
log(logMessage);
free(logMessage);
#endif
}
}
free(ssid);
free(password);
}
void startAP() {
log("Starting access point...");
IPAddress apIP(192, 168, 1, 1);
IPAddress netMsk(255, 255, 255, 0);
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, netMsk);
WiFi.softAP(AP_SSID, AP_PASSWORD);
}
uint8_t RSSIToPercent(long rssi) {
if (rssi >= -50) return 100;
else if (rssi <= -100) return 0;
else return (rssi + 100) * 2;
}