Chain Switch

SwitchChain 是链式总线上开关设备的辅助类。它提供了读取 ADC 值(12 位和 8 位)、配置开关阈值、设置滑动模式以及监控开关状态变化的方法。

支持以下产品:

Chain Switch

UiFlow2 应用示例

开关状态监控

在 UiFlow2 中打开 m5core_chain_switch_basic_example.m5f2 项目。

本示例演示如何从 Chain Switch 传感器读取 ADC 值和开关状态并显示在屏幕上。它注册打开/关闭触发回调,并在开关状态变化时更新状态标签。

UiFlow2 代码块:

m5core_chain_switch_basic_example.png

示例输出:

None

MicroPython 应用示例

开关状态监控

本示例演示如何从 Chain Switch 传感器读取 ADC 值和开关状态并显示在屏幕上。它注册打开/关闭触发回调,并在开关状态变化时更新状态标签。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from chain import SwitchChain
 9from chain import ChainBus
10
11
12title0 = None
13label_adc = None
14label_state = None
15bus2 = None
16chain_switch_0 = None
17
18
19def chain_switch_0_open_event(args):
20    global title0, label_adc, label_state, bus2, chain_switch_0
21    label_state.setText(str("State: Open"))
22
23
24def chain_switch_0_close_event(args):
25    global title0, label_adc, label_state, bus2, chain_switch_0
26    label_state.setText(str("State: Close"))
27
28
29def setup():
30    global title0, label_adc, label_state, bus2, chain_switch_0
31
32    M5.begin()
33    Widgets.setRotation(1)
34    Widgets.fillScreen(0x000000)
35    title0 = Widgets.Title("Chain Switch Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu24)
36    label_adc = Widgets.Label("ADC: --", 20, 70, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu24)
37    label_state = Widgets.Label(
38        "State: --", 20, 113, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu24
39    )
40
41    bus2 = ChainBus(2, tx=21, rx=22)
42    chain_switch_0 = SwitchChain(bus2, 1)
43    chain_switch_0.set_trigger_callback(SwitchChain.STATUS_OPEN, chain_switch_0_open_event)
44    chain_switch_0.set_trigger_callback(SwitchChain.STATUS_CLOSE, chain_switch_0_close_event)
45    chain_switch_0.set_trigger(True)
46    if chain_switch_0.get_switch_status():
47        label_state.setText(str("State: Open"))
48    else:
49        label_state.setText(str("State: Close"))
50
51
52def loop():
53    global title0, label_adc, label_state, bus2, chain_switch_0
54    M5.update()
55    label_adc.setText(str((str("ADC: ") + str((chain_switch_0.get_adc12())))))
56
57
58if __name__ == "__main__":
59    try:
60        setup()
61        while True:
62            loop()
63    except (Exception, KeyboardInterrupt) as e:
64        try:
65            bus2.deinit()
66            from utility import print_error_msg
67
68            print_error_msg(e)
69        except ImportError:
70            print("please update to latest firmware")

示例输出:

None

API 参考

SwitchChain

class chain.switch.SwitchChain(bus, device_id)

基类:KeyChain

用于通过链式总线与开关设备交互的 Switch Chain 类。

参数:
  • bus (ChainBus) – Chain 总线实例。

  • device_id (int) – Chain 总线上开关的设备 ID。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from chain import ChainBus
from chain import SwitchChain

bus2 = ChainBus(2, tx=21, rx=22)
chain_switch_0 = SwitchChain(bus2, 1)

其他按钮和一些通用方法,请参考 ChainKey 类。

get_adc12()

获取开关的 12 位 ADC 值。

返回:

12 位 ADC 值(0-4095),失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_adc12.png

MicroPython 代码块:

value = chain_switch_0.get_adc12()
get_adc8()

获取开关的 8 位 ADC 值。

返回:

8 位 ADC 值(0-255),失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_adc8.png

MicroPython 代码块:

value = chain_switch_0.get_adc8()
set_slip_mode(mode, save=False)

设置滑块变化模式。

参数:
  • mode (int) – 滑块变化模式。使用 SwitchChain.SLIP_MODE_DOWNUP_DEC (0) 表示递减,或 SwitchChain.SLIP_MODE_DOWNUP_INC (1) 表示递增。

  • save (bool) – 是否将设置保存到闪存。默认值:False。

返回:

操作成功返回 True,否则返回 False。

返回类型:

bool

UiFlow2 代码块:

set_slip_mode.png

MicroPython 代码块:

success = chain_switch_0.set_slip_mode(SwitchChain.SLIP_MODE_DOWNUP_INC, True)
get_slip_mode()

获取滑块变化模式。

返回:

滑块变化模式。SwitchChain.SLIP_MODE_DOWNUP_DEC (0) 表示递减,或 SwitchChain.SLIP_MODE_DOWNUP_INC (1) 表示递增。失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_slip_mode.png

MicroPython 代码块:

mode = chain_switch_0.get_slip_mode()
set_switch_thresh(open_threshold, close_threshold, save=False)

设置开关打开和关闭阈值。

参数:
  • open_threshold (int) – 打开阈值(0-4095)。必须大于 close_threshold。

  • close_threshold (int) – 关闭阈值(0-4095)。必须小于 open_threshold。

  • save (bool) – 是否将阈值保存到闪存。默认值:False。

返回:

操作成功返回 True,否则返回 False。

返回类型:

bool

UiFlow2 代码块:

set_switch_thresh.png

MicroPython 代码块:

success = chain_switch_0.set_switch_thresh(3000, 1000, True)
get_open_thresh()

获取开关打开阈值。

返回:

打开阈值(0-4095),失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_open_thresh.png

MicroPython 代码块:

open_th = chain_switch_0.get_open_thresh()
get_close_thresh()

获取开关关闭阈值。

返回:

关闭阈值(0-4095),失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_close_thresh.png

MicroPython 代码块:

close_th = chain_switch_0.get_close_thresh()
get_switch_status()

获取开关状态。

返回:

开关状态。0 表示关闭,1 表示打开。失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_switch_status.png

MicroPython 代码块:

status = chain_switch_0.get_switch_status()
set_trigger(enable)

启用或禁用状态变化报告。

参数:

enable (bool) – True 启用状态变化报告,False 禁用。

返回:

操作成功返回 True,否则返回 False。

返回类型:

bool

UiFlow2 代码块:

set_trigger.png

MicroPython 代码块:

success = chain_switch_0.set_trigger(True)
get_trigger()

获取是否启用状态变化报告。

返回:

启用状态变化报告返回 True,禁用返回 False。失败时返回 False。

返回类型:

bool

UiFlow2 代码块:

get_trigger.png

MicroPython 代码块:

enabled = chain_switch_0.get_trigger()
set_trigger_callback(trigger_type, callback)

设置开关状态变化事件的回调。

参数:
  • trigger_type (int) – 要监听的触发类型。使用 SwitchChain.STATUS_CLOSE (0) 或 SwitchChain.STATUS_OPEN (1)。

  • callback – 当开关状态变化时将被调用的回调函数。

返回类型:

None

备注

在回调函数中不能调用链式相关方法。

UiFlow2 代码块:

set_trigger_callback.png

MicroPython 代码块:

def switch_status_callback():
    print("Switch opened")

# Listen for open status only
chain_switch_0.set_trigger_callback(SwitchChain.STATUS_OPEN, switch_status_callback)

# Listen for close status only
chain_switch_0.set_trigger_callback(SwitchChain.STATUS_CLOSE, switch_status_callback)