ESP8266 智能供电计费控制系统实战:NFC刷卡 + OLED + PZEM 计费

作者:

ESP8266 智能供电计费控制系统实战:NFC 刷卡 + OLED + PZEM 计费

这是一个我一直在做的真实项目:智能供电计费控制系统(SmartPower)——用 ESP8266 做核心,实现「刷卡供电、按量计费」的完整闭环。断断续续写了几个月,最近到 v2.4.3,记录一下架构与踩坑。

硬件清单

  • 主控:NodeMCU(ESP-12E / ESP8266)
  • 显示:SSD1306 OLED(Adafruit SSD1306 + GFX 库)
  • 身份识别:RC522 NFC 读卡(余额充值/扣费)
  • 计量:PZEM 电能表(功率/电量采集)
  • 执行:继电器(合闸/断电)
  • 通信:WiFi + WebSocket(Android App 联动)

软件架构:模块化是唯一出路

外设一多,裸奔的 .ino 就是灾难。项目按功能拆成独立头文件:wifi_manager / nfc_manager / pzem_manager / display_manager / relay_manager / billing / websocket_server,主循环只做状态机调度。开发纪律:函数不超过 50 行、单一职责、所有外设操作带超时或错误返回。

核心业务:NFC 余额体系

  • 新卡初始化余额为 0 元(v2.4.3 起从默认 100 改为 0,杜绝白嫖)
  • 用户先通过 App 给 NFC 卡充值
  • 刷卡 → 余额检查(≤0.01 拒绝通电,OLED 提示 “Low bal, topup”)→ 继电器合闸
  • PZEM 实时计量 → 按量计费扣款 → 余额不足自动断电
  • App 通过 WebSocket 实时看状态、清余额、充值

踩坑记录

  • printf float:ESP8266 默认不链接浮点打印,必须加 -Wl,-u,_printf_float,否则 OLED/串口输出全乱
  • 资源紧张:外设全开后 Flash 36.8% / RAM 46.1%——字符串能省则省,大数组移 PROGMEM
  • 初始化顺序:先配时序(Wire/SPI)再使能外设,RC522 和 OLED 抢 I2C 引脚时尤其要注意
  • 电量显示:float 计算直接用 printf_float 后精度才正常,别用整数凑

下一步

打算把项目整理后开源(固件 + Android App),同步更新 /esp12f 技术博客。如果你也在折腾 ESP8266/ESP12F,欢迎交流踩坑经验。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注