ACMeasure 单元

C Measure Unit 是一款具备隔离能力的单相 AC 测量模块。它采用 STM32+HLW8032 方案,可实时监测高精度的电流、电压、功率等数据。该模块内置 AC 隔离芯片 B0505ST16-W5,并通过 EL357 光耦隔离芯片与 STM32 通信。

支持以下产品:

ACMeasureUnit

MicroPython 应用示例

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from hardware import *
 9from unit import ACMeasureUnit
10
11
12label0 = None
13title0 = None
14label1 = None
15i2c0 = None
16ac_measure_0 = None
17
18
19def setup():
20    global label0, title0, label1, i2c0, ac_measure_0
21
22    M5.begin()
23    Widgets.fillScreen(0x222222)
24    label0 = Widgets.Label("label0", 1, 81, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
25    title0 = Widgets.Title(
26        "ACMeasureUnit CoreS3 Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18
27    )
28    label1 = Widgets.Label("label1", 1, 125, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
29
30    i2c0 = I2C(0, scl=Pin(1), sda=Pin(2), freq=100000)
31    ac_measure_0 = ACMeasureUnit(i2c0, 0x42)
32
33
34def loop():
35    global label0, title0, label1, i2c0, ac_measure_0
36    M5.update()
37    label0.setText(str((str("Voltage:") + str((ac_measure_0.get_voltage_str())))))
38    label1.setText(str((str("Current:") + str((ac_measure_0.get_current_str())))))
39    M5.update()
40
41
42if __name__ == "__main__":
43    try:
44        setup()
45        while True:
46            loop()
47    except (Exception, KeyboardInterrupt) as e:
48        try:
49            from utility import print_error_msg
50
51            print_error_msg(e)
52        except ImportError:
53            print("please update to latest firmware")

UiFlow2 应用示例

example.png

acmeasure_cores3_example.m5f2

class ACMeasureUnit

Constructors

class ACMeasureUnit(i2c, address)

通过设置 I2C 端口和 AC Measure 从机地址来初始化 AC Measure 单元。

参数:
  • i2c – 用于通信的 I2C 接口对象或 PAHUBUnit。

  • address – AC Measure 单元的 I2C 地址,默认为 0x42。

UiFlow2

init.png

Methods

ACMeasureUnit.init_i2c_address(slave_addr)

初始化 AC Measure Unit 的 I2C 地址。

参数:

slave_addr (int) – AC Measure Unit 的 I2C 地址应在 1 到 127 之间。

ACMeasureUnit.get_voltage_str()

从 AC Measure 单元获取电压字符串值。

返回:

电压值的字符串。

UiFlow2

get_voltage_str.png

ACMeasureUnit.get_current_str()

从 AC Measure 单元获取当前字符串值。

返回:

当前值的字符串。

UiFlow2

get_current_str.png

ACMeasureUnit.get_active_power_str()

从 AC Measure 单元获取有功功率字符串值。

返回:

有功功率值的字符串。

UiFlow2

get_active_power_str.png

ACMeasureUnit.get_apparent_power_str()

从 AC Measure 单元获取视在功率的字符串值。

返回:

视在功率值的字符串。

UiFlow2

get_apparent_power_str.png

ACMeasureUnit.get_power_factor_str()

从 AC Measure 单元获取功率因数字符串值。

返回:

作为字符串的功率因数值。

UiFlow2

get_power_factor_str.png

ACMeasureUnit.get_kwh_str()

从 AC Measure 单元获取 kWh 字符串值。

返回:

kWh 值的字符串。

UiFlow2

get_kwh_str.png

ACMeasureUnit.get_voltage_byte()

从 AC Measure Unit 获取原始电压值。

返回:

原始电压值(整数)。

UiFlow2

get_voltage_byte.png

ACMeasureUnit.get_current_byte()

从 AC Measure 单元获取原始电流值。

返回:

原始电流值,类型为整数。

UiFlow2

get_current_byte.png

ACMeasureUnit.get_active_power_byte()

从 AC Measure 单元获取原始有功功率值。

返回:

原始有功功率值(整数)。

UiFlow2

get_active_power_byte.png

ACMeasureUnit.get_apparent_power_byte()

从 AC Measure Unit 获取原始视在功率值。

返回:

原始视在功率值(整数)。

UiFlow2

get_apparent_power_byte.png

ACMeasureUnit.get_power_factor_byte()

从 AC Measure 单元获取原始功率因数值。

返回:

原始功率因数值(整数)。

UiFlow2

get_power_factor_byte.png

ACMeasureUnit.get_kwh_byte()

从 AC Measure 单元获取原始的 kWh 值。

返回:

原始 kWh 值,类型为整数。

UiFlow2

get_kwh_byte.png

ACMeasureUnit.get_voltage_coeff()

从 AC Measure 单元获取电压系数值。

返回:

电压系数值,类型为整数。

UiFlow2

get_voltage_coeff.png

ACMeasureUnit.set_voltage_coeff(value)

设置 AC Measure 单元的电压系数值。

参数:

value (int) – 要设置的电压系数值,范围为 0 到 255。

UiFlow2

set_voltage_coeff.png

ACMeasureUnit.get_current_coeff()

从 AC Measure 单元获取当前系数值。

返回:

当前系数值(整数)。

UiFlow2

get_current_coeff.png

ACMeasureUnit.set_current_coeff(value)

设置 AC Measure 单元的当前系数值。

参数:

value (int) – 要设置的当前系数值,范围为 0 到 255。

UiFlow2

set_current_coeff.png

ACMeasureUnit.set_save_coeff()

将电压和电流系数值保存到 flash 存储器中。

UiFlow2

set_save_coeff.png

ACMeasureUnit.get_data_ready()

检查 AC Measure 单元数据是否已准备好。

返回:

如果数据已准备好,则为 True,否则为 False。

UiFlow2

get_data_ready.png

ACMeasureUnit.set_jump_bootloader()

将 AC Measure 单元设置为跳转到 bootloader。

ACMeasureUnit.get_device_status(mode)

根据指定的模式获取固件版本或 I2C 地址。

参数:

mode (int) – 用于选择所需状态的模式(0xFE 表示固件版本,0xFF 表示 I2C 地址)。

返回:

以整数形式返回所请求的设备状态。

UiFlow2

get_device_status.png

ACMeasureUnit.set_i2c_address(addr)

为 AC Measure 单元设置新的 I2C 地址。

参数:

addr (int) – 要设置的新 I2C 地址,范围为 0x01 到 0x7F。

UiFlow2

set_i2c_address.png