Chain Switch
SwitchChain 是链式总线上开关设备的辅助类。它提供了读取 ADC 值(12 位和 8 位)、配置开关阈值、设置滑动模式以及监控开关状态变化的方法。
支持以下产品:
UiFlow2 应用示例
开关状态监控
在 UiFlow2 中打开 m5core_chain_switch_basic_example.m5f2 项目。
本示例演示如何从 Chain Switch 传感器读取 ADC 值和开关状态并显示在屏幕上。它注册打开/关闭触发回调,并在开关状态变化时更新状态标签。
UiFlow2 代码块:
示例输出:
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 类。
UiFlow2 代码块:

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。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
value = chain_switch_0.get_adc12()
- get_adc8()
获取开关的 8 位 ADC 值。
- 返回:
8 位 ADC 值(0-255),失败时返回 None。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
value = chain_switch_0.get_adc8()
- set_slip_mode(mode, save=False)
设置滑块变化模式。
- 参数:
- 返回:
操作成功返回 True,否则返回 False。
- 返回类型:
UiFlow2 代码块:

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。- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
mode = chain_switch_0.get_slip_mode()
- set_switch_thresh(open_threshold, close_threshold, save=False)
设置开关打开和关闭阈值。
- 参数:
- 返回:
操作成功返回 True,否则返回 False。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
success = chain_switch_0.set_switch_thresh(3000, 1000, True)
- get_open_thresh()
获取开关打开阈值。
- 返回:
打开阈值(0-4095),失败时返回 None。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
open_th = chain_switch_0.get_open_thresh()
- get_close_thresh()
获取开关关闭阈值。
- 返回:
关闭阈值(0-4095),失败时返回 None。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
close_th = chain_switch_0.get_close_thresh()
- get_switch_status()
获取开关状态。
- 返回:
开关状态。0 表示关闭,1 表示打开。失败时返回 None。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
status = chain_switch_0.get_switch_status()
- set_trigger(enable)
启用或禁用状态变化报告。
UiFlow2 代码块:

MicroPython 代码块:
success = chain_switch_0.set_trigger(True)
- get_trigger()
获取是否启用状态变化报告。
- 返回:
启用状态变化报告返回 True,禁用返回 False。失败时返回 False。
- 返回类型:
UiFlow2 代码块:

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 代码块:

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)

