硬件

ESP32S2

PZEM-004T-V3.0

LCD1602 I2C版

固件

参考链接:https://tasmota.github.io/docs/PZEM-0XX/#pzem-004

整个流程参考链接中已经说的很详细了。下面我仅对自己操作过程中出现的问题做一下记录。

我使用的 PZEM-004T-V3.0 (和 PZEM-004T-V1.0有一些区别,比如通讯协议不通用)。官方固件支持004T,不过我将接收引脚配置为 PZEM016 Rx 就能读取到 004T-V3.0 版本了。

电量模块一下就支持了,麻烦的是LCD1602,固件不支持需要自己编译。流程如下:

  1. 安装 VSCode,配置代理参考https://www.aahgo.com/post/328.html 不然后续操作有点慢。我只做了前半部分

  2. 安装 PlatformIO 插件

  3. 下载 Tasmota Releases版的源代码 Source code(zip) ,当然也可以在通过git指令拉下来。再使用 VSCode 打开项目文件夹

  4. 在 Tasmota 子文件夹中新建user_config_override.h文件,将 链接 中的文件内容拷贝进去。 Tasmota-xx.x.x\tasmota\user_config_override.h

  5. platformio_override_sample.ini 重命名为 platformio_override.ini 将 default_envs = 宏修改为自己的芯片。

  6. 点击状态栏 Switch PlatformIO Project Environment 修改为自己的芯片(我的是esp32s2),再点击Build,Upload。

    image-20250222153333839

  7. 使芯片进入下载模式。(ESP32 需要 按下IO0 按下EN 抬起EN 抬起IO0)

  8. 固件下载完成

配置

  1. 接入芯片AP热点,打开浏览器 192.168.4.1,接入路由器,记住成功显示的IP。
  2. 浏览器打开返回的 IP,进入配置页面根据硬件接线配置 I2C 和 PTEM 的引脚image-20250222154531643
    image-20250222154635208
  3. 浏览器打开 Console 输入下面的指令:
  4. I2CScan 查看返回值
  5. DeviceAddress XXX 设置LCD1602的地址。如 DeviceAddress 27
  6. TelePeriod 10 设置显示刷新的时间间隔。最小10s
  7. DisplayModel 1DisplayModel 0
  8. 新增一条Rule: Rule1 ON Tele-ENERGY#Power DO DisplayText [z] [x1y0]%value%W ENDON ON Tele-ENERGY#Today DO DisplayText [x8y0]%value%Wh ENDON ON Tele-ENERGY#Voltage DO DisplayText [x1y1]%value%V ENDON ON Tele-ENERGY#Current DO DisplayText [x8y1]%value%A ENDON
  9. 启用 Rule1 1
  10. 此时LCD屏因该有显示了,平且数据已10秒间隔开始更新。如果屏幕没有显示,第一仔细看,第二旋转电位器调高对比度(可以先调整将黑框都显示出来,有字符显示后再调回去)
  11. WEB界面会出现一个按钮,用于开关LCD背光
  12. 设置mqtt地址,Home Assistant 会自动增加和显示相关数据。

image-20250222161131089

image-20250222161153176