Skip to content

Commit e7e78ea

Browse files
committed
add network maintainer example
1 parent 5877273 commit e7e78ea

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#include <ZeroKernel.h>
2+
#include <modules/net/ZeroWiFiMaintainer.h>
3+
4+
#if defined(ARDUINO_ARCH_ESP8266)
5+
#include <ESP8266WiFi.h>
6+
#elif defined(ARDUINO_ARCH_ESP32)
7+
#include <WiFi.h>
8+
#else
9+
#error "NetworkMaintainer example requires ESP8266 or ESP32."
10+
#endif
11+
12+
using zerokernel::Kernel;
13+
using zerokernel::modules::net::ZeroWiFiMaintainer;
14+
15+
namespace {
16+
17+
const char* kSsid = "replace-me";
18+
const char* kPassword = "replace-me";
19+
const Kernel::TopicKey kWiFiStateTopic = Kernel::makeTopicKey("wifi.link");
20+
21+
ZeroWiFiMaintainer g_wifiMaintainer;
22+
23+
bool isWiFiConnected() {
24+
return WiFi.status() == WL_CONNECTED;
25+
}
26+
27+
void connectWiFi() {
28+
if (WiFi.status() != WL_CONNECTED) {
29+
WiFi.begin(kSsid, kPassword);
30+
}
31+
}
32+
33+
void disconnectWiFi() {
34+
if (WiFi.status() == WL_CONNECTED) {
35+
WiFi.disconnect();
36+
}
37+
}
38+
39+
void onWiFiState(const char*, const Kernel::EventValue& value) {
40+
if (value.type != Kernel::kEventBool) {
41+
return;
42+
}
43+
44+
Serial.print("wifi.state => ");
45+
Serial.println(value.boolValue ? "connected" : "disconnected");
46+
}
47+
48+
void heartbeatTask() {
49+
const Kernel::KernelStats stats = ZeroKernel.getStats();
50+
51+
Serial.print("heartbeat runs=");
52+
Serial.print(stats.taskExecutions);
53+
Serial.print(" events=");
54+
Serial.print(stats.eventsDelivered);
55+
Serial.print(" wifi_attempts=");
56+
Serial.print(g_wifiMaintainer.connectAttempts());
57+
Serial.print(" reconnects=");
58+
Serial.println(g_wifiMaintainer.reconnectTransitions());
59+
}
60+
61+
} // namespace
62+
63+
void setup() {
64+
Serial.begin(115200);
65+
delay(50);
66+
67+
WiFi.mode(WIFI_STA);
68+
WiFi.setAutoReconnect(false);
69+
WiFi.persistent(false);
70+
71+
ZeroKernel.begin();
72+
ZeroKernel.subscribeTypedFast(kWiFiStateTopic, onWiFiState);
73+
74+
ZeroWiFiMaintainer::Config config;
75+
config.pollIntervalMs = 250;
76+
config.retryBaseMs = 1000;
77+
config.retryMaxMs = 15000;
78+
config.manageCapabilities = true;
79+
config.capabilityMask = Kernel::kCapNetwork;
80+
config.stateTopicKey = kWiFiStateTopic;
81+
82+
g_wifiMaintainer.begin(ZeroKernel, isWiFiConnected, connectWiFi, disconnectWiFi, config);
83+
84+
ZeroKernel.addTask("Heartbeat", heartbeatTask, 1000, 0);
85+
ZeroKernel.setTaskPriority("Heartbeat", Kernel::kPriorityLow);
86+
}
87+
88+
void loop() {
89+
ZeroKernel.tick();
90+
g_wifiMaintainer.tick();
91+
}

0 commit comments

Comments
 (0)