Skip to content

RombieHHH/Stupid_LED

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stupid_LED

一个基于 ESP32-C3 的双 LED 控制固件与内置 Web UI。通过 SoftAP 提供网页控制界面,并通过 WebSocket 接收/下发控制命令。支持 OLED 显示实时状态。适合快速演示 LED 模式(on/off/blink/breathe)与远程调试。

功能

  • 双 LED 独立控制(GPIO12 + GPIO13),每路独立 PWM 通道
  • LED 模式:on / off / blink / breathe
  • 调整亮度(0-255)
  • Blink:调整频率(Hz)并需点击 Apply 生效
  • Breathe:调整周期(ms)并需点击 Apply 生效
  • OLED 128×64 显示(I2C, SCL=IO5, SDA=IO4),两页滚动显示双灯状态
  • 内置 Web UI(HTML 嵌入固件,通过 SoftAP 的 HTTP 提供),双卡片独立控制
  • 使用 WebSocket 实现状态广播与命令控制
  • 状态上报包含 uptime、led 索引、mode、hz、period_ms、brightness、wifi_clients、ws_clients、rssi 等字段
  • 无客户端自动休眠:WiFi/WebSocket 无连接时自动进入弱呼吸等待模式

文件结构(主要)

  • platformio.ini - PlatformIO 项目配置

  • data/index.html - Web UI 源文件(构建时自动嵌入固件)

  • tools/embed_html.py - 构建脚本,将 HTML 编译为 C 头文件

  • src/ - 源码

    • main.cpp - 程序入口(模块初始化、主循环、OLED 更新)
    • network.cpp/.h - SoftAP、HTTP server 与 WebSocket server
    • websocket_handler.cpp/.h - WebSocket 消息解析、命令分发、广播
    • status_reporter.cpp/.h - 汇总双灯状态并广播
    • led_controller.cpp/.h - 双通道 LED 模式逻辑和 PWM 驱动(LEDC)
    • storage.cpp/.h - 状态持久化(SPIFFS JSON)
    • oled_driver.cpp/.h - SSD1306 OLED 驱动(硬件 I2C)
    • oled_font.h - 8×16 ASCII 字库
    • embedded_html.h - 自动生成的 HTML 嵌入头文件(勿手动编辑)

硬件连接

组件 引脚
LED0 GPIO12
LED1 GPIO13
OLED SCL IO5
OLED SDA IO4
OLED VCC 3.3V(独立供电)
OLED GND GND

构建与刷写

本项目使用 PlatformIO 构建(推荐在 VSCode + PlatformIO 插件中使用)。

在项目根目录:

# 构建
platformio run
# 上传
platformio run --target upload

你也可以在 IDE 中直接使用 "Build" 与 "Upload" 按钮。

使用说明

OLED 显示

开机显示 AP IP 地址,随后进入循环滚动模式,每页停留 5 秒:

  • Row 1: 1:ON Br:128(LED 编号、模式、亮度)
  • Row 2: Hz:2 Per:1500(闪烁频率、呼吸周期)
  • Row 3: WiFi:2 WS:1(WiFi 客户端数、WebSocket 连接数)
  • Row 4: UP: 3600s(运行时长,实时更新)

网页 UI

刷写后,ESP32 在 SoftAP 模式下启动 WiFi 网络(SSID: ESP32C3_LED_AP,密码: 12345678)。连接后在浏览器打开 http://192.168.4.1

每个 LED 有独立卡片,包含:

  • Mode 选择按钮:On / Off / Blink / Breathe
  • 亮度滑块(0-255),松手 200ms 后自动应用
  • Blink 控件:频率 slider + number + Apply(仅 blink 模式可见)
  • Breathe 控件:周期 slider + number + Apply(仅 breathe 模式可见)

Blink/Breathe 的滑块调整仅改变本地 UI,需点击 Apply 才会发送到设备;若未点击 Apply,5 秒后回退到设备当前值。

WebSocket 协议

WebSocket server 默认监听 81 端口。所有命令支持 led 字段指定目标 LED(缺省为 0)。

设置模式:

{ "cmd": "set_mode", "led": 0, "mode": "blink", "hz": 3 }
{ "cmd": "set_mode", "led": 1, "mode": "breathe", "period_ms": 2000 }

设置亮度:

{ "cmd": "set_brightness", "led": 0, "duty": 200 }

请求状态:

{ "cmd": "get_status" }

设备会为每个 LED 分别广播状态事件,通过 led 字段区分。示例:

{ "evt": "status", "led": 0, "uptime": 123, "mode": "blink", "hz": 3, "period_ms": 1500, "brightness": 128, "wifi_clients": 2, "ws_clients": 1, "rssi": -45, "dropped": 0 }

调试建议

  • 使用串口监视器(115200 baud)查看日志输出
  • 观察 WiFi: stations connected=XWS client connected/disconnected 日志判断网络状态
  • OLED 不亮时检查 I2C 接线和地址(默认 0x3C)

About

ESP32 WebSocket 智能 LED 控制系统

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors