From 783e695771fde102d8c1876256a5c902a9173e82 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 13 Oct 2024 01:14:04 -0700 Subject: [PATCH 1/7] Add HTML server --- data/index.html | 40 ++++++++++++++++ data/style.css | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ data/text.txt | 0 include/File.h | 43 ++++++++++++++++++ platformio.ini | 3 ++ src/main.cpp | 19 ++++++++ 6 files changed, 223 insertions(+) create mode 100644 data/index.html create mode 100644 data/style.css create mode 100644 data/text.txt create mode 100644 include/File.h diff --git a/data/index.html b/data/index.html new file mode 100644 index 0000000..92cddf1 --- /dev/null +++ b/data/index.html @@ -0,0 +1,40 @@ + + + + + ESP Wi-Fi Manager + + + + + + +
+

LORA SA ESP32 CONFIG

+
+
+
+
+
+

+ +
+ +
+ +
+ +
+ +
+ +
+ +

+
+
+
+
+ + + diff --git a/data/style.css b/data/style.css new file mode 100644 index 0000000..491d8c4 --- /dev/null +++ b/data/style.css @@ -0,0 +1,118 @@ +html { + font-family: Arial, Helvetica, sans-serif; + display: inline-block; + text-align: center; +} + +h1 { + font-size: 1.8rem; + color: white; +} + +p { + font-size: 1.4rem; +} + +.topnav { + overflow: hidden; + background-color: #0A1128; +} + +body { + margin: 0; +} + +.content { + padding: 5%; +} + +.card-grid { + max-width: 800px; + margin: 0 auto; + display: grid; + grid-gap: 2rem; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); +} + +.card { + background-color: white; + box-shadow: 2px 2px 12px 1px rgba(140, 140, 140, .5); +} + +.card-title { + font-size: 1.2rem; + font-weight: bold; + color: #034078 +} + +input[type=submit] { + border: none; + color: #FEFCFB; + background-color: #034078; + padding: 15px 15px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + width: 100px; + margin-right: 10px; + border-radius: 4px; + transition-duration: 0.4s; +} + +input[type=submit]:hover { + background-color: #1282A2; +} + +input[type=text], +input[type=number], +select { + width: 50%; + padding: 12px 20px; + margin: 18px; + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +label { + font-size: 1.2rem; +} + +.value { + font-size: 1.2rem; + color: #1282A2; +} + +.state { + font-size: 1.2rem; + color: #1282A2; +} + +button { + border: none; + color: #FEFCFB; + padding: 15px 32px; + text-align: center; + font-size: 16px; + width: 100px; + border-radius: 4px; + transition-duration: 0.4s; +} + +.button-on { + background-color: #034078; +} + +.button-on:hover { + background-color: #1282A2; +} + +.button-off { + background-color: #858585; +} + +.button-off:hover { + background-color: #252524; +} diff --git a/data/text.txt b/data/text.txt new file mode 100644 index 0000000..e69de29 diff --git a/include/File.h b/include/File.h new file mode 100644 index 0000000..d726c40 --- /dev/null +++ b/include/File.h @@ -0,0 +1,43 @@ +#include "FS.h" +#include + +String readFile(fs::FS &fs, const char *path) +{ + Serial.printf("Reading file: %s\r\n", path); + + File file = fs.open(path); + if (!file || file.isDirectory()) + { + Serial.println("- failed to open file for reading"); + return String(""); + } + String content; + Serial.println("- read from file:"); + while (file.available()) + { + content = file.readStringUntil('\n'); + } + file.close(); + return content; +} + +void writeFile(fs::FS &fs, const char *path, const char *message) +{ + Serial.printf("Writing file: %s\r\n", path); + + File file = fs.open(path, FILE_WRITE); + if (!file) + { + Serial.println("- failed to open file for writing"); + return; + } + if (file.print(message)) + { + Serial.println("- file written"); + } + else + { + Serial.println("- write failed"); + } + file.close(); +} diff --git a/platformio.ini b/platformio.ini index 32ddad0..2868df9 100644 --- a/platformio.ini +++ b/platformio.ini @@ -26,12 +26,15 @@ framework = arduino upload_speed = 921600 monitor_speed = 115200 board_build.f_cpu = 240000000 +board_build.filesystem = littlefs lib_deps = ropg/Heltec_ESP32_LoRa_v3@^0.9.1 bblanchon/ArduinoJson@^7.2.0 + ESP Async WebServer build_flags = -DHELTEC_POWER_BUTTON -DHELTEC + [env:heltec_wifi_lora_32_V3_433] platform = espressif32 diff --git a/src/main.cpp b/src/main.cpp index a3d9b44..20fa879 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,9 +27,18 @@ #ifdef HELTEC #include #endif +#include "FS.h" +#include +#include +#include +#include #include #include +#include "WIFI_SERVER.h" + +#define FORMAT_LITTLEFS_IF_FAILED true + // #define OSD_ENABLED true // #define WIFI_SCANNING_ENABLED true // #define BT_SCANNING_ENABLED true @@ -548,6 +557,7 @@ void drone_sound_alarm(void *arg, Event &e); void setup(void) { + #ifdef LILYGO setupBoards(); // true for disable U8g2 display library delay(500); @@ -580,6 +590,7 @@ void setup(void) pinMode(BUZZER_PIN, OUTPUT); pinMode(REB_PIN, OUTPUT); heltec_setup(); + serverStart(); #ifdef JOYSTICK_ENABLED calibrate_joy(); pinMode(JOY_BTN_PIN, INPUT_PULLUP); @@ -600,6 +611,14 @@ void setup(void) } init_radio(); + + if (!LittleFS.begin(FORMAT_LITTLEFS_IF_FAILED)) + { + Serial.println("LittleFS Mount Failed"); + } + + // writeFile(LittleFS, "/text.txt", "{WIFI:{name:\"sdfsdf\", Password:\"sdfsdf\"}"); + Serial.println(readFile(LittleFS, "/text.txt")); #ifndef LILYGO vbat = heltec_vbat(); both.printf("V battery: %.2fV (%d%%)\n", vbat, heltec_battery_percent(vbat)); From 6ce1058c6658d51f8e4bf5cb70fcb2bd86dd2df6 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 13 Oct 2024 01:14:14 -0700 Subject: [PATCH 2/7] add server --- include/WIFI_SERVER.h | 176 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 include/WIFI_SERVER.h diff --git a/include/WIFI_SERVER.h b/include/WIFI_SERVER.h new file mode 100644 index 0000000..0460306 --- /dev/null +++ b/include/WIFI_SERVER.h @@ -0,0 +1,176 @@ +#include +#include +#include +#include + +// Create AsyncWebServer object on port 80 +AsyncWebServer server(80); + +// Search for parameter in HTTP POST request +const char *PARAM_INPUT_1 = "ssid"; +const char *PARAM_INPUT_2 = "pass"; +const char *PARAM_INPUT_3 = "ip"; +const char *PARAM_INPUT_4 = "gateway"; +const char *PARAM_INPUT_5 = "fstart"; +const char *PARAM_INPUT_6 = "fend"; + +// File paths to save input values permanently +const char *ssidPath = "/ssid.txt"; +const char *passPath = "/pass.txt"; +const char *ipPath = "/ip.txt"; +const char *gatewayPath = "/gateway.txt"; + +// Variables to save values from HTML form +String ssid = "LoraSA", pass = "1234567890", ip, gateway, fstart, fend; + +IPAddress localIP(192, 168, 1, 200); +// Set your Gateway IP address +IPAddress localGateway(192, 168, 1, 1); +IPAddress subnet(255, 255, 0, 0); + +// Timer variables +unsigned long previousMillis = 0; +const long interval = 10000; // interval to wait for Wi-Fi connection (milliseconds) + +// Initialize WiFi +bool initWiFi() +{ + if (ssid == "" || ip == "") + { + Serial.println("Undefined SSID or IP address."); + return false; + } + + WiFi.mode(WIFI_STA); + // localIP.fromString(ip.c_str()); + // localGateway.fromString(gateway.c_str()); + + if (!WiFi.config(localIP, localGateway, subnet)) + { + Serial.println("STA Failed to configure"); + return false; + } + WiFi.begin(ssid.c_str(), pass.c_str()); + Serial.println("Connecting to WiFi..."); + + unsigned long currentMillis = millis(); + previousMillis = currentMillis; + + while (WiFi.status() != WL_CONNECTED) + { + currentMillis = millis(); + if (currentMillis - previousMillis >= interval) + { + Serial.println("Failed to connect."); + return false; + } + } + + Serial.println(WiFi.localIP()); + return true; +} + +void serverStart() +{ + if (initWiFi()) + { + // Route for root / web page + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) + { request->send(LittleFS, "/index.html", "text/html"); }); + server.serveStatic("/", LittleFS, "/"); + + /* // Route to set GPIO state to HIGH + server.on("/on", HTTP_GET, + [](AsyncWebServerRequest *request) + { + digitalWrite(ledPin, HIGH); + request->send(LittleFS, "/index.html", "text/html", false, + processor); + }); + + // Route to set GPIO state to LOW + server.on("/off", HTTP_GET, + [](AsyncWebServerRequest *request) + { + digitalWrite(ledPin, LOW); + request->send(LittleFS, "/index.html", "text/html", false, + processor); + });*/ + server.begin(); + } + else + { + // Connect to Wi-Fi network with SSID and password + Serial.println("Setting AP (Access Point)"); + // NULL sets an open Access Point + WiFi.softAP("LoraSA", NULL); + + IPAddress IP = WiFi.softAPIP(); + Serial.print("AP IP address: "); + Serial.println(IP); + + // Web Server Root URL + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) + { request->send(LittleFS, "/index.html", "text/html"); }); + + server.serveStatic("/", LittleFS, "/"); + + server.on("/", HTTP_POST, + [](AsyncWebServerRequest *request) + { + int params = request->params(); + for (int i = 0; i < params; i++) + { + const AsyncWebParameter *p = request->getParam(i); + if (p->isPost()) + { + // HTTP POST ssid value + if (p->name() == PARAM_INPUT_1) + { + ssid = p->value().c_str(); + Serial.print("SSID set to: "); + Serial.println(ssid); + // Write file to save value + writeFile(LittleFS, ssidPath, ssid.c_str()); + } + // HTTP POST pass value + if (p->name() == PARAM_INPUT_2) + { + pass = p->value().c_str(); + Serial.print("Password set to: "); + Serial.println(pass); + // Write file to save value + writeFile(LittleFS, passPath, pass.c_str()); + } + // HTTP POST ip value + if (p->name() == PARAM_INPUT_3) + { + ip = p->value().c_str(); + Serial.print("IP Address set to: "); + Serial.println(ip); + // Write file to save value + writeFile(LittleFS, ipPath, ip.c_str()); + } + // HTTP POST gateway value + if (p->name() == PARAM_INPUT_4) + { + gateway = p->value().c_str(); + Serial.print("Gateway set to: "); + Serial.println(gateway); + // Write file to save value + writeFile(LittleFS, gatewayPath, gateway.c_str()); + } + // Serial.printf("POST[%s]: %s\n", p->name().c_str(), + // p->value().c_str()); + } + } + request->send(200, "text/plain", + "Done. ESP will restart, connect to your router and " + "go to IP address: " + + ip); + delay(3000); + ESP.restart(); + }); + server.begin(); + } +} From b002afb789cb522430a2fffbd9f05749ba545238 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 13 Oct 2024 18:31:26 -0700 Subject: [PATCH 3/7] Add LR1121 and File config WIFI --- include/File.h | 12 +++ include/LiLyGo.h | 4 + include/WIFI_SERVER.h | 208 +++++++++++++++++++++--------------------- lib/scan/scan.h | 4 +- platformio.ini | 30 ++++++ src/main.cpp | 77 ++++++++++++---- 6 files changed, 213 insertions(+), 122 deletions(-) diff --git a/include/File.h b/include/File.h index d726c40..6f502ec 100644 --- a/include/File.h +++ b/include/File.h @@ -1,6 +1,16 @@ #include "FS.h" #include +// Initialize LittleFS +void initLittleFS() +{ + if (!LittleFS.begin(true)) + { + Serial.println("An error has occurred while mounting LittleFS"); + } + Serial.println("LittleFS mounted successfully"); +} + String readFile(fs::FS &fs, const char *path) { Serial.printf("Reading file: %s\r\n", path); @@ -24,6 +34,7 @@ String readFile(fs::FS &fs, const char *path) void writeFile(fs::FS &fs, const char *path, const char *message) { Serial.printf("Writing file: %s\r\n", path); + Serial.printf("Content: %s\r\n", message); File file = fs.open(path, FILE_WRITE); if (!file) @@ -34,6 +45,7 @@ void writeFile(fs::FS &fs, const char *path, const char *message) if (file.print(message)) { Serial.println("- file written"); + delay(500); } else { diff --git a/include/LiLyGo.h b/include/LiLyGo.h index c9c88ee..1d44603 100644 --- a/include/LiLyGo.h +++ b/include/LiLyGo.h @@ -35,6 +35,10 @@ SX1280 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUS // Default SPI on pins from pins_arduino.h SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); #endif // end USING_SX1262 +#ifdef USING_LR1121 +// Default SPI on pins from pins_arduino.h +LR1121 radio = new Module(RADIO_CS_PIN, RADIO_DIO9_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); +#endif // end USING_LR1121 #ifdef USING_SX1276 // Default SPI on pins from pins_arduino.h SX1276 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); diff --git a/include/WIFI_SERVER.h b/include/WIFI_SERVER.h index 0460306..89d95de 100644 --- a/include/WIFI_SERVER.h +++ b/include/WIFI_SERVER.h @@ -7,25 +7,23 @@ AsyncWebServer server(80); // Search for parameter in HTTP POST request -const char *PARAM_INPUT_1 = "ssid"; -const char *PARAM_INPUT_2 = "pass"; -const char *PARAM_INPUT_3 = "ip"; -const char *PARAM_INPUT_4 = "gateway"; -const char *PARAM_INPUT_5 = "fstart"; -const char *PARAM_INPUT_6 = "fend"; +const String SSID = "ssid"; +const String PASS = "pass"; +const String IP = "ip"; +const String GATEWAY = "gateway"; +const String FSTART = "fstart"; +const String FEND = "fend"; // File paths to save input values permanently -const char *ssidPath = "/ssid.txt"; -const char *passPath = "/pass.txt"; -const char *ipPath = "/ip.txt"; -const char *gatewayPath = "/gateway.txt"; +// const char *ssidPath = "/ssid.txt"; // Variables to save values from HTML form -String ssid = "LoraSA", pass = "1234567890", ip, gateway, fstart, fend; +String ssid = "LoraSA", pass = "1234567890", ip = "192.168.1.100", + gateway = "192.168.1.1", fstart = "", fend = ""; -IPAddress localIP(192, 168, 1, 200); +IPAddress localIP; // Set your Gateway IP address -IPAddress localGateway(192, 168, 1, 1); +IPAddress localGateway; IPAddress subnet(255, 255, 0, 0); // Timer variables @@ -35,6 +33,11 @@ const long interval = 10000; // interval to wait for Wi-Fi connection (milliseco // Initialize WiFi bool initWiFi() { + Serial.println("SSID:" + ssid); + Serial.println("PSWD:" + pass); + Serial.println("IP:" + ip); + Serial.println("SUB:" + subnet); + Serial.println("GATAWAY:" + gateway); if (ssid == "" || ip == "") { Serial.println("Undefined SSID or IP address."); @@ -42,8 +45,8 @@ bool initWiFi() } WiFi.mode(WIFI_STA); - // localIP.fromString(ip.c_str()); - // localGateway.fromString(gateway.c_str()); + localIP.fromString(ip.c_str()); + localGateway.fromString(gateway.c_str()); if (!WiFi.config(localIP, localGateway, subnet)) { @@ -70,37 +73,100 @@ bool initWiFi() return true; } +void writeParameterToFile(String value, String file) +{ + // Write file to save value + writeFile(LittleFS, file.c_str(), value.c_str()); +} + +void writeParameterToParameterFile(String param, String value) +{ + String file = String("/" + param + ".txt"); + // Write file to save value + writeParameterToFile(value, file.c_str()); +} + +String readParameterFromParameterFile(String param) +{ + String file = String("/" + param + ".txt"); + return readFile(LittleFS, file.c_str()); +} + +void serverServer() +{ + // Route for root / web page + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) + { request->send(LittleFS, "/index.html", "text/html"); }); + + server.serveStatic("/", LittleFS, "/"); + + server.on("/", HTTP_POST, + [](AsyncWebServerRequest *request) + { + int params = request->params(); + for (int i = 0; i < params; i++) + { + Serial.println("Parameter " + String(i) + ": " + + request->getParam(i)->value()); + } + Serial.println(request->params()); + + String p = request->getParam(SSID, true)->value(); + writeParameterToParameterFile(SSID, p); + + p = request->getParam(PASS, true)->value(); + writeParameterToParameterFile(PASS, p); + + p = request->getParam(IP, true)->value(); + writeParameterToParameterFile(IP, p); + + p = request->getParam(GATEWAY, true)->value(); + writeParameterToParameterFile(GATEWAY, p); + + p = request->getParam(FSTART, true)->value(); + writeParameterToParameterFile(FSTART, p); + + p = request->getParam(FEND, true)->value(); + writeParameterToParameterFile(FEND, p); + + request->send(200, "text/plain", + "Done. ESP will restart, connect to your router and " + "go to IP address: " + + ip); + delay(3000); + ESP.restart(); + }); + + /* // Route to set GPIO state to HIGH + server.on("/on", HTTP_GET, + [](AsyncWebServerRequest *request) + { + digitalWrite(ledPin, HIGH); + request->send(LittleFS, "/index.html", "text/html", false, + processor); + }); + + // Route to set GPIO state to LOW + server.on("/off", HTTP_GET, + [](AsyncWebServerRequest *request) + { + digitalWrite(ledPin, LOW); + request->send(LittleFS, "/index.html", "text/html", false, + processor); + });*/ + server.begin(); +} + void serverStart() { if (initWiFi()) { - // Route for root / web page - server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) - { request->send(LittleFS, "/index.html", "text/html"); }); - server.serveStatic("/", LittleFS, "/"); - - /* // Route to set GPIO state to HIGH - server.on("/on", HTTP_GET, - [](AsyncWebServerRequest *request) - { - digitalWrite(ledPin, HIGH); - request->send(LittleFS, "/index.html", "text/html", false, - processor); - }); - - // Route to set GPIO state to LOW - server.on("/off", HTTP_GET, - [](AsyncWebServerRequest *request) - { - digitalWrite(ledPin, LOW); - request->send(LittleFS, "/index.html", "text/html", false, - processor); - });*/ - server.begin(); + Serial.println("Setting Secure WIFI (Access Point)"); + serverServer(); } else { - // Connect to Wi-Fi network with SSID and password + // Connect to Wi-Fi network with default SSID and password Serial.println("Setting AP (Access Point)"); // NULL sets an open Access Point WiFi.softAP("LoraSA", NULL); @@ -109,68 +175,6 @@ void serverStart() Serial.print("AP IP address: "); Serial.println(IP); - // Web Server Root URL - server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) - { request->send(LittleFS, "/index.html", "text/html"); }); - - server.serveStatic("/", LittleFS, "/"); - - server.on("/", HTTP_POST, - [](AsyncWebServerRequest *request) - { - int params = request->params(); - for (int i = 0; i < params; i++) - { - const AsyncWebParameter *p = request->getParam(i); - if (p->isPost()) - { - // HTTP POST ssid value - if (p->name() == PARAM_INPUT_1) - { - ssid = p->value().c_str(); - Serial.print("SSID set to: "); - Serial.println(ssid); - // Write file to save value - writeFile(LittleFS, ssidPath, ssid.c_str()); - } - // HTTP POST pass value - if (p->name() == PARAM_INPUT_2) - { - pass = p->value().c_str(); - Serial.print("Password set to: "); - Serial.println(pass); - // Write file to save value - writeFile(LittleFS, passPath, pass.c_str()); - } - // HTTP POST ip value - if (p->name() == PARAM_INPUT_3) - { - ip = p->value().c_str(); - Serial.print("IP Address set to: "); - Serial.println(ip); - // Write file to save value - writeFile(LittleFS, ipPath, ip.c_str()); - } - // HTTP POST gateway value - if (p->name() == PARAM_INPUT_4) - { - gateway = p->value().c_str(); - Serial.print("Gateway set to: "); - Serial.println(gateway); - // Write file to save value - writeFile(LittleFS, gatewayPath, gateway.c_str()); - } - // Serial.printf("POST[%s]: %s\n", p->name().c_str(), - // p->value().c_str()); - } - } - request->send(200, "text/plain", - "Done. ESP will restart, connect to your router and " - "go to IP address: " + - ip); - delay(3000); - ESP.restart(); - }); - server.begin(); + serverServer(); } } diff --git a/lib/scan/scan.h b/lib/scan/scan.h index c6b113c..38b610e 100644 --- a/lib/scan/scan.h +++ b/lib/scan/scan.h @@ -27,7 +27,9 @@ constexpr float HI_RSSI_THRESHOLD = -44.0; constexpr float LO_RSSI_THRESHOLD = HI_RSSI_THRESHOLD - 66; // number of samples for RSSI method -#define SAMPLES_RSSI 12 // 21 // +#ifndef SAMPLES_RSSI +#define SAMPLES_RSSI 13 // 21 // +#endif #ifdef USING_SX1280PA #define SAMPLES_RSSI 20 #endif diff --git a/platformio.ini b/platformio.ini index 2868df9..a1d92eb 100644 --- a/platformio.ini +++ b/platformio.ini @@ -76,6 +76,36 @@ build_flags = -DARDUINO_LILYGO_T3_S3_V1_X -DARDUINO_USB_MODE=1 +[env:lilygo-T3S3-v1-2-lr1121] +platform = espressif32 +board = t3_s3_v1_x +framework = arduino +upload_speed = 921600 +monitor_speed = 115200 +board_build.f_cpu = 240000000 +board_build.filesystem = littlefs +lib_deps = + ropg/Heltec_ESP32_LoRa_v3@^0.9.1 + RadioLib + U8g2 + XPowersLib + bblanchon/ArduinoJson@^7.2.0 + ESP Async WebServer +build_flags = + -DLILYGO + -DT3_S3_V1_2_LR1121 + -DT3_V1_3_SX1262 + -DARDUINO_LILYGO_T3S3_LR1121 + -DESP32 + -DSAMPLES_RSSI=5 + -DUSING_LR1121 + -DFREQ_BEGIN=2400 + -DFREQ_END=2500 + -DARDUINO_ARCH_ESP32 + -DARDUINO_USB_CDC_ON_BOOT=1 + -DARDUINO_LILYGO_T3_S3_V1_X + -DARDUINO_USB_MODE=1 + [env:lilygo-T3S3-v1-2-sx1280] platform = espressif32 diff --git a/src/main.cpp b/src/main.cpp index 20fa879..1d60514 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -54,6 +54,8 @@ #include #include +#include + #ifndef LILYGO #include // This file contains a binary patch for the SX1262 @@ -143,8 +145,9 @@ int SCAN_RANGES[] = {}; // MHZ per page // to put everything into one page set RANGE_PER_PAGE = FREQ_END - 800 -uint64_t RANGE_PER_PAGE = FREQ_END - FREQ_BEGIN; // FREQ_END - FREQ_BEGIN +uint64_t RANGE_PER_PAGE; // FREQ_END - FREQ_BEGIN +uint64_t CONF_FREQ_END, CONF_FREQ_BEGIN; // To Enable Multi Screen scan // uint64_t RANGE_PER_PAGE = 50; // Default Range on Menu Button Switch @@ -177,16 +180,8 @@ constexpr int WINDOW_SIZE = 15; // if more than 100 it can freeze #define SAMPLES 35 //(scan time = 1294) -#define RANGE (int)(FREQ_END - FREQ_BEGIN) - -#define SINGLE_STEP (float)(RANGE / (STEPS * SCAN_RBW_FACTOR)) - -uint64_t range = (int)(FREQ_END - FREQ_BEGIN); - -uint64_t iterations = RANGE / RANGE_PER_PAGE; - -// uint64_t range_frequency = FREQ_END - FREQ_BEGIN; -uint64_t median_frequency = (FREQ_BEGIN + FREQ_END) / 2; +uint64_t RANGE, range, iterations, median_frequency; +float SINGLE_STEP; // #define DISABLE_PLOT_CHART false // unused @@ -376,13 +371,20 @@ struct RadioScan : Scan float RadioScan::getRSSI() { -#ifdef USING_SX1280PA +#if defined(USING_SX1280PA) // radio.startReceive(); // get instantaneous RSSI value // When PR will be merged we can use radi.getRSSI(false); uint8_t data[3] = {0, 0, 0}; // RssiInst, Status, RFU radio.mod->SPIreadStream(RADIOLIB_SX128X_CMD_GET_RSSI_INST, data, 3); return ((float)data[0] / (-2.0)); + +#elif defined(USING_LR1121) + // Try getRssiInst + float rssi; + radio.getRssiInst(&rssi); + // pass the replies + return rssi; #else return radio.getRSSI(false); #endif @@ -401,7 +403,7 @@ void init_radio() { // initialize SX1262 FSK modem at the initial frequency both.println("Init radio"); -#ifdef USING_SX1280PA +#if defined(USING_SX1280PA) || defined(USING_LR1121) state = radio.beginGFSK(FREQ_BEGIN); #else state = radio.beginFSK(FREQ_BEGIN); @@ -590,7 +592,7 @@ void setup(void) pinMode(BUZZER_PIN, OUTPUT); pinMode(REB_PIN, OUTPUT); heltec_setup(); - serverStart(); + #ifdef JOYSTICK_ENABLED calibrate_joy(); pinMode(JOY_BTN_PIN, INPUT_PULLUP); @@ -612,16 +614,53 @@ void setup(void) init_radio(); - if (!LittleFS.begin(FORMAT_LITTLEFS_IF_FAILED)) - { - Serial.println("LittleFS Mount Failed"); - } + initLittleFS(); // writeFile(LittleFS, "/text.txt", "{WIFI:{name:\"sdfsdf\", Password:\"sdfsdf\"}"); - Serial.println(readFile(LittleFS, "/text.txt")); + ssid = readParameterFromParameterFile(SSID); + Serial.println("SSID: " + ssid); + + pass = readParameterFromParameterFile(PASS); + Serial.println("PASS: " + pass); + + ip = readParameterFromParameterFile(IP); + Serial.println("PASS: " + ip); + + gateway = readParameterFromParameterFile(GATEWAY); + Serial.println("GATEWAY: " + gateway); + + fstart = readParameterFromParameterFile(FSTART); + Serial.println("FSTART: " + fstart); + + fend = readParameterFromParameterFile(FEND); + Serial.println("FEND: " + fend); + + both.println("Starting WIFI-SERVER"); + serverStart(); + + CONF_FREQ_BEGIN = (fstart == "") ? FREQ_BEGIN : atoi(fstart.c_str()); + CONF_FREQ_END = (fend == "") ? FREQ_END : atoi(fend.c_str()); + + both.println("C FREQ BEGIN:" + String(CONF_FREQ_BEGIN)); + both.println("C FREQ END:" + String(CONF_FREQ_END)); + + RANGE_PER_PAGE = CONF_FREQ_END - CONF_FREQ_BEGIN; // FREQ_END - FREQ_BEGIN + + RANGE = (int)(CONF_FREQ_END - CONF_FREQ_BEGIN); + + SINGLE_STEP = (float)(RANGE / (STEPS * SCAN_RBW_FACTOR)); + + range = (int)(CONF_FREQ_END - CONF_FREQ_BEGIN); + + iterations = RANGE / RANGE_PER_PAGE; + + // uint64_t range_frequency = FREQ_END - FREQ_BEGIN; + median_frequency = (CONF_FREQ_BEGIN + CONF_FREQ_END) / 2; + #ifndef LILYGO vbat = heltec_vbat(); both.printf("V battery: %.2fV (%d%%)\n", vbat, heltec_battery_percent(vbat)); + delay(1000); #endif // end not LILYGO #ifdef WIFI_SCANNING_ENABLED WiFi.mode(WIFI_STA); From 7c3d48a44dc136d6b4a695af5bea5ad7c2b0241f Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 13 Oct 2024 20:00:42 -0700 Subject: [PATCH 4/7] samples settings --- data/index.html | 6 +++-- include/WIFI_SERVER.h | 51 +++++++++++++++++++++++++++---------- src/main.cpp | 59 ++++++++++++++++++++++++------------------- src/ui.cpp | 11 +++++--- 4 files changed, 82 insertions(+), 45 deletions(-) diff --git a/data/index.html b/data/index.html index 92cddf1..82bfe6a 100644 --- a/data/index.html +++ b/data/index.html @@ -26,9 +26,11 @@
-
+
-
+
+ +

diff --git a/include/WIFI_SERVER.h b/include/WIFI_SERVER.h index 89d95de..93a715d 100644 --- a/include/WIFI_SERVER.h +++ b/include/WIFI_SERVER.h @@ -19,7 +19,7 @@ const String FEND = "fend"; // Variables to save values from HTML form String ssid = "LoraSA", pass = "1234567890", ip = "192.168.1.100", - gateway = "192.168.1.1", fstart = "", fend = ""; + gateway = "192.168.1.1", fstart = "", fend = "", smpls = ""; IPAddress localIP; // Set your Gateway IP address @@ -111,23 +111,48 @@ void serverServer() } Serial.println(request->params()); - String p = request->getParam(SSID, true)->value(); - writeParameterToParameterFile(SSID, p); + String p; + if (request->hasParam(IP, true)) + { + p = request->getParam(IP, true)->value(); + writeParameterToParameterFile(IP, p); + } - p = request->getParam(PASS, true)->value(); - writeParameterToParameterFile(PASS, p); + if (request->hasParam(IP, true)) + { + p = request->getParam(IP, true)->value(); + writeParameterToParameterFile(IP, p); + } - p = request->getParam(IP, true)->value(); - writeParameterToParameterFile(IP, p); + if (request->hasParam(IP, true)) + { + p = request->getParam(IP, true)->value(); + writeParameterToParameterFile(IP, p); + } - p = request->getParam(GATEWAY, true)->value(); - writeParameterToParameterFile(GATEWAY, p); + if (request->hasParam(GATEWAY, true)) + { + p = request->getParam(GATEWAY, true)->value(); + writeParameterToParameterFile(GATEWAY, p); + } - p = request->getParam(FSTART, true)->value(); - writeParameterToParameterFile(FSTART, p); + if (request->hasParam(FSTART, true)) + { + p = request->getParam(FSTART, true)->value(); + writeParameterToParameterFile(FSTART, p); + } - p = request->getParam(FEND, true)->value(); - writeParameterToParameterFile(FEND, p); + if (request->hasParam(FEND, true)) + { + p = request->getParam(FEND, true)->value(); + writeParameterToParameterFile(FEND, p); + } + + if (request->hasParam("samples", true)) + { + p = request->getParam("samples", true)->value(); + writeParameterToParameterFile("samples", p); + } request->send(200, "text/plain", "Done. ESP will restart, connect to your router and " diff --git a/src/main.cpp b/src/main.cpp index 9f3dbec..883889e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -145,10 +145,9 @@ int SCAN_RANGES[] = {}; // MHZ per page // to put everything into one page set RANGE_PER_PAGE = FREQ_END - 800 -uint64_t RANGE_PER_PAGE; // FREQ_END - FREQ_BEGIN +uint64_t RANGE_PER_PAGE; // FREQ_END - CONF_FREQ_BEGIN -uint64_t CONF_FREQ_END, CONF_FREQ_BEGIN; -// To Enable Multi Screen scan +uint64_t CONF_FREQ_END, CONF_FREQ_BEGIN; // To Enable Multi Screen scan // uint64_t RANGE_PER_PAGE = 50; // Default Range on Menu Button Switch @@ -228,11 +227,12 @@ uint64_t ranges_count = 0; int rssi = 0; int state = 0; +int CONF_SAMPLES; #ifdef METHOD_SPECTRAL -constexpr int samples = SAMPLES; +int samples = SAMPLES; #endif #ifdef METHOD_RSSI -constexpr int samples = SAMPLES_RSSI; +int samples = SAMPLES_RSSI; #endif uint8_t result_index = 0; @@ -305,8 +305,8 @@ void osdProcess() // memset(max_step_range, 33, 30); max_bin = 32; - osd.displayString(12, 1, String(FREQ_BEGIN)); - osd.displayString(12, OSD_WIDTH - 8, String(FREQ_END)); + osd.displayString(12, 1, String(CONF_FREQ_BEGIN)); + osd.displayString(12, OSD_WIDTH - 8, String(CONF_FREQ_END)); // Finding biggest in result // Skiping 0 and 32 31 to avoid overflow for (int i = 1; i < MAX_POWER_LEVELS - 3; i++) @@ -343,7 +343,7 @@ void osdProcess() #ifdef OSD_SIDE_BAR { osd.displayString(col, OSD_WIDTH - 7, - String(FREQ_BEGIN + (col * osd_mhz_in_bin)) + "-" + + String(CONF_FREQ_BEGIN + (col * osd_mhz_in_bin)) + "-" + String(max_step_range) + " "); } #endif @@ -404,9 +404,9 @@ void init_radio() // initialize SX1262 FSK modem at the initial frequency both.println("Init radio"); #if defined(USING_SX1280PA) || defined(USING_LR1121) - state = radio.beginGFSK(FREQ_BEGIN); + state = radio.beginGFSK(CONF_FREQ_BEGIN); #else - state = radio.beginFSK(FREQ_BEGIN); + state = radio.beginFSK(CONF_FREQ_BEGIN); #endif if (state == RADIOLIB_ERR_NONE) { @@ -458,7 +458,7 @@ void init_radio() // calibrate only once ,,, at startup // TODO: check documentation (9.2.1) if we must calibrate in certain ranges #ifdef USING_SX1280PA - state = radio.setFrequency(FREQ_BEGIN); + state = radio.setFrequency(CONF_FREQ_BEGIN); if (state != RADIOLIB_ERR_NONE) { Serial.println("Error:setFrequency:" + String(state)); @@ -470,9 +470,9 @@ void init_radio() } #elif USING_SX1276 // Sets carrier frequency. Allowed values range from 137.0 MHz to 1020.0 MHz. - radio.setFrequency(FREQ_BEGIN); + radio.setFrequency(CONF_FREQ_BEGIN); #else - radio.setFrequency(FREQ_BEGIN, true); + radio.setFrequency(CONF_FREQ_BEGIN, true); #endif delay(50); @@ -612,8 +612,6 @@ void setup(void) } } - init_radio(); - initLittleFS(); // writeFile(LittleFS, "/text.txt", "{WIFI:{name:\"sdfsdf\", Password:\"sdfsdf\"}"); @@ -635,16 +633,22 @@ void setup(void) fend = readParameterFromParameterFile(FEND); Serial.println("FEND: " + fend); + smpls = readParameterFromParameterFile("samples"); + Serial.println("SAMPLES: " + smpls); + both.println("Starting WIFI-SERVER"); serverStart(); + CONF_SAMPLES = (smpls == "") ? samples : atoi(smpls.c_str()); + samples = CONF_SAMPLES; CONF_FREQ_BEGIN = (fstart == "") ? FREQ_BEGIN : atoi(fstart.c_str()); CONF_FREQ_END = (fend == "") ? FREQ_END : atoi(fend.c_str()); both.println("C FREQ BEGIN:" + String(CONF_FREQ_BEGIN)); both.println("C FREQ END:" + String(CONF_FREQ_END)); + both.println("C SAMPLES:" + String(CONF_SAMPLES)); - RANGE_PER_PAGE = CONF_FREQ_END - CONF_FREQ_BEGIN; // FREQ_END - FREQ_BEGIN + RANGE_PER_PAGE = CONF_FREQ_END - CONF_FREQ_BEGIN; // FREQ_END - CONF_FREQ_BEGIN RANGE = (int)(CONF_FREQ_END - CONF_FREQ_BEGIN); @@ -654,9 +658,11 @@ void setup(void) iterations = RANGE / RANGE_PER_PAGE; - // uint64_t range_frequency = FREQ_END - FREQ_BEGIN; + // uint64_t range_frequency = FREQ_END - CONF_FREQ_BEGIN; median_frequency = (CONF_FREQ_BEGIN + CONF_FREQ_END) / 2; + init_radio(); + #ifndef LILYGO vbat = heltec_vbat(); both.printf("V battery: %.2fV (%d%%)\n", vbat, heltec_battery_percent(vbat)); @@ -763,8 +769,9 @@ void setup(void) r.trigger_level = TRIGGER_LEVEL; stacked.reset(0, 0, display.width(), display.height()); - bar = new DecoratedBarChart(display, 0, 0, display.width(), 0, FREQ_BEGIN, FREQ_END, - LO_RSSI_THRESHOLD, HI_RSSI_THRESHOLD, r.trigger_level); + bar = new DecoratedBarChart(display, 0, 0, display.width(), 0, CONF_FREQ_BEGIN, + CONF_FREQ_END, LO_RSSI_THRESHOLD, HI_RSSI_THRESHOLD, + r.trigger_level); size_t b = stacked.addChart(bar); @@ -778,9 +785,9 @@ void setup(void) delete[] multiples; - waterChart = - new WaterfallChart(display, 0, WATERFALL_START, display.width(), 0, FREQ_BEGIN, - FREQ_END, r.trigger_level, WATERFALL_SENSITIVITY, model); + waterChart = new WaterfallChart(display, 0, WATERFALL_START, display.width(), 0, + CONF_FREQ_BEGIN, CONF_FREQ_END, r.trigger_level, + WATERFALL_SENSITIVITY, model); size_t c = stacked.addChart(waterChart); stacked.setHeight(c, stacked.height - WATERFALL_START - statusBar->height); @@ -1011,13 +1018,13 @@ void loop(void) } // do the scan - range = FREQ_END - FREQ_BEGIN; + range = CONF_FREQ_END - CONF_FREQ_BEGIN; if (RANGE_PER_PAGE > range) { RANGE_PER_PAGE = range; } - r.fr_begin = FREQ_BEGIN; + r.fr_begin = CONF_FREQ_BEGIN; r.fr_end = r.fr_begin; // 50 is a single-screen range @@ -1150,7 +1157,7 @@ void loop(void) // Spectrum analyzer using getRSSI { LOG("METHOD RSSI"); - uint16_t max_rssi = r.rssiMethod(SAMPLES_RSSI, result, + uint16_t max_rssi = r.rssiMethod(CONF_SAMPLES, result, RADIOLIB_SX126X_SPECTRAL_SCAN_RES_SIZE); if (max_x_rssi[display_x] > max_rssi) @@ -1162,7 +1169,7 @@ void loop(void) // if this code is not executed LORA radio doesn't work // basically SX1262 requires delay - // osd.displayString(12, 1, String(FREQ_BEGIN)); + // osd.displayString(12, 1, String(CONF_FREQ_BEGIN)); // osd.displayString(12, 30 - 8, String(FREQ_END)); // delay(2); diff --git a/src/ui.cpp b/src/ui.cpp index e488060..77bdc58 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -16,6 +16,8 @@ // temporary dirty import ... to be solved durring upcoming refactoring extern unsigned int RANGE_PER_PAGE; +extern uint64_t CONF_FREQ_BEGIN; +extern uint64_t CONF_FREQ_END; extern unsigned int median_frequency; extern unsigned int drone_detected_frequency_start; extern unsigned int drone_detected_frequency_end; @@ -95,7 +97,8 @@ void StatusBar::draw() // Frequency start display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(pos_x, text_y, - (r.fr_begin == 0) ? String(FREQ_BEGIN) : String(r.fr_begin)); + (r.fr_begin == 0) ? String(CONF_FREQ_BEGIN) + : String(r.fr_begin)); // Frequency detected display.setTextAlignment(TEXT_ALIGN_CENTER); @@ -106,7 +109,7 @@ void StatusBar::draw() // Frequency end display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(pos_x + width, text_y, - (r.fr_end == 0) ? String(FREQ_END) : String(r.fr_end)); + (r.fr_end == 0) ? String(CONF_FREQ_END) : String(r.fr_end)); } // Status text block @@ -170,11 +173,11 @@ void StatusBar::draw() display.drawString(pos_x, text_y, String(loop_time)); #else display.setTextAlignment(TEXT_ALIGN_LEFT); - display.drawString(pos_x, text_y, String(FREQ_BEGIN)); + display.drawString(pos_x, text_y, String(CONF_FREQ_BEGIN)); #endif display.setTextAlignment(TEXT_ALIGN_RIGHT); - display.drawString(pos_x + width, text_y, String(FREQ_END)); + display.drawString(pos_x + width, text_y, String(CONF_FREQ_END)); } else if (ranges_count > 0) { From a62c91d938c75042a0ea35b9166e4cab9cf27eb1 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 13 Oct 2024 21:30:03 -0700 Subject: [PATCH 5/7] WiFi load --- src/main.cpp | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 883889e..3815cfc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -49,11 +49,11 @@ // public and so will be exposed to the user. This allows direct manipulation of the // library internals. #define RADIOLIB_GODMODE (1) +#define RADIOLIB_CHECK_PARAMS (0) #include #include #include - #include #ifndef LILYGO @@ -612,6 +612,34 @@ void setup(void) } } + display.clear(); + + both.println("CLICK for WIFI settings."); + + for (int i = 0; i < 200; i++) + { + + both.print("."); + + button.update(); + delay(10); + if (button.pressedNow()) + { + both.println("-----------"); + both.println("Starting WIFI-SERVER..."); + tone(BUZZER_PIN, 205, 100); + delay(50); + tone(BUZZER_PIN, 205, 500); + tone(BUZZER_PIN, 205, 100); + delay(50); + + serverStart(); + break; + } + } + both.print("\n"); + + both.println("Init File System"); initLittleFS(); // writeFile(LittleFS, "/text.txt", "{WIFI:{name:\"sdfsdf\", Password:\"sdfsdf\"}"); @@ -636,9 +664,6 @@ void setup(void) smpls = readParameterFromParameterFile("samples"); Serial.println("SAMPLES: " + smpls); - both.println("Starting WIFI-SERVER"); - serverStart(); - CONF_SAMPLES = (smpls == "") ? samples : atoi(smpls.c_str()); samples = CONF_SAMPLES; CONF_FREQ_BEGIN = (fstart == "") ? FREQ_BEGIN : atoi(fstart.c_str()); From 527ce829394b4ee46d9958d212ed0386ee47d6a9 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 13 Oct 2024 21:53:18 -0700 Subject: [PATCH 6/7] Fix WiFi settings --- src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 3815cfc..2d0d074 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -618,7 +618,6 @@ void setup(void) for (int i = 0; i < 200; i++) { - both.print("."); button.update(); @@ -627,6 +626,7 @@ void setup(void) { both.println("-----------"); both.println("Starting WIFI-SERVER..."); + // Error here: E (15752) ledc: ledc_get_duty(745): LEDC is not initialized tone(BUZZER_PIN, 205, 100); delay(50); tone(BUZZER_PIN, 205, 500); @@ -634,6 +634,8 @@ void setup(void) delay(50); serverStart(); + both.println("Ready to Connect: 192.168.4.1"); + delay(600); break; } } From 41bd4c3b96850ba05c2fef83f0de2cb1b94e969b Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 13 Oct 2024 22:03:46 -0700 Subject: [PATCH 7/7] move to function readConfigFile --- src/main.cpp | 91 +++++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 2d0d074..88721c5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -557,6 +557,53 @@ void logToSerialTask(void *parameter) void drone_sound_alarm(void *arg, Event &e); +void readConfigFile() +{ + // writeFile(LittleFS, "/text.txt", "{WIFI:{name:\"sdfsdf\", Password:\"sdfsdf\"}"); + ssid = readParameterFromParameterFile(SSID); + Serial.println("SSID: " + ssid); + + pass = readParameterFromParameterFile(PASS); + Serial.println("PASS: " + pass); + + ip = readParameterFromParameterFile(IP); + Serial.println("PASS: " + ip); + + gateway = readParameterFromParameterFile(GATEWAY); + Serial.println("GATEWAY: " + gateway); + + fstart = readParameterFromParameterFile(FSTART); + Serial.println("FSTART: " + fstart); + + fend = readParameterFromParameterFile(FEND); + Serial.println("FEND: " + fend); + + smpls = readParameterFromParameterFile("samples"); + Serial.println("SAMPLES: " + smpls); + + CONF_SAMPLES = (smpls == "") ? samples : atoi(smpls.c_str()); + samples = CONF_SAMPLES; + CONF_FREQ_BEGIN = (fstart == "") ? FREQ_BEGIN : atoi(fstart.c_str()); + CONF_FREQ_END = (fend == "") ? FREQ_END : atoi(fend.c_str()); + + both.println("C FREQ BEGIN:" + String(CONF_FREQ_BEGIN)); + both.println("C FREQ END:" + String(CONF_FREQ_END)); + both.println("C SAMPLES:" + String(CONF_SAMPLES)); + + RANGE_PER_PAGE = CONF_FREQ_END - CONF_FREQ_BEGIN; // FREQ_END - CONF_FREQ_BEGIN + + RANGE = (int)(CONF_FREQ_END - CONF_FREQ_BEGIN); + + SINGLE_STEP = (float)(RANGE / (STEPS * SCAN_RBW_FACTOR)); + + range = (int)(CONF_FREQ_END - CONF_FREQ_BEGIN); + + iterations = RANGE / RANGE_PER_PAGE; + + // uint64_t range_frequency = FREQ_END - CONF_FREQ_BEGIN; + median_frequency = (CONF_FREQ_BEGIN + CONF_FREQ_END) / 2; +} + void setup(void) { @@ -644,49 +691,7 @@ void setup(void) both.println("Init File System"); initLittleFS(); - // writeFile(LittleFS, "/text.txt", "{WIFI:{name:\"sdfsdf\", Password:\"sdfsdf\"}"); - ssid = readParameterFromParameterFile(SSID); - Serial.println("SSID: " + ssid); - - pass = readParameterFromParameterFile(PASS); - Serial.println("PASS: " + pass); - - ip = readParameterFromParameterFile(IP); - Serial.println("PASS: " + ip); - - gateway = readParameterFromParameterFile(GATEWAY); - Serial.println("GATEWAY: " + gateway); - - fstart = readParameterFromParameterFile(FSTART); - Serial.println("FSTART: " + fstart); - - fend = readParameterFromParameterFile(FEND); - Serial.println("FEND: " + fend); - - smpls = readParameterFromParameterFile("samples"); - Serial.println("SAMPLES: " + smpls); - - CONF_SAMPLES = (smpls == "") ? samples : atoi(smpls.c_str()); - samples = CONF_SAMPLES; - CONF_FREQ_BEGIN = (fstart == "") ? FREQ_BEGIN : atoi(fstart.c_str()); - CONF_FREQ_END = (fend == "") ? FREQ_END : atoi(fend.c_str()); - - both.println("C FREQ BEGIN:" + String(CONF_FREQ_BEGIN)); - both.println("C FREQ END:" + String(CONF_FREQ_END)); - both.println("C SAMPLES:" + String(CONF_SAMPLES)); - - RANGE_PER_PAGE = CONF_FREQ_END - CONF_FREQ_BEGIN; // FREQ_END - CONF_FREQ_BEGIN - - RANGE = (int)(CONF_FREQ_END - CONF_FREQ_BEGIN); - - SINGLE_STEP = (float)(RANGE / (STEPS * SCAN_RBW_FACTOR)); - - range = (int)(CONF_FREQ_END - CONF_FREQ_BEGIN); - - iterations = RANGE / RANGE_PER_PAGE; - - // uint64_t range_frequency = FREQ_END - CONF_FREQ_BEGIN; - median_frequency = (CONF_FREQ_BEGIN + CONF_FREQ_END) / 2; + readConfigFile(); init_radio();