Chain Encoder
EncoderChain 是用于 Chain 总线上编码器设备的辅助类。它提供了读取编码器值和增量、重置编码器、配置顺时针旋转方向以及处理按钮事件和 RGB LED 反馈的方法。
支持以下产品:
UiFlow2 示例
编码器读取与亮度控制
在 UiFlow2 中打开 m5core_chain_encoder_basic_example.m5f2 项目。
此示例演示如何读取编码器值和增量、处理按钮点击事件,并根据编码器旋转控制 RGB LED 亮度。编码器值显示在屏幕上并实时更新。
UiFlow2 代码块:
示例输出:
无
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 类。
UiFlow2 代码块:

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

MicroPython 代码块:
value = encoder_0.get_encoder_value()
- get_encoder_increment()
获取编码器增量值。
- 返回:
编码器增量值,类型为 int16_t(-32768 到 32767),失败时返回 None。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
increment = encoder_0.get_encoder_increment()
- reset_encoder_value()
重置编码器值。
- 返回:
操作成功返回 True,否则返回 False。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
success = encoder_0.reset_encoder_value()
- reset_encoder_increment()
重置编码器增量值。
- 返回:
操作成功返回 True,否则返回 False。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
success = encoder_0.reset_increment()
- set_cw_increase(clockwise_increase=False, save=False)
设置顺时针旋转是否增加编码器值。
- 参数:
- 返回:
设置成功返回 True,否则返回 False。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
success = encoder_0.set_cw_increase(True, True)


