1.3
This commit is contained in:
parent
d84d26f4b2
commit
8125eb9d02
|
|
@ -20,7 +20,7 @@
|
|||
"aprs_is": {
|
||||
"active": true,
|
||||
"passcode": "23201",
|
||||
"server": "radioaficion.pro",
|
||||
"server": "soam.aprs2.net",
|
||||
"port": 14580,
|
||||
"software_name" : "ESP32_LoRa_iGate",
|
||||
"software_version" : "0.0.9",
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
#include "pins_config.h"
|
||||
#include "igate_config.h"
|
||||
#include "display.h"
|
||||
#include "iGate_config_OLD.h"
|
||||
|
||||
WiFiClient espClient;
|
||||
String ConfigurationFilePath = "/igate_conf.json";
|
||||
|
|
@ -20,7 +19,6 @@ uint32_t lastTxTime = 0;
|
|||
static bool beacon_update = true;
|
||||
unsigned long previousWiFiMillis = 0;
|
||||
static uint32_t lastRxTxTime = millis();
|
||||
//static bool displayEcoMode = true;
|
||||
|
||||
static int myWiFiAPIndex = 1;
|
||||
int myWiFiAPSize = Config.wifiAPs.size();
|
||||
|
|
@ -30,14 +28,28 @@ String firstLine, secondLine, thirdLine, fourthLine;
|
|||
|
||||
void setup_wifi() {
|
||||
int status = WL_IDLE_STATUS;
|
||||
Serial.print("\nConnecting to '"); Serial.print(currentWiFi->ssid); Serial.println("' WiFi ...");
|
||||
Serial.print("\nConnect to WiFi '"); Serial.print(currentWiFi->ssid); Serial.println("' ...");
|
||||
show_display(" ", "Connect to Wifi:", currentWiFi->ssid + " ...", 0);
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.disconnect();
|
||||
delay(100);
|
||||
unsigned long start = millis();
|
||||
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());
|
||||
|
|
@ -88,7 +100,7 @@ String createAPRSPacket(String unprocessedPacket) {
|
|||
int two_dots_position = unprocessedPacket.indexOf(':');
|
||||
callsign_and_path_tracker = unprocessedPacket.substring(3, two_dots_position);
|
||||
payload_tracker = unprocessedPacket.substring(two_dots_position);
|
||||
processedPacket = callsign_and_path_tracker + ",qAO," + Config.callsign + payload_tracker + "\n";
|
||||
processedPacket = callsign_and_path_tracker + ",qAC," + Config.callsign + payload_tracker + "\n";
|
||||
return processedPacket;
|
||||
}
|
||||
|
||||
|
|
@ -102,11 +114,11 @@ void validate_and_upload(String packet) {
|
|||
espClient.write(aprsPacket.c_str());
|
||||
Serial.print("Message uploaded : "); Serial.println(aprsPacket);
|
||||
if (aprsPacket.indexOf("::") >= 10) {
|
||||
show_display("LoRa iGate: " + Config.callsign, secondLine, String(aprsPacket.substring(0,aprsPacket.indexOf(">"))) + " MESSAGE", 1000);
|
||||
show_display("LoRa iGate: " + Config.callsign, secondLine, "Callsign = " + String(aprsPacket.substring(0,aprsPacket.indexOf(">"))), "Type --> MESSAGE", 1000);
|
||||
} else if (aprsPacket.indexOf(":>") >= 10) {
|
||||
show_display("LoRa iGate: " + Config.callsign, secondLine, String(aprsPacket.substring(0,aprsPacket.indexOf(">"))) + " NEW STATUS", 1000);
|
||||
show_display("LoRa iGate: " + Config.callsign, secondLine, "Callsign = " + String(aprsPacket.substring(0,aprsPacket.indexOf(">"))), "Type --> NEW STATUS", 1000);
|
||||
} else {
|
||||
show_display("LoRa iGate: " + Config.callsign, secondLine, String(aprsPacket.substring(0,aprsPacket.indexOf(">"))) + " GPS BEACON", 1000);
|
||||
show_display("LoRa iGate: " + Config.callsign, secondLine, "Callsign = " + String(aprsPacket.substring(0,aprsPacket.indexOf(">"))), "Type --> GPS BEACON", 1000);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
@ -123,35 +135,63 @@ String process_aprsisPacket(String aprsisMessage) {
|
|||
return newLoraPacket;
|
||||
}
|
||||
|
||||
/*void showConfig() {
|
||||
Serial.println(myWiFiAPSize);
|
||||
Serial.println(myWiFiAPIndex);
|
||||
if(myWiFiAPIndex >= (myWiFiAPSize-1)) {
|
||||
myWiFiAPIndex = 0;
|
||||
String double2string(double n, int ndec) {
|
||||
String r = "";
|
||||
int v = n;
|
||||
r += v;
|
||||
r += '.';
|
||||
int i;
|
||||
for (i=0;i<ndec;i++) {
|
||||
n -= v;
|
||||
n = 10 * abs(n);
|
||||
v = n;
|
||||
r += v;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
String create_lat_aprs(double lat) {
|
||||
String degrees = double2string(lat,6);
|
||||
String north_south, latitude, convDeg3;
|
||||
float convDeg, convDeg2;
|
||||
|
||||
if (degrees.indexOf("-") == 0) {
|
||||
north_south = "S";
|
||||
latitude = degrees.substring(1,degrees.indexOf("."));
|
||||
} else {
|
||||
myWiFiAPIndex++;
|
||||
north_south = "N";
|
||||
latitude = degrees.substring(0,degrees.indexOf("."));
|
||||
}
|
||||
Serial.println(myWiFiAPIndex);
|
||||
currentWiFi = &Config.wifiAPs[myWiFiAPIndex];
|
||||
Serial.println(currentWiFi->ssid);
|
||||
Serial.println(currentWiFi->password);
|
||||
Serial.println(currentWiFi->latitude);
|
||||
Serial.println(currentWiFi->longitude);
|
||||
Serial.println(Config.callsign);
|
||||
Serial.println(Config.comment);
|
||||
Serial.println(Config.aprs_is.active);
|
||||
Serial.println(Config.aprs_is.passcode);
|
||||
Serial.println(Config.aprs_is.server);
|
||||
Serial.println(Config.aprs_is.port);
|
||||
Serial.println(Config.loramodule.frequency);
|
||||
Serial.println(Config.loramodule.spreading_factor);
|
||||
Serial.println(Config.loramodule.signal_bandwidth);
|
||||
Serial.println(Config.loramodule.coding_rate4);
|
||||
Serial.println(Config.loramodule.power);
|
||||
Serial.println(Config.display.always_on);
|
||||
Serial.println(Config.display.timeout);
|
||||
Serial.println(" ");
|
||||
}*/
|
||||
convDeg = abs(degrees.toFloat()) - abs(int(degrees.toFloat()));
|
||||
convDeg2 = (convDeg * 60)/100;
|
||||
convDeg3 = String(convDeg2,6);
|
||||
latitude += convDeg3.substring(convDeg3.indexOf(".")+1,convDeg3.indexOf(".")+3) + "." + convDeg3.substring(convDeg3.indexOf(".")+3,convDeg3.indexOf(".")+5);
|
||||
latitude += north_south;
|
||||
return latitude;
|
||||
}
|
||||
|
||||
String create_lng_aprs(double lng) {
|
||||
String degrees = double2string(lng,6);
|
||||
String east_west, longitude, convDeg3;
|
||||
float convDeg, convDeg2;
|
||||
|
||||
if (abs(degrees.toFloat()) < 100) {
|
||||
longitude += "0";
|
||||
}
|
||||
if (degrees.indexOf("-") == 0) {
|
||||
east_west = "W";
|
||||
longitude += degrees.substring(1,degrees.indexOf("."));
|
||||
} else {
|
||||
east_west = "E";
|
||||
longitude += degrees.substring(0,degrees.indexOf("."));
|
||||
}
|
||||
convDeg = abs(degrees.toFloat()) - abs(int(degrees.toFloat()));
|
||||
convDeg2 = (convDeg * 60)/100;
|
||||
convDeg3 = String(convDeg2,6);
|
||||
longitude += convDeg3.substring(convDeg3.indexOf(".")+1,convDeg3.indexOf(".")+3) + "." + convDeg3.substring(convDeg3.indexOf(".")+3,convDeg3.indexOf(".")+5);
|
||||
longitude += east_west;
|
||||
return longitude;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
|
@ -163,35 +203,34 @@ void setup() {
|
|||
}
|
||||
|
||||
void loop() {
|
||||
//showConfig();
|
||||
//delay(2000);
|
||||
String wifiState, aprsisState;
|
||||
String wifiState, aprsisState, iGateLatitude, iGateLongitude;
|
||||
firstLine = "LoRa iGate: " + Config.callsign;
|
||||
secondLine = " ";
|
||||
thirdLine = " ";
|
||||
fourthLine = " ";
|
||||
unsigned long currentWiFiMillis = millis();
|
||||
|
||||
if ((WiFi.status() != WL_CONNECTED) && (currentWiFiMillis - previousWiFiMillis >= WifiCheckInterval)) { // if WiFi is down, try reconnecting
|
||||
if ((WiFi.status() != WL_CONNECTED) && (currentWiFiMillis - previousWiFiMillis >= 30000)) {
|
||||
Serial.print(millis());
|
||||
Serial.println("Reconnecting to WiFi...");
|
||||
WiFi.disconnect();
|
||||
WiFi.reconnect();
|
||||
previousWiFiMillis = currentWiFiMillis;
|
||||
}
|
||||
|
||||
if (!espClient.connected()) {
|
||||
APRS_IS_connect();
|
||||
}
|
||||
|
||||
if (WiFi.status() == WL_CONNECTED) wifiState = "OK"; else wifiState = "--"; display_toggle(true); lastRxTxTime = millis();
|
||||
if (espClient.connected()) aprsisState = "OK"; else aprsisState = "--"; display_toggle(true); lastRxTxTime = millis();
|
||||
|
||||
secondLine = "WiFi: " + wifiState + "/ APRS-IS: " + aprsisState;
|
||||
|
||||
show_display(firstLine, secondLine, thirdLine, fourthLine, 0);
|
||||
|
||||
while (espClient.connected()) {
|
||||
uint32_t lastRxTx = millis() - lastRxTxTime;
|
||||
if (Config.display.always_on) {
|
||||
if (!Config.display.always_on) {
|
||||
if (lastRxTx >= Config.display.timeout*1000) {
|
||||
display_toggle(false);
|
||||
}
|
||||
|
|
@ -207,8 +246,9 @@ void loop() {
|
|||
if (beacon_update) {
|
||||
display_toggle(true);
|
||||
Serial.println("---- Sending iGate Beacon ----");
|
||||
//String iGateBeaconPacket = Config.callsign + ">APRS,TCPIP*,qAC,CHILE:=" + currentWiFi->latitude + "L" + currentWiFi->longitude + "&" + Config.comment;
|
||||
String iGateBeaconPacket = Config.callsign + ">APRS,TCPIP*,qAC,CHILE:=" + Latitude + "L" + Longitude + "&" + Config.comment + "\n";
|
||||
iGateLatitude = create_lat_aprs(currentWiFi->latitude);
|
||||
iGateLongitude = create_lng_aprs(currentWiFi->longitude);
|
||||
String iGateBeaconPacket = Config.callsign + ">APRS,TCPIP*,qAO:=" + iGateLatitude + "L" + iGateLongitude + "&" + Config.comment + "\n";
|
||||
//Serial.println(iGateBeaconPacket);
|
||||
espClient.write(iGateBeaconPacket.c_str());
|
||||
lastTxTime = millis();
|
||||
|
|
|
|||
|
|
@ -18,12 +18,17 @@ void setup_display() {
|
|||
|
||||
display.clearDisplay();
|
||||
display.setTextColor(WHITE);
|
||||
display.setTextSize(0);
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 0);
|
||||
display.print("LORA iGate by CD2RXU");
|
||||
display.print(" LoRa APRS iGate");
|
||||
display.setCursor(0, 8);
|
||||
display.print(" ( CD2RXU )");
|
||||
display.setCursor(0, 16);
|
||||
display.print(" by Richonguzman");
|
||||
display.ssd1306_command(SSD1306_SETCONTRAST);
|
||||
display.ssd1306_command(1);
|
||||
display.display();
|
||||
delay(4000);
|
||||
}
|
||||
|
||||
void display_toggle(bool toggle) {
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
#ifndef IGATE_CONFIG_H_
|
||||
#define IGATE_CONFIG_H_
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
#define WifiCheckInterval 60000 // wificheck after one minute
|
||||
const String Latitude = "3302.02S"; // write your own iGate latitude and longitude
|
||||
const String Longitude = "07134.42W";
|
||||
|
||||
//#define BeaconInterval 900000 // 15 minutes = 900000 seg
|
||||
|
||||
#endif
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
#include "igate_config.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;
|
||||
};
|
||||
|
||||
class Configuration {
|
||||
public:
|
||||
//std::vector<WiFi_AP> wifiAPs;
|
||||
|
||||
Configuration(String &filePath) {
|
||||
_filePath = filePath;
|
||||
if (!SPIFFS.begin(false)) {
|
||||
Serial.println("SPIFFS Mount Failed");
|
||||
return;
|
||||
}
|
||||
readFile(SPIFFS, _filePath.c_str());
|
||||
}
|
||||
|
||||
private:
|
||||
String _filePath;
|
||||
|
||||
void readFile(fs::FS &fs, const char *fileName) {
|
||||
StaticJsonDocument<1024> data;
|
||||
File configFile = fs.open(fileName, "r");
|
||||
DeserializationError error = deserializeJson(data, configFile);
|
||||
if (error) {
|
||||
Serial.println("Failed to read file, using default configuration");
|
||||
}
|
||||
|
||||
Configuration conf;
|
||||
|
||||
conf.callsign = data["callsign"];
|
||||
conf.comment = data["comment"];
|
||||
|
||||
JsonArray WiFiArray = doc["wifi"]["AP"];
|
||||
for (int i = 0; i < WiFiArray.size(); i++) {
|
||||
WiFi_AP wifi;
|
||||
wifi.ssid = WiFiArray[i]["wifi"]["AP"]["SSID"].as<String>();
|
||||
wifi.password = WiFiArray[i]["wifi"]["AP"]["Password"].as<String>();
|
||||
wifi.latitude = WiFiArray[i]["wifi"]["AP"]["Latitude"].as<double>();
|
||||
wifi.longitude = WiFiArray[i]["wifi"]["AP"]["Longitude"].as<double>();
|
||||
|
||||
conf.wifiAPs.push_back(wifi);
|
||||
}
|
||||
|
||||
conf.aprs_is.active = data["aprs_is"]["active"];
|
||||
conf.aprs_is.passcode = data["aprs_is"]["passcode"];
|
||||
conf.aprs_is.server = data["aprs_is"]["server"];
|
||||
conf.aprs_is.port = data["aprs_is"]["port"];
|
||||
|
||||
conf.lora.port = data["lora"]["frequency"];
|
||||
conf.lora.port = data["lora"]["spreading_factor"];
|
||||
conf.lora.port = data["lora"]["signal_bandwidth"];
|
||||
conf.lora.port = data["lora"]["coding_rate4"];
|
||||
conf.lora.port = data["lora"]["power"];
|
||||
|
||||
conf.display.always_on = data["display"]["always_on"];
|
||||
conf.display.timeout = data["display"]["timeout"];
|
||||
|
||||
configFile.close();
|
||||
}
|
||||
}*/
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
#define OLED_SCL 22
|
||||
|
||||
/* (Same pins for LILYGO LoRa32 and ESP32 Wroom Dev )
|
||||
SX1278-------------------> ESP32 TTGO LILYGO 2.1 or 1.6.1
|
||||
SX1278-------------------> ESP32 ttgo-lora32-v21 and ESP32 WROOM Dev
|
||||
GND GND
|
||||
DIO1 -
|
||||
DIO2 -
|
||||
|
|
@ -26,6 +26,5 @@ SCLK 5
|
|||
NSS 18
|
||||
DIO0 26
|
||||
REST 14
|
||||
GND -
|
||||
*/
|
||||
GND - */
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue