Atom Socket Base

ATOMSocketBase 类是一款与 M5 ATOM 控制器集成的智能电源插座。它内置 HLW8032 高精度功率测量 IC,可测量负载的电压、电流、功率和电能。此外,它还可作为智能插座控制负载的供电状态,适用于智能家居、工业控制和能源管理等应用场景。

支持以下产品:

ATOMSocketBase

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 base import ATOMSocketBase
 9from hardware import *
10
11
12atomsocket = None
13
14
15as_voltage = None
16as_current = None
17as_power = None
18as_kwh = None
19onoff = None
20
21
22def atom_socket_receive_event(voltage, current, power, kwh):
23    global atomsocket, as_voltage, as_current, as_power, as_kwh, onoff
24    as_voltage = voltage
25    as_current = current
26    as_power = power
27    as_kwh = kwh
28    print("hello M5")
29    print("hello M5")
30
31
32def btnA_wasClicked_event(state):  # noqa: N802
33    global atomsocket, as_voltage, as_current, as_power, as_kwh, onoff
34    onoff = not onoff
35    if onoff:
36        atomsocket.set_relay(True)
37    else:
38        atomsocket.set_relay(False)
39
40
41def setup():
42    global atomsocket, as_voltage, as_current, as_power, as_kwh, onoff
43
44    M5.begin()
45    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btnA_wasClicked_event)
46
47    atomsocket = ATOMSocketBase(1, port=(22, 33), relay=23)
48    onoff = False
49    atomsocket.set_relay(False)
50    atomsocket.receive_none_block(atom_socket_receive_event)
51
52
53def loop():
54    global atomsocket, as_voltage, as_current, as_power, as_kwh, onoff
55    M5.update()
56
57
58if __name__ == "__main__":
59    try:
60        setup()
61        while True:
62            loop()
63    except (Exception, KeyboardInterrupt) as e:
64        try:
65            from utility import print_error_msg
66
67            print_error_msg(e)
68        except ImportError:
69            print("please update to latest firmware")

UiFlow2 应用示例:

example.png

atomlite_socket_example.m5f2

class ATOMSocketBase

Constructors

class ATOMSocketBase(_id: Literal[0, 1, 2], port: list | tuple, relay: int = 23)

初始化 ATOM Socket。

  • _id:串行 ID,该 base 实际未使用。

  • port:UART 引脚编号。

  • relay:继电器引脚编号。

UIFLOW2:

init.png

Methods

ATOMSocketBase.set_relay(state: bool) None

设置 ATOM Socket 的继电器状态。

  • state:继电器的期望状态,True = ON,False = OFF。

UIFLOW2:

set_relay.png

ATOMSocketBase.get_data(timeout=3000) tuple

从 ATOM Socket 获取数据。

  • timeout:函数超时时间。

ATOM Socket 数据:Tuple (Voltage (V), Current (A), Power (W), Total Energy (KWh)),若发生超时则返回 None。

UIFLOW2:

get_data.png

ATOMSocketBase.get_voltage() float

从 ATOM Socket 获取电压测量值。

UIFLOW2:

get_voltage.png

ATOMSocketBase.get_current() float

从 ATOM Socket 获取当前测量值。

UIFLOW2:

get_current.png

ATOMSocketBase.get_power() float

从 ATOM Socket 获取功率测量值。

UIFLOW2:

get_power.png

ATOMSocketBase.get_pf() int

从 ATOM Socket 获取功率因数。

UIFLOW2:

get_pf.png

ATOMSocketBase.get_inspecting_power() float

计算 ATOM Socket 的检测功率。

UIFLOW2:

get_inspecting_power.png

ATOMSocketBase.get_power_factor() float

计算 ATOM Socket 的功率因数。

UIFLOW2:

get_power_factor.png

ATOMSocketBase.get_kwh() float

从 ATOM Socket 获取累计能量测量值(单位:KWh)。

UIFLOW2:

get_kwh.png

ATOMSocketBase.stop_receive_data() None

停止从 ATOM Socket 接收数据。

UIFLOW2:

stop_receive_data.png

ATOMSocketBase.receive_none_block(receive_callback) None

以非阻塞模式从 ATOM Socket 接收数据。

  • receive_callback:用于处理接收到的数据的回调函数。

UIFLOW2:

receive_none_block.png