DualKey
支持以下产品:
UiFlow2 应用示例
电源检测
在 UiFlow2 上打开 dualkey_power_detection_example.m5f2 项目。
该示例演示了电池电压监测和开关位置检测。它读取开关位置(左/中/右)并显示相应的 RGB LED 颜色,同时定期读取并显示电池电压(单位为毫伏)。
UiFlow2 代码块:
示例输出:
无
USB 鼠标
在 UiFlow2 上打开 dualkey_usb_mouse_example.m5f2 项目。
该示例演示了通过按钮触发点击的 USB HID 鼠标功能。当点击左侧按钮(BtnA)时,它会发送左键点击并点亮左侧 RGB LED。当点击右侧按钮(BtnB)时,它会发送右键点击并点亮右侧 RGB LED。LED 会在 300ms 后自动熄灭。
UiFlow2 代码块:
示例输出:
无
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)。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
voltage = dualkey.get_battery_voltage() print(f"Battery voltage: {voltage} mV")
- get_vbus_voltage()
获取 VBUS(USB 电源)电压。
- 返回:
VBUS 电压值,单位为毫伏 (mV)。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
vbus_voltage = dualkey.get_vbus_voltage() print(f"VBUS voltage: {vbus_voltage} mV")
- is_charging()
检测设备是否正在充电。
- 返回:
如果正在充电返回 True,如果未在充电返回 False。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
if dualkey.is_charging(): print("Device is charging") else: print("Device is not charging")




