SwitchC6

SwitchC6是一个可以通过M5Stack平台控制的设备。此模块提供与SwitchC6设备交互的功能。

UIFLOW2 应用示例

SwitchC6控制

在UiFlow2中打开|cores3_switchc6_example.m5f2|项目。

此示例演示如何使用UiFlow2控制SwitchC6设备。

UiFlow2代码块:

cores3_switchc6_example.png

示例输出:

None

MicroPython 应用示例

SwitchC6控制

此示例演示如何使用MicroPython控制SwitchC6设备。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8import m5ui
  9import lvgl as lv
 10import switchc6
 11
 12
 13page0 = None
 14switch0 = None
 15label0 = None
 16label1 = None
 17label2 = None
 18label3 = None
 19switchc6_controller = None
 20
 21
 22switchc6_target_mac = None
 23switchc6_onoff = None
 24switchc6_voltage = None
 25
 26
 27def switch0_checked_event(event_struct):
 28    global \
 29        page0, \
 30        switch0, \
 31        label0, \
 32        label1, \
 33        label2, \
 34        label3, \
 35        switchc6_controller, \
 36        switchc6_target_mac, \
 37        switchc6_onoff, \
 38        switchc6_voltage
 39    switchc6_controller.toggle_switch("E4B3-2386-18B8", timeout=2000)
 40
 41
 42def switchc6_controller_off_event(args):
 43    global \
 44        page0, \
 45        switch0, \
 46        label0, \
 47        label1, \
 48        label2, \
 49        label3, \
 50        switchc6_controller, \
 51        switchc6_target_mac, \
 52        switchc6_onoff, \
 53        switchc6_voltage
 54    _, switchc6_target_mac, switchc6_onoff, switchc6_voltage = args
 55    label0.set_text(str(switchc6_target_mac))
 56    label1.set_text(str(switchc6_onoff))
 57    label2.set_text(str(switchc6_voltage))
 58
 59
 60def switch0_unchecked_event(event_struct):
 61    global \
 62        page0, \
 63        switch0, \
 64        label0, \
 65        label1, \
 66        label2, \
 67        label3, \
 68        switchc6_controller, \
 69        switchc6_target_mac, \
 70        switchc6_onoff, \
 71        switchc6_voltage
 72    switchc6_controller.set_switch("E4B3-2386-18B8", False, timeout=2000)
 73
 74
 75def switchc6_controller_on_event(args):
 76    global \
 77        page0, \
 78        switch0, \
 79        label0, \
 80        label1, \
 81        label2, \
 82        label3, \
 83        switchc6_controller, \
 84        switchc6_target_mac, \
 85        switchc6_onoff, \
 86        switchc6_voltage
 87    _, switchc6_target_mac, switchc6_onoff, switchc6_voltage = args
 88    label0.set_text(str(switchc6_target_mac))
 89    label1.set_text(str(switchc6_onoff))
 90    label2.set_text(str(switchc6_voltage))
 91
 92
 93def switch0_event_handler(event_struct):
 94    global \
 95        page0, \
 96        switch0, \
 97        label0, \
 98        label1, \
 99        label2, \
100        label3, \
101        switchc6_controller, \
102        switchc6_target_mac, \
103        switchc6_onoff, \
104        switchc6_voltage
105    event = event_struct.code
106    obj = event_struct.get_target_obj()
107    if event == lv.EVENT.VALUE_CHANGED:
108        if obj.has_state(lv.STATE.CHECKED):
109            switch0_checked_event(event_struct)
110        else:
111            switch0_unchecked_event(event_struct)
112    return
113
114
115def setup():
116    global \
117        page0, \
118        switch0, \
119        label0, \
120        label1, \
121        label2, \
122        label3, \
123        switchc6_controller, \
124        switchc6_target_mac, \
125        switchc6_onoff, \
126        switchc6_voltage
127
128    M5.begin()
129    Widgets.setRotation(1)
130    m5ui.init()
131    page0 = m5ui.M5Page(bg_c=0xFFFFFF)
132    switch0 = m5ui.M5Switch(
133        x=76,
134        y=49,
135        w=154,
136        h=77,
137        bg_c=0xE7E3E7,
138        bg_c_checked=0x2196F3,
139        circle_c=0xFFFFFF,
140        parent=page0,
141    )
142    label0 = m5ui.M5Label(
143        "label0",
144        x=19,
145        y=151,
146        text_c=0x000000,
147        bg_c=0xFFFFFF,
148        bg_opa=0,
149        font=lv.font_montserrat_14,
150        parent=page0,
151    )
152    label1 = m5ui.M5Label(
153        "label1",
154        x=17,
155        y=173,
156        text_c=0x000000,
157        bg_c=0xFFFFFF,
158        bg_opa=0,
159        font=lv.font_montserrat_14,
160        parent=page0,
161    )
162    label2 = m5ui.M5Label(
163        "label2",
164        x=17,
165        y=195,
166        text_c=0x000000,
167        bg_c=0xFFFFFF,
168        bg_opa=0,
169        font=lv.font_montserrat_14,
170        parent=page0,
171    )
172    label3 = m5ui.M5Label(
173        "label3",
174        x=18,
175        y=217,
176        text_c=0x000000,
177        bg_c=0xFFFFFF,
178        bg_opa=0,
179        font=lv.font_montserrat_14,
180        parent=page0,
181    )
182
183    switch0.add_event_cb(switch0_event_handler, lv.EVENT.ALL, None)
184
185    page0.screen_load()
186    switchc6_controller = switchc6.SwitchC6Controller(
187        ["E4B3-2386-18B8"], wifi_channel=0, verbose=False
188    )
189    switchc6_controller.set_callback(switchc6_controller_off_event, switchc6_controller.OFF)
190    switchc6_controller.set_callback(switchc6_controller_on_event, switchc6_controller.ON)
191    label3.set_text(str(switchc6_controller.get_firmware_version("E4B3-2386-18B8", timeout=5000)))
192    label1.set_text(str(switchc6_controller.get_capacitor_voltage("E4B3-2386-18B8", timeout=5000)))
193    label2.set_text(str(switchc6_controller.get_switch_status("E4B3-2386-18B8", timeout=5000)))
194
195
196def loop():
197    global \
198        page0, \
199        switch0, \
200        label0, \
201        label1, \
202        label2, \
203        label3, \
204        switchc6_controller, \
205        switchc6_target_mac, \
206        switchc6_onoff, \
207        switchc6_voltage
208    M5.update()
209
210
211if __name__ == "__main__":
212    try:
213        setup()
214        while True:
215            loop()
216    except (Exception, KeyboardInterrupt) as e:
217        try:
218            m5ui.deinit()
219            from utility import print_error_msg
220
221            print_error_msg(e)
222        except ImportError:
223            print("please update to latest firmware")

示例输出:

None

API参考

SwitchC6Controller

class iot_devices.switchc6.SwitchC6Controller(target_mac, wifi_channel=0, verbose=False)

基类:object

创建SwitchC6Controller实例来控制M5Stack SwitchC6设备。

参数:
  • target_mac (list) – “XXXX-XXXX-XXXX”格式的目标MAC地址列表。

  • wifi_channel (int) – 用于通信的WiFi信道(默认为0,使用当前信道)。

  • verbose (bool) – 如果为True,打印调试信息(默认为False)。

抛出:

ValueError – 如果target_mac中的任何MAC地址不符合”XXXX-XXXX-XXXX”格式。

UiFlow2代码块:

init.png

MicroPython 代码块:

import switchc6

controller = switchc6.SwitchC6Controller(
    target_mac=["1122-AABB-CCDD", "2233-BBEE-DDEE"],
    wifi_channel=0,
    verbose=True
)
set_switch(target_mac, onoff, timeout=5000)

设置目标设备的开关状态。

参数:
  • target_mac (str) – “XXXX-XXXX-XXXX”格式的目标MAC地址。

  • onoff (bool) – True表示开启,False表示关闭。

  • timeout (int) – 等待响应的超时时间(毫秒)(默认为5000)。

UiFlow2代码块:

set_switch.png

MicroPython 代码块:

switchc6.set_switch("1122-AABB-CCDD", True, timeout=5000)
toggle_switch(target_mac, timeout=5000)

切换目标设备的开关状态。

参数:
  • target_mac (str) – “XXXX-XXXX-XXXX”格式的目标MAC地址。

  • timeout (int) – 等待响应的超时时间(毫秒)(默认为5000)。

UiFlow2代码块:

toggle_switch.png

MicroPython 代码块:

switchc6.toggle_switch("1122-AABB-CCDD", timeout=5000)
get_capacitor_voltage(target_mac, timeout=5000)

获取目标设备的电容电压。

参数:
  • target_mac (str) – “XXXX-XXXX-XXXX”格式的目标MAC地址。

  • timeout (int) – 等待响应的超时时间(毫秒)(默认为5000)。

返回:

电容电压(浮点数)。

返回类型:

float

UiFlow2代码块:

get_capacitor_voltage.png

MicroPython 代码块:

switchc6.get_capacitor_voltage("1122-AABB-CCDD", timeout=5000)
get_switch_status(target_mac, timeout=5000)

获取目标设备的开关状态。

参数:
  • target_mac (str) – “XXXX-XXXX-XXXX”格式的目标MAC地址。

  • timeout (int) – 等待响应的超时时间(毫秒)(默认为5000)。

返回:

如果开关为开启状态返回True,关闭状态返回False。

返回类型:

bool

UiFlow2代码块:

get_switch_status.png

MicroPython 代码块:

switchc6.get_switch_status("1122-AABB-CCDD", timeout=5000)
set_callback(handler, trigger)

为指定触发器设置回调函数。

参数:
  • handler – 触发器发生时要调用的回调函数。

  • trigger (Literal[0, 1]) – 触发器类型(0表示关闭,1表示开启)。

返回类型:

None

UiFlow2代码块:

event.png

MicroPython 代码块:

switchc6.set_callback(handler, trigger)
get_firmware_version(target_mac, timeout=5000)

获取目标设备的固件版本。

参数:
  • target_mac (str) – “XXXX-XXXX-XXXX”格式的目标MAC地址。

  • timeout (int) – 等待响应的超时时间(毫秒)(默认为5000)。

返回:

固件版本(字符串)。

返回类型:

str

UiFlow2代码块:

get_firmware_version.png

MicroPython 代码块:

switchc6.get_firmware_version("1122-AABB-CCDD", timeout=5000)