wifi utils setup

This commit is contained in:
richonguzman
2023-06-06 11:21:59 -04:00
parent 77375b0913
commit 2aee9f582d
9 changed files with 159 additions and 79 deletions
+2 -9
View File
@@ -13,15 +13,8 @@
"Latitude": -33.0312492,
"Longitude": -71.5796215
}
]
},
"network": {
"DHCP": false,
"ip": "192.168.0.50",
"subnet": "255.255.255.0",
"gateway": "192.168.0.1",
"dns1": "8.8.8.8",
"dns2": "8.8.4.4"
],
"checkInterval": 30
},
"aprs_is": {
"passcode": "23201",
+14 -47
View File
@@ -4,19 +4,23 @@
#include <vector>
#include "pins_config.h"
#include "igate_config.h"
//
//#include "igate_config.h"
//
#include "configuration.h"
#include "display.h"
#include "lora_utils.h"
#include "wifi_utils.h"
#include "utils.h"
#include <AsyncTCP.h>
/*#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
#include <AsyncElegantOTA.h>*/
#define VERSION "2023.06.06"
WiFiClient espClient;
AsyncWebServer server(80);
//AsyncWebServer server(80);
String ConfigurationFilePath = "/igate_conf.json";
Configuration Config(ConfigurationFilePath);
@@ -25,7 +29,7 @@ static bool beacon_update = true;
unsigned long previousWiFiMillis = 0;
static uint32_t lastRxTxTime = millis();
static int myWiFiAPIndex = 0;
int myWiFiAPIndex = 0;
int myWiFiAPSize = Config.wifiAPs.size();
WiFi_AP *currentWiFi = &Config.wifiAPs[myWiFiAPIndex];
bool statusAfterBoot = Config.statusAfterBoot;
@@ -35,44 +39,6 @@ std::vector<String> lastHeardStation_temp;
String firstLine, secondLine, thirdLine, fourthLine, iGateLatitude, iGateLongitude;
/*void setup_wifi() {
int status = WL_IDLE_STATUS;
Serial.print("\nConnecting to WiFi '"); Serial.print(currentWiFi->ssid); Serial.print("' ");
show_display("", "Connecting to Wifi:", currentWiFi->ssid + " ...", 0);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
unsigned long start = millis();
/*if (Config.network.DHCP) {
WiFi.setHostname(Config.callsign.c_str());
if (!WiFi.config(Config.network.ip, Config.network.gateway, Config.network.subnet, Config.network.dns1, Config.network.dns2)) {
Serial.println("STA Failed to configure");
}
//WiFi.config(Config.network.ip, Config.network.gateway, Config.network.subnet, Config.network.dns1, Config.network.dns2);
}
WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str());
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
if ((millis() - start) > 15000){
if(myWiFiAPIndex >= (myWiFiAPSize-1)) {
myWiFiAPIndex = 0;
} else {
myWiFiAPIndex++;
}
currentWiFi = &Config.wifiAPs[myWiFiAPIndex];
start = millis();
Serial.print("\nConnect to WiFi '"); Serial.print(currentWiFi->ssid); Serial.println("' ...");
show_display("", "Connect to Wifi:", currentWiFi->ssid + " ...", 0);
WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str());
}
}
Serial.print("Connected as ");
Serial.println(WiFi.localIP());
}*/
void APRS_IS_connect(){
int count = 0;
String aprsauth;
@@ -341,16 +307,17 @@ void setup() {
setup_display();
Serial.println("\nStarting iGate: " + Config.callsign + " Version: " + String(VERSION));
show_display(" LoRa APRS iGate", " Richonguzman", " -- CD2RXU --", " " VERSION, 4000);
setup_wifi();
WIFI_Utils::setup();
//setup_wifi();
btStop();
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
/*server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(200, "text/plain", "Hi! I am ESP32.");
});
AsyncElegantOTA.begin(&server); // Start ElegantOTA
server.begin();
Serial.println("HTTP server started");
Serial.println("HTTP server started");*/
LoRaUtils::setup();
iGateLatitude = create_lat_aprs(currentWiFi->latitude);
@@ -365,7 +332,7 @@ void loop() {
fourthLine = "";
unsigned long currentWiFiMillis = millis();
if ((WiFi.status() != WL_CONNECTED) && (currentWiFiMillis - previousWiFiMillis >= 30000)) {
if ((WiFi.status() != WL_CONNECTED) && (currentWiFiMillis - previousWiFiMillis >= currentWiFi->checkInterval*1000)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
+66
View File
@@ -0,0 +1,66 @@
#include "configuration.h"
Configuration::Configuration(const String &filePath) {
_filePath = filePath;
if (!SPIFFS.begin(false)) {
Serial.println("SPIFFS Mount Failed");
return;
}
readFile(SPIFFS, _filePath.c_str());
}
void Configuration::readFile(fs::FS &fs, const char *fileName) {
StaticJsonDocument<1536> data;
File configFile = fs.open(fileName, "r");
DeserializationError error = deserializeJson(data, configFile);
if (error) {
Serial.println("Failed to read file, using default configuration");
}
JsonArray WiFiArray = data["wifi"]["AP"];
for (int i = 0; i < WiFiArray.size(); i++) {
WiFi_AP wifiap;
wifiap.ssid = WiFiArray[i]["SSID"].as<String>();
wifiap.password = WiFiArray[i]["Password"].as<String>();
wifiap.latitude = WiFiArray[i]["Latitude"].as<double>();
wifiap.longitude = WiFiArray[i]["Longitude"].as<double>();
wifiap.checkInterval = data["wifi"]["checkInterval"].as<int>();
wifiAPs.push_back(wifiap);
}
callsign = data["callsign"].as<String>();
comment = data["comment"].as<String>();
beaconInterval = data["other"]["beaconInterval"].as<int>();
statusAfterBoot = data["other"]["statusAfterBoot"].as<bool>();
defaultStatus = data["other"]["defaultStatus"].as<String>();
aprs_is.passcode = data["aprs_is"]["passcode"].as<String>();
aprs_is.server = data["aprs_is"]["server"].as<String>();
aprs_is.port = data["aprs_is"]["port"].as<int>();
aprs_is.softwareName = data["aprs_is"]["softwareName"].as<String>();
aprs_is.softwareVersion = data["aprs_is"]["softwareVersion"].as<String>();
aprs_is.reportingDistance = data["aprs_is"]["reportingDistance"].as<int>();
loramodule.enableTx = data["lora"]["enableTx"].as<bool>();
loramodule.frequency = data["lora"]["frequency"].as<long>();
loramodule.spreadingFactor = data["lora"]["spreadingFactor"].as<int>();
loramodule.signalBandwidth = data["lora"]["signalBandwidth"].as<long>();
loramodule.codingRate4 = data["lora"]["codingRate4"].as<int>();
loramodule.power = data["lora"]["power"].as<int>();
display.alwaysOn = data["display"]["alwaysOn"].as<bool>();
display.keepLastPacketOnScreen = data["display"]["keepLastPacketOnScreen"].as<bool>();
display.timeout = data["display"]["timeout"].as<int>();
configFile.close();
}
void Configuration::validateConfigFile(String currentBeaconCallsign) {
if (currentBeaconCallsign == "NOCALL-10") {
Serial.println("Change Callsign in /data/wx_report_config.json");
while (true) {
delay(1000);
}
}
}
+69
View File
@@ -0,0 +1,69 @@
#ifndef CONFIGURATION_H_
#define CONFIGURATION_H_
#include <Arduino.h>
#include <SPIFFS.h>
#include <FS.h>
#include <ArduinoJson.h>
#include <vector>
class WiFi_AP {
public:
String ssid;
String password;
double latitude;
double longitude;
int checkInterval;
};
class APRS_IS {
public:
String passcode;
String server;
int port;
String softwareName;
String softwareVersion;
int reportingDistance;
};
class LoraModule {
public:
bool enableTx;
long frequency;
int spreadingFactor;
long signalBandwidth;
int codingRate4;
int power;
};
class Display {
public:
bool alwaysOn;
bool keepLastPacketOnScreen;
int timeout;
};
class Configuration {
public:
String callsign;
String comment;
int beaconInterval;
bool statusAfterBoot;
String defaultStatus;
std::vector<WiFi_AP> wifiAPs;
APRS_IS aprs_is;
LoraModule loramodule;
Display display;
Configuration(const String &filePath);
void validateConfigFile(String currentBeaconCallsign);
private:
Configuration() {}; // Hide default constructor
void readFile(fs::FS &fs, const char *fileName) ;
String _filePath;
};
#endif
-18
View File
@@ -15,16 +15,6 @@ public:
double longitude;
};
class Network {
public:
bool DHCP;
String ip;
String subnet;
String gateway;
String dns1;
String dns2;
};
class APRS_IS {
public:
int passcode;
@@ -61,7 +51,6 @@ public:
bool statusAfterBoot;
String defaultStatus;
std::vector<WiFi_AP> wifiAPs;
Network network;
APRS_IS aprs_is;
LoraModule loramodule;
Display display;
@@ -103,13 +92,6 @@ private:
statusAfterBoot = data["other"]["statusAfterBoot"].as<bool>();
defaultStatus = data["other"]["defaultStatus"].as<String>();
network.DHCP = data["network"]["DHCP"].as<bool>();
network.ip = data["network"]["ip"].as<String>();
network.subnet = data["network"]["subnet"].as<String>();
network.gateway = data["network"]["gateway"].as<String>();
network.dns1 = data["network"]["dns1"].as<String>();
network.dns2 = data["network"]["dns2"].as<String>();
aprs_is.passcode = data["aprs_is"]["passcode"].as<int>();
aprs_is.server = data["aprs_is"]["server"].as<String>();
aprs_is.port = data["aprs_is"]["port"].as<int>();
+2 -4
View File
@@ -1,5 +1,6 @@
#include <LoRa.h>
#include "igate_config.h"
//#include "igate_config.h"
#include "configuration.h"
#include "display.h"
extern Configuration Config;
@@ -39,7 +40,6 @@ void sendNewPacket(const String &typeOfMessage, const String &newPacket) {
Serial.println(newPacket);
}
/*String receivePacket() {
String loraPacket;
int packetSize = LoRa.parsePacket(); // Listening for LoRa Packets
@@ -53,6 +53,4 @@ void sendNewPacket(const String &typeOfMessage, const String &newPacket) {
return loraPacket;
}*/
}
+1
View File
@@ -8,4 +8,5 @@ void sendNewPacket(const String &typeOfMessage, const String &newPacket);
//String receivePacket();
}
#endif
+2 -1
View File
@@ -1,6 +1,7 @@
#include <WiFi.h>
#include <Arduino.h>
#include <igate_config.h>
//#include <igate_config.h>
#include "configuration.h"
#include "utils.h"
extern WiFiClient espClient;
+3
View File
@@ -1,6 +1,7 @@
#include <WiFi.h>
#include "wifi_utils.h"
#include "configuration.h"
#include "display.h"
extern Configuration Config;
extern WiFi_AP *currentWiFi;
@@ -15,6 +16,7 @@ void setup() {
WiFi.disconnect();
delay(500);
unsigned long start = millis();
show_display("", "Connecting to Wifi:", currentWiFi->ssid + " ...", 0);
Serial.print("\nConnecting to '"); Serial.print(currentWiFi->ssid); Serial.println("' WiFi ...");
WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str());
while (WiFi.status() != WL_CONNECTED) {
@@ -29,6 +31,7 @@ void setup() {
currentWiFi = &Config.wifiAPs[myWiFiAPIndex];
start = millis();
Serial.print("\nConnect to WiFi '"); Serial.print(currentWiFi->ssid); Serial.println("' ...");
show_display("", "Connect to Wifi:", currentWiFi->ssid + " ...", 0);
WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str());
}
}