mirror of
https://github.com/richonguzman/LoRa_APRS_iGate.git
synced 2026-08-07 17:32:47 +02:00
wifi utils setup
This commit is contained in:
@@ -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
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
@@ -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;
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -8,4 +8,5 @@ void sendNewPacket(const String &typeOfMessage, const String &newPacket);
|
||||
//String receivePacket();
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
+2
-1
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user