Skip to content

Repository files navigation

ESP01S Web Dashboard

基于 ESP-01S 的 Bambu Lab 3D 打印机状态监控与继电器自动控制系统。通过 MQTT over TLS (端口 8883) 直连局域网打印机,实时获取打印状态,并根据状态、温度或手动指令自动控制外接继电器。

功能特性

  • 打印机状态监控:局域网直连(无需云端),实时状态中文化显示,可配置刷新间隔(1~3600 秒,默认 300 秒)

  • 继电器自动控制(4 种模式):

    模式 说明
    根据打印状态 「打印中」时开启,打印结束后按设定延时关闭(0~360 分钟)
    根据喷嘴温度 ≥ 开启温度时开,≤ 关闭温度时关
    根据热床温度 同上
    手动控制 网页按钮或 API 切换(手动切换会自动切到手动模式,避免被自动逻辑覆盖)
  • Web 仪表盘:单页面集成状态与配置,深色主题,响应式布局,3 秒局部刷新,表单脏标记检测

  • 配置与维护

    • 未配置 WiFi (或WiFi连接失败时)自动进入 AP 模式(SSID: ESP01S-Dashboard,密码 12345678http://192.168.4.1)
    • 配置持久化到 Flash(Preferences 库)
    • 「测试连接」功能验证打印机参数
    • 网页一键重启 / 恢复出厂 / OTA 固件升级
    • 硬件恢复出厂:开机 10 秒内按 RST 4 次

中文化仅在显示层,内部状态机仍用英文常量。对照见打印机状态对照表

硬件需求

组件 说明
ESP-01S ESP8266 ESP-01S 模块
ESP01S Relay 模块 GPIO0 控制,低电平有效(LOW=ON)
3.3V 供电 继电器吸合时电流较大,建议独立电源

引脚:RELAY_PIN = GPIO0(继电器),LED_BUILTIN(状态指示:AP/连接中闪烁,已连接常灭)。

软件依赖

ESP8266 Arduino Core 自带:ESP8266WiFiESP8266WebServerWiFiClientSecure(含 BearSSL)、PreferencesUpdater(OTA)

需额外安装:ArduinoJson(JSON 序列化)

Core 建议 ≥ 3.0.0。user_interface.h 为 ESP8266 SDK 自带。

配置

  1. 复制 config.example.hconfig.h(已被 .gitignore 忽略)
  2. 填入 WiFi、打印机 IP/序列号/访问代码等值(兜底默认值,后续均可通过网页修改)
  3. 编译上传到 ESP-01S
#define DEBUG_SERIAL                       // 生产环境注释掉以移除调试输出减小固件体积
#define BAMBU_PRINTER_IP "192.168.1.100"  // 打印机 IP 地址
#define BAMBU_PRINTER_SERIAL "0000000000000000" // 打印机序列号
#define BAMBU_PRINTER_ACCESS_CODE "00000000" // 打印机访问代码
#define BAMBU_PRINTER_PORT 8883              // 打印机 MQTT 端口
#define WIFI_SSID "your_wifi_ssid"          // WiFi SSsid
#define WIFI_PASSWORD "your_wifi_password"  // WiFi 密码

使用方法

首次启动:上电 → AP 模式(LED 闪烁)→ 连 SSID ESP01S-Dashboard → 访问 http://192.168.4.1 填 WiFi → 重启后连 WiFi(LED 灭)→ 路由器查 IP → 访问仪表盘

日常使用:网页自动 3 秒刷新状态;继电器卡片配置模式/阈值/延时;展开「WiFi/打印机配置」改参数或测试连接;手动按钮切换继电器(自动切手动模式)

OTA 升级:Arduino IDE 项目 → 导出已编译二进制文件 → 仪表盘展开「WiFi/打印机配置」→「固件升级」卡片选 .bin 上传 → 自动重启

OTA 约束:新固件大小需要小于 OTA 可用空间(见仪表盘系统信息),否则只能通过串口烧录。 OTA 端点暂无认证拦截,请仅在可信局域网使用。

恢复出厂:网页点「恢复出厂」,或开机 10 秒内按 RST 4 次

HTTP API

方法 路径 说明
GET / 主仪表盘页面
GET /wifi 首次配置 WiFi 页面
POST /save 保存打印机/继电器配置(返回 JSON)
POST /savewifi 保存 WiFi 配置(AJAX 返回 JSON;表单提交则重启)
GET /relay?state=0|1 切换继电器(自动切手动模式)
GET /api/trigger-refresh 触发后台拉取打印机状态(返回 {"ok":true}
POST /connect-printer 用传入参数测试连接(不保存),返回 JSON
POST /update OTA 升级(multipart 上传 .bin,成功后重启)
GET /reboot 重启设备
GET /factoryreset 恢复出厂并重启

系统信息

仪表盘「系统信息」卡片显示内存与 Flash 占用百分比及明细:

  • 内存(总堆 - 空闲堆) / 总堆,绿 <70% · 橙 70-90% · 红 >90%
  • Flash固件大小 / (固件空间 + OTA空间),同上配色

继电器逻辑

根据打印状态(状态机):检测到「打印中」→ 立即开;离开「打印中」→ 记录结束时间 → 延时 0 分钟则立即关,否则等待 delayOffMinutes 后关

温度模式(滞回控制):温度 ≥ relayOnTemp 且继电器关 → 开;温度 ≤ relayOffTemp 且继电器开 → 关

打印机状态对照表

英文常量 (gcode_state) 中文显示 说明
IDLE 空闲 就绪,未在打印
RUNNING 打印中 正在打印(继电器触发条件)
PAUSE 暂停中 过渡态
PAUSED 已暂停 稳定态
RESUME 恢复中 过渡态
FINISH / FINISHED 已完成 打印完成
FAILED 打印失败 失败或手动取消
PREPARE / PREPARING 准备中 调平等准备
SLICING 切片中 正在切片
REBOOTING 重启中 打印机重启
BOOTING 启动中 打印机启动
UNKNOWN / -- 未知 状态未知

翻译函数大小写不敏感;打印机仅下发英文 gcode_state,未识别值原样显示。见 web_pages.htranslatePrinterStatus()

常见问题

现象 原因 / 解决
PRINTER OFF 打印机 IP 错误或离线
PRINTER MQTT TLS 成功但 MQTT 握手失败,检查访问代码
PRINTER AUTH 访问代码错误
PRINTER MEM 堆内存不足,缩短刷新间隔或重启
PRINTER TIMEOUT 10 秒未收到状态,可能序列号错误
进入 AP 但已配置过 WiFi 丢失超时,等待或检查路由器;5 分钟后自动重连
网页按钮失效 分片传输导致 <script> 损坏,用当前固件

项目结构

esp01s-web-dashboard/
├── esp01s-web-dashboard.ino  # 主程序:WiFi/MQTT/Web/继电器
├── web_pages.h               # HTML/CSS/JS 页面生成
├── types.h                   # 数据结构
├── config.example.h          # 配置模板
└── .gitignore

许可

MIT License © 2025 weilong

Bambu Lab 是 Bambu Lab 的商标,本项目与其无关联。

About

基于ESP01S的BambuLab拓竹打印机的Web仪表盘+继电器控制。

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages