Skip to content

Commit 3aaa034

Browse files
committed
Use WiFiManager v1.x
- New WiFiManager uses AsyncWiFiMulti, allowing for async wifi setup - Led now doesn't need ticker, but just a regular task - Also added task for async background rescan
1 parent 435ea8f commit 3aaa034

5 files changed

Lines changed: 47 additions & 19 deletions

File tree

platformio.ini

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ lib_deps =
1818
SPI
1919
https://github.com/GuLinux/AsyncBufferedTcpLogger#v0.0.6
2020
https://github.com/GuLinux/AsyncWebserverUtils#v0.3.1
21-
https://github.com/GuLinux/WiFiManager.git#v0.1.1
21+
https://github.com/GuLinux/WiFiManager.git#v1.2.0
2222
https://github.com/GuLinux/ArduinoOTA-Manager.git#v0.0.3
2323
ESP32Async/AsyncTCP@^3.4.0
2424
ESP32Async/ESPAsyncWebServer@^3.7.7
@@ -37,11 +37,17 @@ lib_deps =
3737
sensirion/Sensirion I2C SHT4x@^1.1.0
3838
mathertel/OneButton@^2.6.1
3939
tobiasschuerg/ESP8266 Influxdb @ ^3.13.2
40+
arkhipenko/TaskScheduler@^3.8.5
4041
build_flags =
4142
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
4243
-std=c++2a
4344
-std=gnu++2a
4445
-D_TASK_STD_FUNCTION
46+
-DWIFIMANAGER_DEFAULT_RECONNECT=true
47+
-DWIFIMANAGER_DEFAULT_RETRIES=3
48+
-DDEBUG_WIFI_MULTI=2
49+
-DBOOT_DELAY=1000
50+
-DCORE_DEBUG_LEVEL=0
4551
build_unflags =
4652
-std=gnu++11
4753
-std=cpp++11
@@ -57,9 +63,15 @@ framework = arduino
5763
lib_compat_mode = strict
5864
lib_ldf_mode = chain
5965

60-
6166
[env:lolin_s2_mini]
6267
board = lolin_s2_mini
6368

6469
[env:esp32_c3_supermini]
6570
board = lolin_c3_mini
71+
72+
; debug_server =
73+
; ${platformio.packages_dir}/tool-openocd-esp32/bin/openocd
74+
; -f
75+
; ${platformio.packages_dir}/tool-openocd-esp32/share/openocd/scripts/board/esp32c3-builtin.cfg
76+
77+

src/async_led.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,34 @@
44
#include <Arduino.h>
55
#include <list>
66
#include <Ticker.h>
7+
#include <TaskSchedulerDeclarations.h>
78

89
class AsyncLed {
910
public:
1011
AsyncLed(uint8_t pin, bool invertLogic=false) : pin{pin}, invertLogic{invertLogic} {
1112
}
1213

13-
void setup() {
14+
void setup(Scheduler *scheduler) {
1415
pinMode(pin, OUTPUT);
1516
writePin(false);
1617
leds.push_back(this);
17-
AsyncLed::setupTicker();
18+
AsyncLed::setupTask(scheduler);
1819
}
1920

2021
float duty() const {
2122
return _duty;
2223
}
2324

24-
static void setupTicker() {
25-
if(ticker) {
25+
static void setupTask(Scheduler *scheduler) {
26+
if(task) {
2627
return;
2728
}
28-
ticker = new Ticker();
29-
ticker->attach_ms(100, [](){
30-
// Serial.println("Tick");
29+
task = new Task(100, TASK_FOREVER, [](){
30+
// Serial.println("Task running");
3131
for(auto led: leds) {
3232
led->loop();
3333
}
34-
});
34+
}, scheduler, true);
3535
// Serial.printf("Ticker active: %d\n", ticker.active());
3636
}
3737

@@ -103,7 +103,7 @@ class AsyncLed {
103103
}
104104

105105
}
106-
static inline Ticker *ticker = nullptr;
106+
static inline Task *task = nullptr;
107107
static inline std::list<AsyncLed*> leds;
108108
};
109109

src/main.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ OneButton userButton;
3535

3636
APB::WebServer webServer(scheduler);
3737

38+
Task rescanTask;
39+
3840

3941
#define LOG_SCOPE "APB::Main - "
4042

@@ -62,19 +64,33 @@ void setup() {
6264
APB::Settings::Instance.setup();
6365
APB::InfluxDb::Instance.setup(scheduler);
6466

65-
APB::StatusLed::Instance.setup();
67+
APB::StatusLed::Instance.setup(&scheduler);
6668
#ifdef WIFI_POWER_TX
6769
WiFi.setTxPower(WIFI_POWER_TX);
6870
#endif
6971
#ifdef WIFI_POWER_RX
7072
WiFi.setTxPower(WIFI_POWER_RX);
7173
#endif
7274

75+
WiFi.onEvent([](arduino_event_id_t event, arduino_event_info_t){
76+
Log.infoln(LOG_SCOPE "WiFi event: %s", WiFi.eventName(event));
77+
});
7378

74-
WiFiManager::Instance.setOnConnectedCallback(std::bind(&APB::StatusLed::okPattern, &APB::StatusLed::Instance));
75-
WiFiManager::Instance.setOnConnectionFailedCallback(std::bind(&APB::StatusLed::wifiConnectionFailedPattern, &APB::StatusLed::Instance));
76-
WiFiManager::Instance.setOnNoStationsFoundCallback(std::bind(&APB::StatusLed::noWiFiStationsFoundPattern, &APB::StatusLed::Instance));
77-
WiFiManager::Instance.setup(scheduler, &APB::Settings::Instance.wifi());
79+
rescanTask.set(30'000, TASK_FOREVER, [](){
80+
Log.infoln(LOG_SCOPE "Rescanning WiFi networks");
81+
WiFiManager::Instance.rescan();
82+
});
83+
scheduler.addTask(rescanTask);
84+
WiFiManager::Instance.setOnConnectedCallback([](const AsyncWiFiMulti::ApSettings &){
85+
APB::StatusLed::Instance.okPattern();
86+
rescanTask.disable();
87+
});
88+
WiFiManager::Instance.setOnConnectionFailedCallback([](){
89+
APB::StatusLed::Instance.wifiConnectionFailedPattern();
90+
rescanTask.enableDelayed(30'000);
91+
});
92+
WiFiManager::Instance.setOnDisconnectedCallback(std::bind(&APB::StatusLed::wifiConnectionFailedPattern, &APB::StatusLed::Instance));
93+
WiFiManager::Instance.setup(&APB::Settings::Instance.wifi());
7894
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
7995
Wire.setClock(100000);
8096
APB::Ambient::Instance.setup(scheduler);

src/statusled.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ APB::StatusLed &APB::StatusLed::Instance = *new APB::StatusLed();
66
APB::StatusLed::StatusLed() : led{APB_STATUS_LED_PIN, APB_STATUS_LED_INVERT_LOGIC} {
77
}
88

9-
void APB::StatusLed::setup() {
10-
led.setup();
9+
void APB::StatusLed::setup(Scheduler *scheduler) {
10+
led.setup(scheduler);
1111
setDuty(Settings::Instance.statusLedDuty());
1212
setupPattern();
1313
}

src/statusled.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class StatusLed {
99
public:
1010
static StatusLed &Instance;
1111
StatusLed();
12-
void setup();
12+
void setup(Scheduler *scheduler);
1313
float duty() const;
1414
void setDuty(float duty);
1515

0 commit comments

Comments
 (0)