- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
Air780EPM + BL0939 双路免校准电能计量 Demo
声明:
严禁带电操作! 进行任何连接或拆卸前,务必断开电源。
高压危险! 测试220V时,请确保所有接线可靠,并使用隔离变压器及漏电保护器。
本介绍为技术支持页面,操作人员需具备电气安全知识,否则请勿尝试,操作风险由使用者自行承担
项目简介
Air780EPM:通过 UART1(MAIN_UART)或 SPI0 读取上海贝岭 BL0939 双路电能计量芯片,持续循环读取 + 失联自动重连,内置实机校准系数。
文件结构
user/main.lua:脚本入口user/bl0939_app.lua:业务逻辑(循环读取/换算/断线重连;MODE变量切换 uart/spi)lib/exs_bl0939.lua:BL0939 驱动扩展库(SPI/UART 双模式)
一、功能模块介绍
1.1 核心主程序模块
main.lua 为 LuatOS 脚本入口,仅负责加载业务模块并启动调度器。
业务逻辑全部在 bl0939_app.lua 中实现。
1.2 扩展库模块
exs_bl0939.lua:BL0939 驱动扩展库,封装 SPI/UART 通信、SEL 模式切换、寄存器配置、数据读取、温度与相角换算。exs_bl0939.md:扩展库 API 文档,含六章结构说明。
1.3 通信模式说明
本 Demo 支持 SPI 和 UART 两种通信模式,通过 bl0939_app.lua 顶部的 MODE 变量切换:
MODE = 1:SPI 模式(推荐),默认使用 SPI0、SEL=GPIO28(拉高)。MODE = 2:UART 模式,默认使用 UART1、4800bps、器件地址 5(SOP16L)。
BL0939 的 SEL 引脚决定通信模式:SEL=1(高电平)为 SPI,SEL=0(低电平或悬空)为 UART。 请根据实际硬件接线选择对应模式。
二、演示流程介绍
- 系统上电后等待 100ms 稳定。
- 初始化 BL0939,配置 SEL 引脚、通信接口、交流频率、RMS 刷新、快速有效值参数。
- 循环读取 10 次双路电能数据,每次间隔 1 秒。
- 打印电压、温度、A/B 双路电流、有功功率、相角、快速有效值、电能脉冲计数。
- 演示结束后关闭传感器。
注意:UART 模式下 get_data() 优先使用全电参数数据包(35 字节一次返回),响应更快。
三、演示硬件环境
3.1 硬件清单
- 支持 LuatOS 的模块(如 Air780EPM)
- BL0939 芯片或已集成模块(SOP16L 或 SSOP20L 封装)
- 电流互感器(2 路,用于 A/B 电流通道 IP1/IN1、IP2/IN2)
- 电压分压电路(用于 VP 电压通道)
- 外部上拉电阻(接 TX/SDO 引脚,规格书要求)
- 杜邦线或 PCB 转接板
3.2 接线配置
SPI 模式(MODE = 1,SEL 接高电平)
Air780EPM BL0939
SPI0_SCK ------> SCLK
SPI0_MOSI ------> RX/SDI
SPI0_MISO <------ TX/SDO(需外部上拉电阻)
GPIO28 ------> SEL (高电平选 SPI 模式)
3.3V ------> VDD
GND ------> GND
IP1/IN1 <------ 电流 A 通道采样
IP2/IN2 <------ 电流 B 通道采样
VP <------ 电压采样
注意:BL0939 SPI 不支持片选(CS),bl0939_app.lua 中 cs=20 仅为
spi.deviceSetup 所需占位 GPIO,不接 BL0939。
UART 模式(MODE = 2,SEL 接低电平或悬空)
Air780EPM BL0939
UART1_TX ------> RX/SDI (GPIO18)
UART1_RX <------ TX/SDO (GPIO17,需外部上拉电阻)
GPIO28 ------> SEL (低电平选 UART 模式)
3.3V ------> VDD
GND ------> GND
注意:
- UART 固定 4800bps,N/8/1.5,不可通过软件修改。
- SOP16L 封装器件地址固定为 5;SSOP20L 由 A4
A1 引脚电平决定 015。 - UART 模式仅需两个低速光耦即可实现隔离通信。
四、演示软件环境
4.1 开发工具
- Luatools 或 LuatOS 配套 IDE
- USB 数据线用于烧录和日志查看
4.2 内核固件
请使用支持 SPI/UART 扩展库模块的最新 LuatOS 固件。
4.3 脚本文件
main.lua:脚本入口bl0939_app.lua:业务逻辑exs_bl0939.lua:扩展库(放到脚本同级目录)exs_bl0939.md:API 文档
五、演示核心步骤
5.1 硬件准备
按 3.2 节接线,确保 BL0939 供电为 3.3V,GND 共地。 TX/SDO 引脚需接外部上拉电阻(规格书要求)。 电流互感器和电压分压电路参数需根据实际应用场景计算。
5.2 软件配置
- 打开
bl0939_app.lua。 - 根据接线方式设置
MODE = 1(SPI)或MODE = 2(UART)。 - UART 模式下,根据封装设置
UART_ADDR(SOP16L 固定 5,SSOP20L 由引脚决定)。 - 修改
voltage_ratio和current_ratio为实际采样电路参数。
注意:
SEL=GPIO28用于切换通信模式,SPI 拉高、UART 拉低;- BL0939 内部下拉,SEL 悬空默认为 UART 模式;
- UART 固定 4800bps,无法通过
baud参数修改。
5.3 软件烧录
将 main.lua、bl0939_app.lua、exs_bl0939.lua 一起烧录到模块中,重启运行。
5.4 功能测试
观察日志输出,确认初始化成功、数据读取正常。
5.5 预期效果(含实测日志)
当前测试只接了一路负载,是由一个100W 500Ω和一个200W 200Ω的功率电阻串联,测试电流为 0.318A,电压为 220V,温度为 29.2°C,部分日志如下:
[2026-08-21 15:14:44.838][000000073.994] D/user.exs_bl0939 UART PKT RX 55 BD F6 00 A2 56 01 00 00 00 BD 36 38 82 02 00 38 C5 00 00 00 00 02 00 00 00 00 00 C7 01 00 FE 03 00 37
[2026-08-21 15:14:44.853][000000074.016] D/user.exs_bl0939 UART RD RX 07 00 00 9C
[2026-08-21 15:14:44.885][000000074.037] D/user.exs_bl0939 UART RD RX FF 00 00 A3
[2026-08-21 15:14:44.893][000000074.038] I/user.bl0939 RAW V=3684029 IA=87714 IB=0 PA=50488 PB=0 W1=2 W2=0 TPS1=455
[2026-08-21 15:14:44.909][000000074.038] I/user.bl0939 电压=222.47V 温度=29.2C
[2026-08-21 15:14:44.924][000000074.039] I/user.bl0939 A路 电流=0.318A 有功=70.84W 相角=0.1 电能=0.0003kWh
[2026-08-21 15:14:44.939][000000074.039] I/user.bl0939 B路 电流=0.000A 有功=0.00W 相角=4.6 电能=0.0000kWh
5.6 故障排除
| 现象 | 排查方法 |
|---|---|
| 初始化失败 | 检查 VCC/GND 接线;确认 SEL 引脚电平与 MODE 一致;检查 SPI 或 UART 接线 |
| 数据全为 0 | 检查电压/电流采样电路是否接入;确认 IP1/IN1、IP2/IN2、VP 接线正确 |
| 温度异常 | 温度寄存器需芯片工作一段时间,上电后立即读取可能不准确 |
| UART 读取失败 | 确认 UART 固定 4800bps;检查 TX/RX 是否交叉;确认器件地址与封装一致 |
| SPI checksum 错误 | 检查 SPI0_SCK/MOSI/MISO 接线;确认 SPI 模式 1(CPOL=0/CPHA=1) |
| 相角为 0 | 确认电压通道有交流信号输入;A/B_CORNER 寄存器需过零更新 |
5.7 扩展功能建议
- 连接 CF 引脚到 GPIO,使用 GPIO 中断统计电能脉冲。
- 配置快速有效值阈值,用于 A/B 通道漏电/过流保护。
- 设置 CF 为温度报警输出,配合 temp_alert_th 实现过温保护。
- 接入校准源,写入校准系数(RMSOS/WATTOS)提高计量精度。
- 使用 SSOP20L 封装多片级联,实现多路计量。
- 通过 MQTT 或 OneNET 上传电能数据到云端。
六、参考文档
- exs_bl0939.md
- BL0939 规格书
