DualKey

支持以下产品:

DualKey

UiFlow2 应用示例

按钮 LED 控制

在 UiFlow2 上打开 dualkey_button_led_example.m5f2 项目。

该示例演示了使用按钮回调函数来切换 RGB LED 灯。当点击左侧按钮(BtnA)时,它会切换左侧 RGB LED(LED 0)。当点击右侧按钮(BtnB)时,它会切换右侧 RGB LED(LED 1)。

UiFlow2 代码块:

dualkey_button_led_example.png

示例输出:

电源检测

在 UiFlow2 上打开 dualkey_power_detection_example.m5f2 项目。

该示例演示了电池电压监测和开关位置检测。它读取开关位置(左/中/右)并显示相应的 RGB LED 颜色,同时定期读取并显示电池电压(单位为毫伏)。

UiFlow2 代码块:

dualkey_power_detection_example.png

示例输出:

USB 鼠标

在 UiFlow2 上打开 dualkey_usb_mouse_example.m5f2 项目。

该示例演示了通过按钮触发点击的 USB HID 鼠标功能。当点击左侧按钮(BtnA)时,它会发送左键点击并点亮左侧 RGB LED。当点击右侧按钮(BtnB)时,它会发送右键点击并点亮右侧 RGB LED。LED 会在 300ms 后自动熄灭。

UiFlow2 代码块:

dualkey_usb_mouse_example.png

示例输出:

MicroPython 应用示例

按钮 LED 控制

该示例演示了使用按钮回调函数来切换 RGB LED 灯。当点击左侧按钮(BtnA)时,它会切换左侧 RGB LED(LED 0)。当点击右侧按钮(BtnB)时,它会切换右侧 RGB LED(LED 1)。

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 hardware import RGB
 9
10
11rgb = None
12led1_state = None
13led2_state = None
14
15
16def btnb_was_clicked_event(state):
17    global rgb, led1_state, led2_state
18    print("clicke left")
19    led1_state = not led1_state
20    if led1_state:
21        rgb.set_color(0, 0x009900)
22    else:
23        rgb.set_color(0, 0x000000)
24
25
26def btna_was_clicked_event(state):
27    global rgb, led1_state, led2_state
28    print("click right")
29    led2_state = not led2_state
30    if led2_state:
31        rgb.set_color(1, 0x009900)
32    else:
33        rgb.set_color(1, 0x000000)
34
35
36def setup():
37    global rgb, led1_state, led2_state
38
39    M5.begin()
40    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
41    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
42
43    rgb = RGB()
44    rgb.set_color(0, 0x33CCFF)
45    rgb.set_color(1, 0x33CCFF)
46
47
48def loop():
49    global rgb, led1_state, led2_state
50    M5.update()
51
52
53if __name__ == "__main__":
54    try:
55        setup()
56        while True:
57            loop()
58    except (Exception, KeyboardInterrupt) as e:
59        try:
60            from utility import print_error_msg
61
62            print_error_msg(e)
63        except ImportError:
64            print("please update to latest firmware")

示例输出:

电源检测

该示例演示了电池电压监测和开关位置检测。它读取开关位置(左/中/右)并显示相应的 RGB LED 颜色,同时定期读取并显示电池电压(单位为毫伏)。

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 hardware import RGB
 9from hardware import dualkey
10import time
11
12
13rgb = None
14sw_status = None
15battery_voltage = None
16
17
18def setup():
19    global rgb, sw_status, battery_voltage
20    M5.begin()
21    rgb = RGB()
22    rgb.set_color(0, 0x000000)
23    rgb.set_color(1, 0x000000)
24
25
26def loop():
27    global rgb, sw_status, battery_voltage
28    M5.update()
29    sw_status = dualkey.get_switch_position()
30    if sw_status == 0:
31        print("Left")
32        rgb.set_color(0, 0x009900)
33        rgb.set_color(1, 0x000000)
34    elif sw_status == 1:
35        print("Middle")
36        rgb.set_color(0, 0x000000)
37        rgb.set_color(1, 0x000000)
38    elif sw_status == 2:
39        rgb.set_color(0, 0x000000)
40        rgb.set_color(1, 0x009900)
41        print("Right")
42    battery_voltage = dualkey.get_battery_voltage()
43    print((str((str("Battery voltage: ") + str(battery_voltage))) + str("mV")))
44    time.sleep_ms(500)
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")

示例输出:

USB 鼠标

该示例演示了通过按钮触发点击的 USB HID 鼠标功能。当点击左侧按钮(BtnA)时,它会发送左键点击并点亮左侧 RGB LED。当点击右侧按钮(BtnB)时,它会发送右键点击并点亮右侧 RGB LED。LED 会在 300ms 后自动熄灭。

备注

当 USB 鼠标初始化时,USB-CDC REPL 可能会断开连接。运行此示例后,您可能需要重新连接到设备。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4import os, sys, io
 5import M5
 6from M5 import *
 7from hardware import RGB
 8from usb.device.mouse import Mouse
 9import time
10
11
12rgb = None
13mouse = None
14click_left = None
15click_right = None
16last_time = None
17
18
19def btnb_was_clicked_event(state):
20    global rgb, mouse, click_left, click_right, last_time
21    print("click left")
22    click_left = True
23
24
25def btna_was_clicked_event(state):
26    global rgb, mouse, click_left, click_right, last_time
27    print("click right")
28    click_right = True
29
30
31def setup():
32    global rgb, mouse, click_left, click_right, last_time
33
34    M5.begin()
35    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
36    BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
37
38    rgb = RGB()
39    rgb.set_color(0, 0x3333FF)
40    rgb.set_color(1, 0x3333FF)
41    mouse = Mouse()
42
43
44def loop():
45    global rgb, mouse, click_left, click_right, last_time
46    M5.update()
47    if click_left:
48        click_left = False
49        if mouse.is_open():
50            mouse.click_left(True)
51            rgb.set_color(0, 0x009900)
52            rgb.set_color(1, 0x000000)
53            last_time = time.ticks_ms()
54    if click_right:
55        click_right = False
56        if mouse.is_open():
57            mouse.click_right(True)
58            rgb.set_color(0, 0x000000)
59            rgb.set_color(1, 0x009900)
60    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 300:
61        rgb.set_color(0, 0x000000)
62        rgb.set_color(1, 0x000000)
63
64
65if __name__ == "__main__":
66    try:
67        setup()
68        while True:
69            loop()
70    except (Exception, KeyboardInterrupt) as e:
71        try:
72            from utility import print_error_msg
73
74            print_error_msg(e)
75        except ImportError:
76            print("please update to latest firmware")

示例输出:

API应用

class DualKey

class hardware.dualkey.DualKey

DualKey 模块 - 电压和开关检测(单例)。

DualKey 类是一个单例,提供了监控电池电压、VBUS 电压、充电状态和开关位置的方法。

MicroPython 代码块:

from hardware import dualkey
get_battery_voltage()

获取电池电压。

返回:

电池电压值,单位为毫伏 (mV)。

返回类型:

int

UiFlow2 代码块:

get_battery_voltage.png

MicroPython 代码块:

voltage = dualkey.get_battery_voltage()
print(f"Battery voltage: {voltage} mV")
get_vbus_voltage()

获取 VBUS(USB 电源)电压。

返回:

VBUS 电压值,单位为毫伏 (mV)。

返回类型:

int

UiFlow2 代码块:

get_vbus_voltage.png

MicroPython 代码块:

vbus_voltage = dualkey.get_vbus_voltage()
print(f"VBUS voltage: {vbus_voltage} mV")
is_charging()

检测设备是否正在充电。

返回:

如果正在充电返回 True,如果未在充电返回 False

返回类型:

bool

UiFlow2 代码块:

is_charging.png

MicroPython 代码块:

if dualkey.is_charging():
    print("Device is charging")
else:
    print("Device is not charging")
get_switch_position()

获取开关位置。

返回:

开关位置值:- 0: 左侧 - 1: 中间 - 2: 右侧

返回类型:

int

UiFlow2 代码块:

get_switch_position.png

MicroPython 代码块:

position = dualkey.get_switch_position()
if position == 0:
    print("Switch position: left")
elif position == 1:
    print("Switch position: middle")
elif position == 2:
    print("Switch position: right")