百元内DIY物联网功率计:PZEM-004T+BLE+安卓手机实现远程能耗监控
1. 项目概述一个极简主义的物联网功率计方案在智能家居和工业物联网的实践中电能监控是一个基础且高频的需求。无论是想搞清楚家里哪个电器是“电老虎”还是需要对小型车间设备的运行能耗进行精细化管理一个可靠、直观且成本可控的功率计都是必不可少的工具。市面上成熟的智能电表或能耗监测方案不少但往往要么价格高昂要么集成复杂需要搭配网关、云平台等一系列组件对于DIY爱好者和特定场景下的工程应用来说显得有些“杀鸡用牛刀”。我这次分享的方案核心思路就是“极简”和“高性价比”。它绕开了复杂的微控制器编程和网络协议栈开发利用几个成熟模块的巧妙组合快速搭建一个能测量高达100A电流、并通过互联网远程查看实时图表和历史数据的功率监控系统。整个系统的硬件核心只有两块PZEM-004T V3电能计量模块和基于CC2541芯片的蓝牙低能耗BLE模块。数据上云的桥梁则是一台几乎被淘汰的旧安卓手机。算下来硬件的物料成本可以控制在百元以内而实现的功能却相当完整电压、电流、功率、频率、电能累计值电度的实时读取以及通过MQTT协议将数据推送至私有或公共服务器进而生成可视化图表。这个方案特别适合那些希望快速验证想法、进行原型开发或者需要部署多个低成本监测点的场景。2. 核心硬件选型与设计思路解析2.1 为什么选择PZEM-004T V3模块在电能计量领域PZEM-004T是一个经久不衰的明星模块。它之所以成为众多DIY项目的首选关键在于其高度的集成化和“开箱即用”的特性。核心优势解析全参数测量单模块即可完成交流电压、电流、有功功率、频率、功率因数及累计电能kWh的测量无需用户进行复杂的校准和计算。高精度与量程以V3版本为例电压测量范围80-260V AC电流测量通过外接分流器或电流互感器实现本方案中搭配100A的电流互感器即可安全测量大电流回路。其精度对于非计量级的能耗分析完全足够。标准接口采用TTL电平的UART串口进行通信协议公开且简单。这意味着任何带有串口的控制器如Arduino、ESP8266/32都能轻松读取数据极大地降低了开发门槛。内置电源模块本身从被测线路取电通过L、N端子并集成了一个稳压电路能输出一个稳定的直流电压通常是5V或3.3V取决于版本这个设计为本方案的简化埋下了伏笔。注意市面上PZEM-004T版本较多务必确认是V3版本。早期版本在协议或引脚定义上可能有差异。购买时最好选择带有透明外壳、引脚标识清晰的模块。2.2 BLE模块的选型CC2541与“兼容模组”的奥秘传统的物联网方案中我们可能会选择Wi-Fi模块如ESP-01S直接连接路由器。但这里选择了BLE模块这是一个关键的设计折衷带来了独特的优缺点。选择BLE而非Wi-Fi的考量功耗与简化Wi-Fi模块通常需要复杂的网络配置SSID、密码且运行功耗较高。对于安装在配电箱内、可能取电不便的场景或希望设备完全“无感”运行Wi-Fi并非最佳选择。BLE模块在待机时功耗极低。职责分离本方案将“联网”这个复杂且耗电的任务剥离出来交给了安卓手机。BLE模块只负责短距离、低功耗的数据透传。这样做的好处是核心测量设备PZEMBLE变得异常简单和稳定几乎不会因为网络波动、路由器重启而失效。手机作为网关可以灵活处理网络重连、应用更新等问题。成本与可用性基于TI CC2541芯片的BLE模块常被标为HM-10、MLT-BT05、AT-09等价格极其低廉。更重要的是这些模块通常被预烧录为“串口透传”固件。这意味着它就像一个无线的串口线将PZEM-004T的TTL串口数据原封不动地转发给手机反之亦然。我们无需对BLE模块进行任何编程或烧录真正做到了即插即用。关键避坑点原文特别强调“This should NOT be a module from the manufacturer Jinan Huamao Technology”。这是因为济南华茂科技是CC2541芯片的一个知名方案商他们生产的模块功能强大但默认固件可能并非简单的串口透传可能需要AT指令复杂配置甚至需要自己烧录固件。而市面上那些廉价的“兼容模块”出厂固件就是为串口透传设计的省去了所有麻烦。购买时可以询问卖家模块是否支持“蓝牙串口透传”以及默认波特率通常为9600需与PZEM匹配。2.3 系统架构与数据流理解数据如何流动是掌握整个系统的关键采集层PZEM-004T模块通过其电压采样线和电流互感器实时采集电网参数并通过内部的计量芯片计算得到各项数据存储在内部寄存器中。传输层PZEM的TX/RX引脚连接到BLE模块的RX/TX引脚。当手机端的Electrometer应用通过BLE连接后它会以设定的时间间隔例如每秒一次向BLE模块发送一个数据请求指令。这个指令通过BLE无线传输到模块再由模块的串口转发给PZEM。PZEM收到指令后将寄存器中的数据打包通过串口发送给BLE模块BLE模块再通过蓝牙无线传回手机上的Electrometer应用。网关与云层Electrometer应用在手机上运行它解析从蓝牙收到的数据包将其转换为结构化的JSON数据。然后它作为一个MQTT客户端将这些数据发布到指定的MQTT服务器Broker。这个服务器可以是本地搭建的如Mosquitto也可以是公共的云服务如EMQX Cloud。展示层任何连接到同一个MQTT服务器的客户端如Node-RED、Home Assistant、或专用的图表应用Grafana都可以订阅这个数据主题接收到实时数据并将其用于展示、记录或自动化触发。这套架构的巧妙之处在于每一层都使用了最合适、最成熟的技术并且层与层之间通过标准接口串口、BLE、MQTT耦合使得每一部分都可以独立替换或升级。3. 硬件组装与电气连接实操详解3.1 物料清单与工具准备在开始动手前请确保你已备齐以下物品硬件组件PZEM-004T V3 电能计量模块 x1100A电流互感器通常随PZEM模块配套x1基于CC2541的BLE串口透传模块如HM-10型x1旧安卓智能手机支持BLE 4.0及以上x1导线建议使用不同颜色的硅胶线便于区分、焊锡、热缩管若干。可选小型塑料外壳用于封装PZEM和BLE模块提升安全性。软件与工具电烙铁、焊台螺丝刀、剥线钳安卓手机安装Electrometer应用可在Google Play或第三方应用市场搜索。另一台用于远程查看的设备手机/电脑安装IoT Manager应用或配置好MQTT客户端及图表软件如Node-RED。3.2 PZEM-004T与电流互感器的连接这是高压侧连接务必在完全断电的情况下操作识别端子PZEM-004T模块通常有6个接线端子标记为L火线进、L火线出、N零线进、N零线出以及两个用于连接电流互感器的端子通常无标记或标为IP、IP-。电源连接将你需要监测的电路的火线相线断开一端接入模块的“L进”另一端接入“L出”。同理零线接入“N进”和“N出”。这样模块就从被测线路获得了工作电源。请确保接线牢固线头无裸露。电流互感器连接将100A电流互感器一个可以开合的磁环套在被监测的火线上。互感器的两根输出线通常为黑、白或蓝、红不分正负地连接到PZEM模块上专用的两个电流采样端子。互感器的作用是将大电流按比例转换为小电流信号供模块测量。重要安全警告整个PZEM模块的初级侧L、N端子及电流互感器所套导线都带有220V高压电所有操作必须在断电下进行连接完成后务必检查绝缘确保模块固定稳妥不会与配电箱内其他金属部件接触。建议使用绝缘外壳封装。3.3 BLE模块与PZEM的集成焊接这是低压侧连接相对安全但需细心。供电连接这是本方案简化设计的精髓。找到PZEM-004T模块上的直流输出引脚。在V3版本上通常有一个单独的“5V”或“VCC”引脚以及“GND”引脚。用万用表确认其对模块的GND有稳定的5V输出。将BLE模块的VCC引脚通常是3.3V或5V兼容连接到此5V引脚将BLE模块的GND连接到PZEM的GND。PZEM模块内置的稳压器足以驱动一个BLE模块无需额外电源。串口连接将PZEM模块的TX发送引脚连接到BLE模块的RX接收引脚将PZEM模块的RX引脚连接到BLE模块的TX引脚。注意是交叉连接。焊接与绝缘由于引脚间距可能很小建议使用细导线和尖头烙铁仔细焊接。焊接完成后用热缩管或绝缘胶带包裹每个焊点防止短路。可以将两个模块用扎带或双面胶固定在一起减少应力。接线核对表PZEM-004T V3 引脚BLE模块如HM-10引脚说明5V / VCCVCC供电正极5VGNDGND供电地线TXRX数据PZEM发送 - BLE接收RXTX数据BLE发送 - PZEM接收完成以上步骤后你的核心测量终端就组装好了。它是一个由PZEM供电并与之通信的无线数据发送器。4. 智能手机网关的配置与Electrometer应用详解旧安卓手机在这里扮演着“智能网关”的角色。它需要长时间插电运行并保持Electrometer应用在后台持续工作。4.1 Electrometer应用基础设置安装与启动在作为网关的旧手机上安装Electrometer应用。首次打开应用会请求必要的权限蓝牙、位置、网络等请全部允许。扫描与连接BLE设备进入应用主界面它应该会自动开始扫描附近的BLE设备。找到你的BLE模块名称可能是“HM-10”、“CC2541”或一串随机字符。点击连接。连接成功后应用界面通常会显示已连接的设备名称。配置读取参数在应用设置中找到与数据读取相关的选项Ticktime关键参数这是应用通过BLE向PZEM模块请求数据的频率单位是毫秒ms。例如设置为1000就是每秒读取一次。不建议设置得过小如小于200ms以免给模块和蓝牙连接带来不必要的负担1-5秒的间隔对于能耗监控来说已经足够精细。数据字段确认应用能正确识别并解析PZEM-004T的数据格式。Electrometer通常已内置对PZEM协议的支持会自动显示电压、电流、功率等读数。4.2 MQTT服务器配置实现数据上云这是将数据推向互联网的关键一步。你需要一个MQTT服务器作为数据中转站。获取MQTT服务器信息公共服务器可以使用免费的公共MQTT Broker进行测试例如broker.emqx.io(端口 1883)。私有服务器对于长期稳定使用强烈建议在自有服务器如树莓派、VPS上搭建Mosquitto或使用专业的物联网云平台如阿里云IoT、腾讯云IoT提供的MQTT服务。这样数据更安全可控。在Electrometer中配置MQTTServerURI填写你的MQTT服务器地址和端口例如mqtt://broker.emqx.io:1883或tcp://你的服务器IP:1883。Prefix前缀这是一个非常重要的命名空间。建议设置为一个唯一的标识符如home/power_meter/living_room。所有数据主题都会以此前缀开头避免与其他设备冲突。MQTT Name/Pass如果服务器需要认证填写用户名和密码。Datatime数据上报时间这个参数有些特殊它指的是应用持续向MQTT服务器发布数据的时间长度秒。例如设置为3600则连接后的一小时内会持续发布数据之后停止。如果希望永久发布可以将其设置为一个很大的值如999999或者查阅应用文档看是否有“持续发布”模式。这里容易误解需要根据实际需求调整。4.3 告警与邮件通知配置Electrometer支持简单的阈值告警并通过邮件发送通知。邮件服务器SMTP配置在设置中找到SMTP相关选项。你需要提供发送邮件的服务器地址如smtp.gmail.com、端口如587、发件邮箱地址、以及该邮箱的授权码注意不是邮箱密码通常需要在邮箱设置中申请应用专用密码。设置告警规则在“Control”或类似标签页下可以设置告警条件。语法如原文所述Enter value 220然后选择选项Voltage表示当电压低于220V时触发。Enter value 1500然后选择选项Active Power表示当有功功率大于1500W时触发。Enter value 然后选择选项charging可能是用于监控手机网关自身的充电状态。设置好后当条件满足时应用会调用你配置的SMTP服务器向指定邮箱发送告警邮件。配置完成后务必点击“Save and restart app”按钮并重启Electrometer应用以使所有设置生效。此时你的手机应该已经稳定地连接着BLE模块并定期将读取到的电力数据发布到你配置的MQTT服务器上了。5. 数据可视化与远程访问方案实现数据到达MQTT服务器后如何变成我们看得懂的图表这里提供几个最实用的方案。5.1 使用Node-RED创建仪表盘推荐Node-RED是一个基于流的低代码编程工具特别适合处理IoT数据搭建仪表盘非常简单。安装与运行在服务器树莓派、云主机或本地电脑上安装Node-RED。安装后通过浏览器访问其管理界面通常为http://服务器IP:1880。订阅MQTT数据从左侧节点面板拖入一个mqtt in节点。双击配置创建一个新的MQTT服务器连接指向你的Broker并设置“Topic”为你Electrometer中配置的Prefix加上具体的数值主题例如home/power_meter/living_room/active_power。也可以使用通配符#订阅所有子主题如home/power_meter/living_room/#。部署后该节点下方出现连接状态绿色圆点表示连接成功。解析与转换数据MQTT节点输出的msg.payload通常是字符串。你可以使用function节点或json节点将其解析为JavaScript对象方便后续处理。创建可视化UI拖入chart节点需要安装node-red-dashboard节点集将其连接到数据流后。双击配置图表类型折线图、仪表盘等、时间范围、颜色等。打开Node-RED Dashboard的URL通常是http://服务器IP:1880/ui一个实时更新的功率图表就出现了。你可以同时添加多个图表和仪表盘来显示电压、电流等其他参数。数据持久化如果需要历史数据回溯可以添加file节点将数据定期写入文件或者使用influxdb节点将数据存入InfluxDB时序数据库再通过Grafana展示这将提供更强大的分析能力。5.2 使用IoT Manager手机应用直接查看这是一个更轻量级的移动端方案。在你的日常使用的手机上安装IoT Manager应用。在应用中添加一个新的MQTT连接配置好服务器地址、端口、认证信息与Electrometer中配置的一致。添加控件。通常你需要添加“Label”或“Chart”控件在控件的设置中将其“Topic”属性绑定到Electrometer发布的具体数据主题上例如home/power_meter/living_room/active_power。保存后主界面就会显示从MQTT服务器订阅到的实时数据或图表。你可以随时随地打开APP查看家里的用电情况。5.3 集成到Home Assistant智能家居平台如果你已经在使用Home AssistantHA集成此功率计将极大提升其价值。在HA中配置MQTT集成确保HA的configuration.yaml文件中已启用MQTT集成并正确配置了Broker连接信息。配置MQTT传感器在HA中MQTT设备可以通过“自动发现”或手动配置添加。手动配置更可控。在configuration.yaml中添加如下配置以有功功率为例sensor: - platform: mqtt name: 客厅有功功率 state_topic: home/power_meter/living_room/active_power unit_of_measurement: W value_template: {{ value_json.value }} # 假设Electrometer发布的是JSON格式包含value字段 device_class: power重启HA保存配置并重启Home Assistant。创建仪表盘在HA的Lovelace界面中你可以添加“仪表盘卡片”、“历史图表卡片”或“迷你图表卡片”来展示这个传感器的实时值和历史曲线。你还可以基于功率值创建自动化例如“当功率持续10分钟低于10W自动关闭某个智能插座”实现节能联动。6. 常见问题排查与优化技巧实录在实际部署和运行中你可能会遇到以下问题。这里是我踩过坑后总结的排查思路和解决技巧。6.1 蓝牙连接不稳定或频繁断开现象Electrometer应用频繁显示蓝牙断开重连数据时有时无。排查与解决距离与干扰确保作为网关的手机与BLE模块之间的距离在10米以内无遮挡并远离大功率电器、Wi-Fi路由器等可能产生2.4GHz干扰的设备。手机电源管理这是最常见的原因安卓系统会为了省电强制关闭后台应用的网络和蓝牙活动。你必须为Electrometer应用和手机系统设置“电池优化白名单”。进入手机设置 应用 Electrometer 电池将选项设置为“无限制”或“不优化”。在手机设置中搜索“休眠”或“待机优化”将Electrometer应用添加到“不受待机优化应用”列表中。某些品牌手机进入“手机管家”类应用将Electrometer锁定在后台防止被清理。模块供电用万用表测量PZEM提供给BLE模块的电压是否稳定在5V左右。电压过低可能导致模块工作异常。6.2 MQTT数据无法接收或时延大现象Node-RED或IoT Manager订阅不到数据或者数据更新间隔远大于设置的Ticktime。排查与解决检查MQTT连接状态首先确认Electrometer应用内的MQTT连接状态是否显示为“已连接”。检查ServerURI、端口、用户名密码是否正确。验证网络连通性确保作为网关的手机可以正常访问你配置的MQTT服务器地址和端口。可以在手机上用网络测试工具Ping一下或使用TCP连接测试应用。检查Datatime参数重点检查确认Electrometer中的Datatime参数没有被误设为一个小数值。如果设为60那么它只会发布一分钟数据就停止。将其设为一个很大的值如86400代表一天或根据应用说明设置为0持续发布。查看MQTT Broker日志如果你有自己的Mosquitto服务器查看其运行日志可以看到是否有客户端连接和发布消息这是最直接的诊断方式。6.3 测量数据不准或跳变现象显示的功率、电流值与用钳形表等工具测量的结果有较大偏差或数值不稳定。排查与解决电流互感器安装确保互感器紧密套在单根火线上且方向正确虽然PZEM通常不区分极性但最好按说明书安装。互感器开口要完全闭合。负载类型PZEM-004T测量的是有功功率对于非线性负载如电脑开关电源、LED驱动器其电流波形畸变可能导致测量存在一定误差这是大多数低成本计量方案的共性。接线接触检查所有接线端子是否拧紧特别是电流互感器的二次侧接线接触不良会导致读数跳动。模块校准高级PZEM-004T模块本身有微小的误差。理论上可以通过发送特定的Modbus指令修改其内部校准寄存器但这需要额外的编程工具和标准源一般不推荐普通用户操作。6.4 系统长期运行稳定性优化手机网关选择一款电池老化但功能正常的旧手机长期插电运行需注意散热避免阳光直射。可以开启“开发者选项”中的“保持充电时屏幕常亮”或使用“咖啡”等防休眠应用并关闭所有不必要的应用和通知。数据备份MQTT消息默认是即时的Broker重启后历史数据会丢失。对于重要的能耗数据一定要配置持久化方案。最简单的办法是在Node-RED中使用function节点将每条消息加上时间戳然后写入CSV文件或数据库。多路监测如果你想监控多个电路可以购买多个PZEM-004T和BLE模块每个电路一套。让同一个手机网关上的Electrometer应用如果支持多设备连接或部署多个手机网关分别连接不同的BLE模块并通过不同的MQTT主题前缀Prefix进行区分即可。这样一台旧手机就能管理多个监测点成本优势更加明显。这个基于PZEM-004T和BLE的功率计方案其魅力在于用极低的成本和最简单的技术拼图解决了一个实实在在的物联网感知层需求。它剥离了复杂的嵌入式网络编程将可靠性建立在几个非常成熟的工业模块之上。对于初学者它是一个绝佳的物联网入门项目对于开发者它是一个快速验证和部署的原型利器。当你第一次在手机图表上看到自家空调启动时那条陡然上升的功率曲线时那种对能源消耗的直观感知正是技术带给我们的乐趣与价值所在。