mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-11-02 10:51:57 +00:00
Add WiFi companion support for Pico W
SerialWifiInterface has no ESP32-specific code, so move it to helpers/wifi and reuse it on RP2040. Guard the ESP32-only WiFi event/auto-reconnect calls and poll link state on RP2040 instead.
This commit is contained in:
@@ -36,9 +36,8 @@ MultiSerialInterface interface_manager;
|
|||||||
#ifndef TCP_PORT
|
#ifndef TCP_PORT
|
||||||
#define TCP_PORT 5000
|
#define TCP_PORT 5000
|
||||||
#endif
|
#endif
|
||||||
#ifdef ESP32
|
#if defined(ESP32) || defined(RP2040_PLATFORM)
|
||||||
// include esp32 wifi interface
|
#include <helpers/wifi/SerialWifiInterface.h>
|
||||||
#include <helpers/esp32/SerialWifiInterface.h>
|
|
||||||
SerialWifiInterface wifi_interface;
|
SerialWifiInterface wifi_interface;
|
||||||
#else
|
#else
|
||||||
#error "SerialWifiInterface is not defined for this platform"
|
#error "SerialWifiInterface is not defined for this platform"
|
||||||
@@ -108,7 +107,7 @@ void halt() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* WIFI RECONNECT TRACKERS */
|
/* WIFI RECONNECT TRACKERS */
|
||||||
#if defined(ESP32) && defined(WIFI_SSID)
|
#ifdef WIFI_SSID
|
||||||
bool wifi_needs_reconnect = false;
|
bool wifi_needs_reconnect = false;
|
||||||
unsigned long last_wifi_reconnect_attempt = 0;
|
unsigned long last_wifi_reconnect_attempt = 0;
|
||||||
#endif
|
#endif
|
||||||
@@ -192,6 +191,7 @@ void setup() {
|
|||||||
|
|
||||||
// add wifi interface
|
// add wifi interface
|
||||||
#ifdef WIFI_SSID
|
#ifdef WIFI_SSID
|
||||||
|
#if defined(ESP32)
|
||||||
board.setInhibitSleep(true); // prevent sleep when WiFi is active
|
board.setInhibitSleep(true); // prevent sleep when WiFi is active
|
||||||
WiFi.setAutoReconnect(true);
|
WiFi.setAutoReconnect(true);
|
||||||
|
|
||||||
@@ -204,6 +204,7 @@ void setup() {
|
|||||||
wifi_needs_reconnect = false;
|
wifi_needs_reconnect = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
WiFi.begin(WIFI_SSID, WIFI_PWD);
|
WiFi.begin(WIFI_SSID, WIFI_PWD);
|
||||||
wifi_interface.begin(TCP_PORT);
|
wifi_interface.begin(TCP_PORT);
|
||||||
@@ -262,12 +263,21 @@ void loop() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(ESP32) && defined(WIFI_SSID)
|
#ifdef WIFI_SSID
|
||||||
|
// RP2040 has no WiFi event callbacks, so poll the link state instead
|
||||||
|
#if defined(RP2040_PLATFORM)
|
||||||
|
wifi_needs_reconnect = (WiFi.status() != WL_CONNECTED);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Safely attempt to reconnect every 10 seconds if flagged
|
// Safely attempt to reconnect every 10 seconds if flagged
|
||||||
if (wifi_needs_reconnect && (millis() - last_wifi_reconnect_attempt > 10000)) {
|
if (wifi_needs_reconnect && (millis() - last_wifi_reconnect_attempt > 10000)) {
|
||||||
WIFI_DEBUG_PRINTLN("Attempting manual WiFi reconnect...");
|
WIFI_DEBUG_PRINTLN("Attempting manual WiFi reconnect...");
|
||||||
WiFi.disconnect();
|
#if defined(RP2040_PLATFORM)
|
||||||
WiFi.reconnect();
|
WiFi.begin(WIFI_SSID, WIFI_PWD); // no reconnect() on this platform
|
||||||
|
#else
|
||||||
|
WiFi.disconnect();
|
||||||
|
WiFi.reconnect();
|
||||||
|
#endif
|
||||||
last_wifi_reconnect_attempt = millis();
|
last_wifi_reconnect_attempt = millis();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ build_flags = ${arduino_base.build_flags}
|
|||||||
-D ESP32_PLATFORM
|
-D ESP32_PLATFORM
|
||||||
; -D ESP32_CPU_FREQ=80 ; change it to your need
|
; -D ESP32_CPU_FREQ=80 ; change it to your need
|
||||||
build_src_filter = ${arduino_base.build_src_filter}
|
build_src_filter = ${arduino_base.build_src_filter}
|
||||||
|
+<helpers/wifi/*.cpp>
|
||||||
|
|
||||||
[esp32_ota]
|
[esp32_ota]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
|
|||||||
@@ -81,20 +81,22 @@ lib_ignore = BLE
|
|||||||
; lib_deps = ${rpi_picow.lib_deps}
|
; lib_deps = ${rpi_picow.lib_deps}
|
||||||
; densaugeo/base64 @ ~1.4.0
|
; densaugeo/base64 @ ~1.4.0
|
||||||
|
|
||||||
; [env:PicoW_companion_radio_wifi]
|
[env:PicoW_companion_radio_wifi]
|
||||||
; extends = rpi_picow
|
extends = rpi_picow
|
||||||
; build_flags = ${rpi_picow.build_flags}
|
build_flags = ${rpi_picow.build_flags}
|
||||||
; -D MAX_CONTACTS=100
|
-D MAX_CONTACTS=100
|
||||||
; -D MAX_GROUP_CHANNELS=8
|
-D MAX_GROUP_CHANNELS=8
|
||||||
; -D WIFI_DEBUG_LOGGING=1
|
-D WIFI_DEBUG_LOGGING=1
|
||||||
; -D WIFI_SSID='"myssid"'
|
-D WIFI_SSID='"myssid"'
|
||||||
; -D WIFI_PWD='"mypwd"'
|
-D WIFI_PWD='"mypwd"'
|
||||||
; ; -D MESH_PACKET_LOGGING=1
|
; -D MESH_PACKET_LOGGING=1
|
||||||
; ; -D MESH_DEBUG=1
|
; -D MESH_DEBUG=1
|
||||||
; build_src_filter = ${rpi_picow.build_src_filter}
|
build_src_filter = ${rpi_picow.build_src_filter}
|
||||||
; +<../examples/companion_radio/*.cpp>
|
+<helpers/wifi/*.cpp>
|
||||||
; lib_deps = ${rpi_picow.lib_deps}
|
+<../examples/companion_radio/*.cpp>
|
||||||
; densaugeo/base64 @ ~1.4.0
|
lib_deps = ${rpi_picow.lib_deps}
|
||||||
|
densaugeo/base64 @ ~1.4.0
|
||||||
|
lib_ignore = BLE
|
||||||
|
|
||||||
[env:PicoW_terminal_chat]
|
[env:PicoW_terminal_chat]
|
||||||
extends = rpi_picow
|
extends = rpi_picow
|
||||||
|
|||||||
Reference in New Issue
Block a user