Chain Encoder

EncoderChain 是用于 Chain 总线上编码器设备的辅助类。它提供了读取编码器值和增量、重置编码器、配置顺时针旋转方向以及处理按钮事件和 RGB LED 反馈的方法。

支持以下产品:

Chain Encoder

UiFlow2 示例

编码器读取与亮度控制

在 UiFlow2 中打开 m5core_chain_encoder_basic_example.m5f2 项目。

此示例演示如何读取编码器值和增量、处理按钮点击事件,并根据编码器旋转控制 RGB LED 亮度。编码器值显示在屏幕上并实时更新。

UiFlow2 代码块:

m5core_chain_encoder_basic_example.png

示例输出:

MicroPython 示例

编码器读取与亮度控制

此示例演示如何读取编码器值和增量、处理按钮点击事件,并根据编码器旋转控制 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 chain import EncoderChain
 9from chain import ChainBus
10import time
11
12
13
14title0 = None
15label_brightness = None
16label_val = None
17label_count = None
18bus2 = None
19chain_encoder_0 = None
20count = None
21last_time = None
22value = None
23brightness = None
24
25
26def chain_encoder_0_click_event(args):
27    global title0, label_brightness, label_val, label_count, bus2, chain_encoder_0, count, last_time, value, brightness
28    count = (count if isinstance(count, (int, float)) else 0) + 1
29    label_count.setText(str((str('Button Count: ') + str(count))))
30
31def setup():
32    global title0, label_brightness, label_val, label_count, bus2, chain_encoder_0, count, last_time, value, brightness
33    M5.begin()
34    Widgets.setRotation(1)
35    Widgets.fillScreen(0x222222)
36    title0 = Widgets.Title("Title", 3, 0xffffff, 0x0000FF, Widgets.FONTS.DejaVu24)
37    label_brightness = Widgets.Label("Brightness:", 5, 100, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu24)
38    label_val = Widgets.Label("Value:", 5, 60, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu24)
39    label_count = Widgets.Label("Button Count:", 5, 140, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu24)
40    bus2 = ChainBus(2, tx=21, rx=22)
41    chain_encoder_0 = EncoderChain(bus2, 1)
42    chain_encoder_0.set_click_callback(chain_encoder_0_click_event)
43    chain_encoder_0.set_button_mode(chain_encoder_0.MODE_EVENT)
44    chain_encoder_0.set_rgb_color(0x00ff00)
45    chain_encoder_0.set_rgb_brightness(80, save=False)
46    chain_encoder_0.set_cw_increase(True, save=False)
47    print(chain_encoder_0.get_encoder_increment())
48    brightness = 0
49
50
51def loop():
52    global title0, label_brightness, label_val, label_count, bus2, chain_encoder_0, count, last_time, value, brightness
53    M5.update()
54    if (time.ticks_diff((time.ticks_ms()), last_time)) >= 100:
55        last_time = time.ticks_ms()
56        value = chain_encoder_0.get_encoder_value()
57        label_val.setText(str((str('Value: ') + str(value))))
58        brightness = min(max(brightness + (chain_encoder_0.get_encoder_increment()), 0), 100)
59        label_brightness.setText(str((str('Brightness: ') + str(brightness))))
60        chain_encoder_0.set_rgb_brightness(brightness, save=False)
61
62
63if __name__ == "__main__":
64    try:
65        setup()
66        while True:
67            loop()
68    except (Exception, KeyboardInterrupt) as e:
69        try:
70            bus2.deinit()
71            from utility import print_error_msg
72
73            print_error_msg(e)
74        except ImportError:
75            print("please update to latest firmware")

示例输出:

API

EncoderChain

class chain.encoder.EncoderChain(bus, device_id)

基类:KeyChain

用于通过 Chain 总线与编码器设备交互的 Encoder Chain 类。

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

  • device_id (int) – Chain 总线上编码器的设备 ID。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from chain import ChainBus
from chain import EncoderChain

chainbus_0 = ChainBus(2, 32, 33, verbose=True)
encoder_0 = EncoderChain(chainbus_0, 1)

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

get_encoder_value()

获取编码器值。

返回:

编码器值,类型为 int16_t(-32768 到 32767),失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_encoder_value.png

MicroPython 代码块:

value = encoder_0.get_encoder_value()
get_encoder_increment()

获取编码器增量值。

返回:

编码器增量值,类型为 int16_t(-32768 到 32767),失败时返回 None。

返回类型:

int

UiFlow2 代码块:

get_encoder_increment.png

MicroPython 代码块:

increment = encoder_0.get_encoder_increment()
reset_encoder_value()

重置编码器值。

返回:

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

返回类型:

bool

UiFlow2 代码块:

reset_encoder_value.png

MicroPython 代码块:

success = encoder_0.reset_encoder_value()
reset_encoder_increment()

重置编码器增量值。

返回:

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

返回类型:

bool

UiFlow2 代码块:

reset_encoder_increment.png

MicroPython 代码块:

success = encoder_0.reset_increment()
set_cw_increase(clockwise_increase=False, save=False)

设置顺时针旋转是否增加编码器值。

参数:
  • clockwise_increase (bool) – 顺时针旋转是否增加。True 表示顺时针增加(发送 0),False 表示顺时针减少(发送 1)。

  • save (bool) – 是否保存到 Flash。False 表示不保存,True 表示保存。

返回:

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

返回类型:

bool

UiFlow2 代码块:

set_cw_increase.png

MicroPython 代码块:

success = encoder_0.set_cw_increase(True, True)
get_cw_increase()

获取顺时针旋转是否增加编码器值。

返回:

顺时针旋转是否增加。True 表示顺时针增加,False 表示顺时针减少。失败时返回 False。

返回类型:

bool

UiFlow2 代码块:

get_cw_increase.png

MicroPython 代码块:

increase = encoder_0.get_cw_increase()