From cdbb0b0a6f1be8e179810d43f2b28312a879ce31 Mon Sep 17 00:00:00 2001 From: Milosz Klim Date: Thu, 19 Mar 2026 11:24:35 +0100 Subject: [PATCH 1/2] Base wireguard integration --- WST-FC/include/Configuration.h | 10 ++++++++ .../CommunicationWiFiUDPModule.h | 7 ++++++ WST-FC/platformio.ini | 2 ++ .../CommunicationWiFiUDPModule.cpp | 23 +++++++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/WST-FC/include/Configuration.h b/WST-FC/include/Configuration.h index 866fd5c..69c9971 100644 --- a/WST-FC/include/Configuration.h +++ b/WST-FC/include/Configuration.h @@ -18,4 +18,14 @@ enum DroneStatus BROKEN }; +#define USE_WIREGUARD 1 + +#if USE_WIREGUARD + #define WG_LOCAL_IP "10.0.0.2" + #define WG_PRIVATE_KEY "KLUCZ_PRYWATNY_ESP32=" + #define WG_PEER_ADDRESS "198.51.100.1" + #define WG_PEER_PORT 51820 + #define WG_PEER_PUBLIC_KEY "KLUCZ_PUBLICZNY_SERWERA=" +#endif + #endif \ No newline at end of file diff --git a/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h b/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h index 5bf765b..870a9f7 100644 --- a/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h +++ b/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h @@ -6,6 +6,9 @@ #include "DroneData.h" #include "ICommunicationInterface.h" #include "Configuration.h" +#ifdef USE_WIREGUARD + #include +#endif class CommunicationWiFiUDPModule : public ICommunicationInterface{ private: DroneControlData *sharedData; @@ -21,6 +24,10 @@ class CommunicationWiFiUDPModule : public ICommunicationInterface{ IPAddress remoteIP; unsigned int remotePort {0}; + #ifdef USE_WIREGUARD + WireGuard wg; + #endif + public: CommunicationWiFiUDPModule(DroneControlData *dataPtr, unsigned int port, DroneStatus *status); diff --git a/WST-FC/platformio.ini b/WST-FC/platformio.ini index f44cd63..91aa42d 100644 --- a/WST-FC/platformio.ini +++ b/WST-FC/platformio.ini @@ -21,6 +21,7 @@ lib_deps = br3ttb/PID@^1.2.1 adafruit/Adafruit ADXL345@^1.3.4 adafruit/Adafruit Unified Sensor@^1.1.14 + ciniml/WireGuard-ESP32 @ ^0.1.5 [env:esp32-c3-super-mini] platform = espressif32 @@ -38,3 +39,4 @@ lib_deps = br3ttb/PID@^1.2.1 adafruit/Adafruit ADXL345@^1.3.4 adafruit/Adafruit Unified Sensor@^1.1.14 + ciniml/WireGuard-ESP32 @ ^0.1.5 diff --git a/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp b/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp index 1ded853..a8f630d 100644 --- a/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp +++ b/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp @@ -1,6 +1,7 @@ #include "communicationModules\CommunicationWiFiUDPModule.h" #include "Configuration.h" + CommunicationWiFiUDPModule::CommunicationWiFiUDPModule(DroneControlData *dataPtr, unsigned int port, DroneStatus *status) { sharedData = dataPtr; @@ -19,6 +20,28 @@ void CommunicationWiFiUDPModule::Init() delay(500); } Serial.print("Connected!"); + + #ifdef USE_WIREGUARD + configTime(9 * 60 * 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com"); + time_t now = time(nullptr); + while (now < 8 * 3600 * 2) + { + delay(500); + Serial.print("."); + now = time(nullptr); + } + Serial.println("\nTime synchronized!"); + + wg.begin( + IPAddress().fromString(WG_LOCAL_IP), + WG_PRIVATE_KEY, + WG_PEER_ADDRESS, + WG_PEER_PUBLIC_KEY, + WG_PEER_PORT + ); + Serial.println("WireGuard initialized."); + #endif + udp.begin(localPort); } void CommunicationWiFiUDPModule::Loop() From 6ee95a450c1dac63c2ccd97c6c18185e766c7f7f Mon Sep 17 00:00:00 2001 From: Milosz Klim Date: Thu, 19 Mar 2026 17:32:51 +0100 Subject: [PATCH 2/2] Tweaks --- WST-FC/include/DCMotor.h | 6 ++++- .../CommunicationWiFiUDPModule.h | 3 +++ .../CommunicationWiFiUDPModule.cpp | 25 ++++++++++++++++--- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/WST-FC/include/DCMotor.h b/WST-FC/include/DCMotor.h index fe137c0..78c45ae 100644 --- a/WST-FC/include/DCMotor.h +++ b/WST-FC/include/DCMotor.h @@ -8,14 +8,16 @@ class DCMotor : public IActuator private: int _pinIN1, _pinIN2, _pinEN; int _pwmChannel; + bool _revDir; public: - DCMotor(int pinIN1, int pinIN2, int pinEN, int pwmChannel) + DCMotor(int pinIN1, int pinIN2, int pinEN, int pwmChannel, bool revDir = false) { _pinIN1 = pinIN1; _pinIN2 = pinIN2; _pinEN = pinEN; _pwmChannel = pwmChannel; + _revDir = revDir; } void Init() override @@ -32,6 +34,8 @@ class DCMotor : public IActuator int pwmValue = map(abs(speed), 0, 1000, 0, 255); if (pwmValue > 255) pwmValue = 255; + + if(_revDir == true) speed = -speed; if (speed > 0) { diff --git a/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h b/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h index 870a9f7..a376da8 100644 --- a/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h +++ b/WST-FC/include/communicationModules/CommunicationWiFiUDPModule.h @@ -26,6 +26,9 @@ class CommunicationWiFiUDPModule : public ICommunicationInterface{ #ifdef USE_WIREGUARD WireGuard wg; + unsigned long lastKeepaliveTime = 0; + const unsigned long KEEPALIVE_INTERVAL = 20000; + const uint8_t KEEPALIVE_BYTE = 0xFF; #endif public: diff --git a/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp b/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp index a8f630d..72ace61 100644 --- a/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp +++ b/WST-FC/src/communicationModules/CommunicationWiFiUDPModule.cpp @@ -21,8 +21,8 @@ void CommunicationWiFiUDPModule::Init() } Serial.print("Connected!"); - #ifdef USE_WIREGUARD - configTime(9 * 60 * 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com"); + #if USE_WIREGUARD + configTime(0, 0, "pool.ntp.org", "time.nist.gov"); time_t now = time(nullptr); while (now < 8 * 3600 * 2) { @@ -32,14 +32,17 @@ void CommunicationWiFiUDPModule::Init() } Serial.println("\nTime synchronized!"); + IPAddress localIP; + localIP.fromString(WG_LOCAL_IP); + wg.begin( - IPAddress().fromString(WG_LOCAL_IP), + localIP, WG_PRIVATE_KEY, WG_PEER_ADDRESS, WG_PEER_PUBLIC_KEY, WG_PEER_PORT ); - Serial.println("WireGuard initialized."); + Serial.println("WireGuard initialized!"); #endif udp.begin(localPort); @@ -73,6 +76,17 @@ void CommunicationWiFiUDPModule::Loop() { *droneStatus = WORKS; } + + #if USE_WIREGUARD + if (remotePort != 0 && (millis() - lastKeepaliveTime > KEEPALIVE_INTERVAL)) + { + udp.beginPacket(remoteIP, remotePort); + udp.write(&KEEPALIVE_BYTE, 1); + udp.endPacket(); + + lastKeepaliveTime = millis(); + } + #endif } void CommunicationWiFiUDPModule::SendData(SensorsData* data) @@ -81,4 +95,7 @@ void CommunicationWiFiUDPModule::SendData(SensorsData* data) udp.beginPacket(remoteIP, remotePort); udp.write((const uint8_t*)data, sizeof(SensorsData)); udp.endPacket(); + #if USE_WIREGUARD + lastKeepaliveTime = millis(); + #endif } \ No newline at end of file