#include <WiFiManager.h>
#include <WiFi.h>
#include <Adafruit_NeoPixel.h>
#include <Ticker.h>
#define BOOT_BUTTON_PIN 0 // BOOT按钮对应GPIO0
// 定义WS2812 LED参数
#define LED_PIN 48
#define LED_COUNT 1
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// LED状态控制
Ticker ledTicker;
bool isConnected = false;
const uint8_t BRIGHTNESS = 12; // 整体亮度
const uint32_t CONNECTED_COLOR = strip.Color(0, 255, 0); // 绿色
const uint32_t CONNECTING_COLOR = strip.Color(255, 255, 0); // 黄色
unsigned long buttonPressTime = 0;
bool resetTriggered = false;
void updateLed() {
static bool ledState = false;
if (!isConnected) {
uint32_t color = ledState ? CONNECTING_COLOR : 0;
for(int i=0; i<LED_COUNT; i++) {
strip.setPixelColor(i, color);
}
strip.show();
ledState = !ledState;
}
}
void setup() {
Serial.begin(115200);
pinMode(BOOT_BUTTON_PIN, INPUT_PULLUP);
// 初始化LED
strip.begin();
strip.setBrightness(BRIGHTNESS);
strip.show();
// 启动连接状态闪烁
ledTicker.attach(0.5, updateLed);
WiFiManager wifiManager;
wifiManager.setTimeout(180);
if (!wifiManager.autoConnect("ESP32-Config")) {
Serial.println("配网失败,重启设备");
ledTicker.detach();
delay(5000);
ESP.restart();
}
// 连接成功处理
ledTicker.detach();
isConnected = true;
for(int i=0; i<LED_COUNT; i++) {
strip.setPixelColor(i, CONNECTED_COLOR);
}
strip.show();
Serial.println("\nWiFi已连接!");
Serial.print("IP地址: ");
Serial.println(WiFi.localIP());
}
void loop() {
// 按钮检测(保持原功能)
if (digitalRead(BOOT_BUTTON_PIN) == LOW && !resetTriggered) {
delay(50);
if (digitalRead(BOOT_BUTTON_PIN) == LOW) {
buttonPressTime = millis();
resetTriggered = true;
while (digitalRead(BOOT_BUTTON_PIN) == LOW) {
if (millis() - buttonPressTime > 3000) {
Serial.println("\n重置WiFi配置...");
WiFiManager wifiManager;
wifiManager.resetSettings();
// 重置LED状态
ledTicker.detach();
for(int i=0; i<LED_COUNT; i++) {
strip.setPixelColor(i, 0);
}
strip.show();
delay(2000);
ESP.restart();
}
}
resetTriggered = false;
}
}
// WiFi状态监测
if (WiFi.status() != WL_CONNECTED && isConnected) {
isConnected = false;
ledTicker.attach(0.5, updateLed);
Serial.println("WiFi连接丢失,尝试重连...");
}
else if (WiFi.status() == WL_CONNECTED && !isConnected) {
isConnected = true;
ledTicker.detach();
for(int i=0; i<LED_COUNT; i++) {
strip.setPixelColor(i, CONNECTED_COLOR);
}
strip.show();
}
delay(100);
}
最后修改:2025 年 05 月 22 日 09 : 27 AM
© 允许规范转载