Servo2 Module

Servo2 是 M5Stack 可堆叠模块系列中的舵机驱动模块。采用 PCA9685 16 通道 PWM 控制器,可同时驱动最多 16 路舵机。供电为 6–12 V 直流,使用两片 SY8368AQQC 进行降压。

支持以下产品:

Servo2Module

UiFlow2 应用示例

舵机角度控制

在 UiFlow2 中打开 m5core_module_servo2_example.m5f2 项目。

本示例在 I2C 总线上初始化 Servo2 模块,驱动两路舵机并在屏幕上显示当前角度。按键 A 将两路舵机设为 0°,按键 B 设为 45°,按键 C 设为 90°;初始化后释放一路通道。

UiFlow2 代码块:

m5core_module_servo2_example.png

示例输出:

None

MicroPython 应用示例

舵机角度控制

本示例在 I2C 总线上初始化 Servo2 模块,驱动两路舵机并在屏幕上显示当前角度。按键 A 将两路舵机设为 0°,按键 B 设为 45°,按键 C 设为 90°;初始化后释放一路通道。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import Servo2Module
 9
10
11
12title = None
13label_angle = None
14servo2_0 = None
15angle = None
16
17
18def btna_was_clicked_event(state):
19  global title, label_angle, servo2_0, angle
20  angle = 0
21  label_angle.setText(str((str('Angle: ') + str(angle))))
22  servo2_0.position(1, degrees=angle)
23  servo2_0.position(2, degrees=angle)
24
25
26def btnb_was_clicked_event(state):
27  global title, label_angle, servo2_0, angle
28  angle = 45
29  label_angle.setText(str((str('Angle: ') + str(angle))))
30  servo2_0.position(1, degrees=angle)
31  servo2_0.position(2, degrees=angle)
32
33
34def btnc_was_clicked_event(state):
35  global title, label_angle, servo2_0, angle
36  angle = 90
37  label_angle.setText(str((str('Angle: ') + str(angle))))
38  servo2_0.position(1, degrees=angle)
39  servo2_0.position(2, degrees=angle)
40
41
42def setup():
43  global title, label_angle, servo2_0, angle
44
45  M5.begin()
46  Widgets.setRotation(1)
47  Widgets.fillScreen(0x222222)
48  title = Widgets.Title("Module Servo2 Example", 3, 0xffffff, 0x0000FF, Widgets.FONTS.DejaVu24)
49  label_angle = Widgets.Label("Angle: ", 46, 98, 1.0, 0xffffff, 0x222222, Widgets.FONTS.DejaVu24)
50
51  BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_was_clicked_event)
52  BtnB.setCallback(type=BtnB.CB_TYPE.WAS_CLICKED, cb=btnb_was_clicked_event)
53  BtnC.setCallback(type=BtnC.CB_TYPE.WAS_CLICKED, cb=btnc_was_clicked_event)
54
55  servo2_0 = Servo2Module(0x40, 50, 400, 2350, 180)
56  angle = 0
57  label_angle.setText(str((str('Angle: ') + str(angle))))
58  servo2_0.position(1, degrees=angle)
59  servo2_0.position(2, degrees=angle)
60  servo2_0.release(0)
61
62
63def loop():
64  global title, label_angle, servo2_0, angle
65  M5.update()
66
67
68if __name__ == '__main__':
69  try:
70    setup()
71    while True:
72      loop()
73  except (Exception, KeyboardInterrupt) as e:
74    try:
75      from utility import print_error_msg
76      print_error_msg(e)
77    except ImportError:
78      print("please update to latest firmware")

示例输出:

None

API

Servo2Module

class module.Servo2Module(address=0x40, freq=50, min_us=400, max_us=2350, degrees=180)

在 I2C 总线上创建 Servo2 模块实例。

参数:
  • address (int) – PCA9685 的 I2C 地址(默认 0x40)。

  • freq (int) – PWM 频率,单位 Hz(默认 50)。

  • min_us (int) – 最小脉宽,单位微秒(默认 400)。

  • max_us (int) – 最大脉宽,单位微秒(默认 2350)。

  • degrees (int) – 最大角度,单位度(默认 180)。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from module import Servo2Module

servo2 = Servo2Module(address=0x40, freq=50, min_us=400, max_us=2350, degrees=180)
position(index, degrees=None, radians=None, us=None, duty=None)

设置指定通道的舵机角度。

参数:
  • index (int) – 通道索引(0-15)。

  • degrees (float) – 角度,单位度(可选)。

  • radians (float) – 角度,单位弧度(可选)。

  • us (int) – 脉宽,单位微秒(可选)。

  • duty (float) – 占空比,单位百分比(可选)。degreesradiansusduty 四者只能指定其一。

UiFlow2 代码块:

set_degrees.png

set_duty.png

set_pulse_width.png

set_radians.png

MicroPython 代码块:

servo2.position(0, degrees=90)
servo2.position(0, duty=50)
servo2.position(0, us=1500)
servo2.position(0, radians=1.57)
release(index)

释放舵机(停止驱动该通道)。

参数:

index (int) – 通道索引(0–15)。

UiFlow2 代码块:

release.png

MicroPython 代码块:

servo2.release(0)
deinit()

释放模块。Servo2Module 中为空实现,仅用于兼容。

MicroPython 代码块:

servo2.deinit()