Chain Key

Chain Key 是一个可连接到 M5Chain 系列设备的按键模块,提供读取按键状态的功能。

支持以下产品:

Chain Key

UiFlow2 应用示例

USB 键盘

在 UiFlow2 中打开 chain_key_usb_keyboard_example.m5f2 项目。

该示例演示如何将 Chain Key 作为 USB 键盘使用。

UiFlow2 代码块:

chain_key_usb_keyboard_example.png

示例输出:

None

MicroPython 示例

USB 键盘

该示例演示如何将 Chain Key 作为 USB 键盘使用。

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 *
 8from chain import KeyChain
 9from chain import ChainBus
10from usb.device.keyboard import Keyboard
11from usb.device.hid import KeyCode
12
13
14bus2 = None
15keyboard = None
16chain_key_0 = None
17
18
19key_press = None
20
21
22def chain_key_0_click_event(args):
23    global bus2, keyboard, chain_key_0, key_press
24    key_press = True
25
26
27def setup():
28    global bus2, keyboard, chain_key_0, key_press
29
30    M5.begin()
31    bus2 = ChainBus(2, tx=6, rx=5)
32    keyboard = Keyboard()
33    chain_key_0 = KeyChain(bus2, 1)
34    chain_key_0.set_click_callback(chain_key_0_click_event)
35    key_press = False
36
37
38def loop():
39    global bus2, keyboard, chain_key_0, key_press
40    M5.update()
41    if keyboard.is_open():
42        if key_press:
43            keyboard.input(KeyCode.A)
44            key_press = False
45
46
47if __name__ == "__main__":
48    try:
49        setup()
50        while True:
51            loop()
52    except (Exception, KeyboardInterrupt) as e:
53        try:
54            from utility import print_error_msg
55
56            print_error_msg(e)
57        except ImportError:
58            print("please update to latest firmware")

示例输出:

None

API参考

KeyChain

class chain.key.KeyChain(bus, device_id)

基类:object

创建一个 KeyChain 对象。

参数:
  • bus (ChainBus) – ChainBus 对象。

  • device_id (int) – 设备 ID。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from chain import ChainBus
from chain import KeyChain

chainbus_0 = ChainBus(2, 32, 33, verbose=True)
keychain_0 = KeyChain(chainbus_0, 1)
MODE_POLL = 0

按钮轮询模式

MODE_EVENT = 1

按钮事件模式

get_button_state()

获取按钮状态。

返回:

按钮状态,按下为 True,否则为 False。

返回类型:

bool

UiFlow2 代码块:

get_button_state.png

MicroPython 代码块:

keychain_0.get_button_state()
set_click_callback(callback)

设置按钮单击回调。

参数:

callback – 回调函数。

返回类型:

None

备注

回调函数中不能调用 Chain 相关方法。

UiFlow2 代码块:

key_click_callback.png

MicroPython 代码块:

def keychain_0_click_callback(args):
    print("click")

keychain_0.set_click_callback(keychain_0_click_callback)
set_double_click_callback(callback)

设置按钮双击回调。

参数:

callback – 回调函数。

返回类型:

None

备注

回调函数中不能调用 Chain 相关方法。

UiFlow2 代码块:

double_click_callback.png

MicroPython 代码块:

def keychain_0_double_click_callback(args):
    print("double click")

keychain_0.set_double_click_callback(keychain_0_double_click_callback)
set_long_press_callback(callback)

设置按钮长按回调。

参数:

callback – 回调函数。

返回类型:

None

备注

回调函数中不能调用 Chain 相关方法。

UiFlow2 代码块:

long_press_callback.png

MicroPython 代码块:

def keychain_0_long_press_callback(args):
    print("long press")

keychain_0.set_long_press_callback(keychain_0_long_press_callback)
set_button_double_click_trigger_interval(interval_ms)

设置按钮双击触发间隔。

参数:

interval_ms (int) – 间隔时间(毫秒)。范围:100-1000

返回:

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

返回类型:

bool

UiFlow2 代码块:

set_button_double_click_trigger_interval.png

MicroPython 代码块:

keychain_0.set_button_double_click_trigger_interval(100)
set_button_long_press_trigger_interval(interval_ms)

设置按钮长按触发间隔。

参数:

interval_ms (int) – 间隔时间(毫秒)。范围:3000-30000

返回:

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

返回类型:

bool

UiFlow2 代码块:

set_button_long_press_trigger_interval.png

MicroPython 代码块:

keychain_0.set_button_long_press_trigger_interval(3000)
get_button_double_click_trigger_interval()

获取按钮双击触发间隔。

返回:

间隔时间(毫秒)。

返回类型:

int

UiFlow2 代码块:

get_button_double_click_trigger_interval.png

MicroPython 代码块:

interval = keychain_0.get_button_double_click_trigger_interval()
get_button_long_press_trigger_interval()

获取按钮长按触发间隔。

返回:

间隔时间(毫秒)。

返回类型:

int

UiFlow2 代码块:

get_button_long_press_trigger_interval.png

MicroPython 代码块:

interval = keychain_0.get_button_long_press_trigger_interval()
set_button_mode(mode)

设置按钮模式。

参数:

mode (int) – 按钮模式。使用 KeyChain.MODE_POLLKeyChain.MODE_EVENT

返回:

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

返回类型:

bool

UiFlow2 代码块:

set_button_mode.png

MicroPython 代码块:

keychain_0.set_button_mode(KeyChain.MODE_EVENT)
get_button_mode()

获取按钮模式。

返回:

按钮模式。KeyChain.MODE_POLLKeyChain.MODE_EVENT

返回类型:

int

UiFlow2 代码块:

get_button_mode.png

MicroPython 代码块:

mode = keychain_0.get_button_mode()
set_rgb_color(color)

设置 RGB 颜色。

参数:

color (int) – RGB 颜色值。

返回:

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

返回类型:

bool

UiFlow2 代码块:

set_rgb_color.png

MicroPython 代码块:

keychain_0.set_rgb_color(0xFF0000)
get_rgb_color()

获取 RGB 颜色。

参数:

index – RGB LED 的索引。

返回:

RGB 颜色值。

返回类型:

int

UiFlow2 代码块:

get_rgb_color.png

MicroPython 代码块:

color = keychain_0.get_rgb_color()
set_rgb_brightness(brightness, save=False)

设置 RGB 亮度。

参数:
  • brightness (int) – 亮度值 (0-100)。

  • save (bool) – 是否将亮度设置保存到闪存。

返回:

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

返回类型:

bool

UiFlow2 代码块:

set_rgb_brightness.png

MicroPython 代码块:

keychain_0.set_rgb_brightness(80)
get_rgb_brightness()

获取 RGB 亮度。

返回:

亮度值 (0-100)。

返回类型:

int

UiFlow2 代码块:

get_rgb_brightness.png

MicroPython 代码块:

brightness = keychain_0.get_rgb_brightness()
get_bootloader_version()

获取引导程序版本。

返回:

引导程序版本。

返回类型:

int

UiFlow2 代码块:

get_bootloader_version.png

MicroPython 代码块:

version = keychain_0.get_bootloader_version()
get_firmware_version()

获取固件版本。

返回:

固件版本。

返回类型:

int

UiFlow2 代码块:

get_firmware_version.png

MicroPython 代码块:

version = keychain_0.get_firmware_version()
get_device_uid(uid_type)

获取设备 UID。

参数:

uid_type (int) – UID 类型,0 表示 4 字节 UID,1 表示 12 字节 UID。

返回:

UID 字节元组(4 字节或 12 字节)。出错时返回空元组。

返回类型:

tuple

UiFlow2 代码块:

get_device_uid.png

MicroPython 代码块:

uid = keychain_0.get_device_uid(0)  # 4-byte UID
uid = keychain_0.get_device_uid(1)  # 12-byte UID