Servo Kit 360°

这是 Servo 360 Unit 的驱动库,用于控制舵机的旋转速度和方向。

支持以下产品:

Servo Kit 360°

UiFlow2 应用示例

控制舵机旋转

在 UiFlow2 中打开 cores3_servo360_example.m5f2 项目。

该示例控制舵机的旋转方向和速度。

UiFlow2 代码块:

cores3_servo360_example.png

MicroPython 应用示例

控制舵机旋转

该示例控制舵机的旋转方向和速度。

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 *
  8import m5ui
  9import lvgl as lv
 10from unit import Servo360Unit
 11
 12
 13page0 = None
 14label0 = None
 15button0 = None
 16slider0 = None
 17button1 = None
 18button2 = None
 19servo360_0 = None
 20
 21
 22def button0_short_clicked_event(event_struct):
 23    global page0, label0, button0, slider0, button1, button2, servo360_0
 24    servo360_0.clockwise(slider0.get_value())
 25
 26
 27def button1_short_clicked_event(event_struct):
 28    global page0, label0, button0, slider0, button1, button2, servo360_0
 29    servo360_0.stop()
 30
 31
 32def button2_short_clicked_event(event_struct):
 33    global page0, label0, button0, slider0, button1, button2, servo360_0
 34    servo360_0.counterclockwise(slider0.get_value())
 35
 36
 37def button0_event_handler(event_struct):
 38    global page0, label0, button0, slider0, button1, button2, servo360_0
 39    event = event_struct.code
 40    if event == lv.EVENT.SHORT_CLICKED and True:
 41        button0_short_clicked_event(event_struct)
 42    return
 43
 44
 45def button1_event_handler(event_struct):
 46    global page0, label0, button0, slider0, button1, button2, servo360_0
 47    event = event_struct.code
 48    if event == lv.EVENT.SHORT_CLICKED and True:
 49        button1_short_clicked_event(event_struct)
 50    return
 51
 52
 53def button2_event_handler(event_struct):
 54    global page0, label0, button0, slider0, button1, button2, servo360_0
 55    event = event_struct.code
 56    if event == lv.EVENT.SHORT_CLICKED and True:
 57        button2_short_clicked_event(event_struct)
 58    return
 59
 60
 61def setup():
 62    global page0, label0, button0, slider0, button1, button2, servo360_0
 63
 64    M5.begin()
 65    Widgets.setRotation(1)
 66    m5ui.init()
 67    page0 = m5ui.M5Page(bg_c=0xFFFFFF)
 68    label0 = m5ui.M5Label(
 69        "speed:",
 70        x=136,
 71        y=77,
 72        text_c=0x000000,
 73        bg_c=0xFFFFFF,
 74        bg_opa=0,
 75        font=lv.font_montserrat_14,
 76        parent=page0,
 77    )
 78    button0 = m5ui.M5Button(
 79        text="CW",
 80        x=11,
 81        y=202,
 82        bg_c=0x2196F3,
 83        text_c=0xFFFFFF,
 84        font=lv.font_montserrat_14,
 85        parent=page0,
 86    )
 87    slider0 = m5ui.M5Slider(
 88        x=69,
 89        y=113,
 90        w=180,
 91        h=14,
 92        mode=lv.slider.MODE.NORMAL,
 93        min_value=0,
 94        max_value=100,
 95        value=50,
 96        bg_c=0x2193F3,
 97        color=0x2193F3,
 98        parent=page0,
 99    )
100    button1 = m5ui.M5Button(
101        text="stop",
102        x=131,
103        y=202,
104        bg_c=0xF32121,
105        text_c=0xFFFFFF,
106        font=lv.font_montserrat_14,
107        parent=page0,
108    )
109    button2 = m5ui.M5Button(
110        text="CCW",
111        x=245,
112        y=202,
113        bg_c=0x2196F3,
114        text_c=0xFFFFFF,
115        font=lv.font_montserrat_14,
116        parent=page0,
117    )
118
119    button0.add_event_cb(button0_event_handler, lv.EVENT.ALL, None)
120    button1.add_event_cb(button1_event_handler, lv.EVENT.ALL, None)
121    button2.add_event_cb(button2_event_handler, lv.EVENT.ALL, None)
122
123    page0.screen_load()
124    servo360_0 = Servo360Unit((1, 2))
125    servo360_0.stop()
126
127
128def loop():
129    global page0, label0, button0, slider0, button1, button2, servo360_0
130    M5.update()
131
132
133if __name__ == "__main__":
134    try:
135        setup()
136        while True:
137            loop()
138    except (Exception, KeyboardInterrupt) as e:
139        try:
140            m5ui.deinit()
141            from utility import print_error_msg
142
143            print_error_msg(e)
144        except ImportError:
145            print("please update to latest firmware")

API参考

Servo360Unit

class unit.servo360.Servo360Unit(port=None, pin=0, freq=50, count_low=500, count_high=2500)

基类:Servo180Unit

控制 360 度连续旋转舵机。

备注

对于 Servo Kit 360°,占空比微秒计数用于控制旋转速度与方向:count_low 对应顺时针最大速度,count_high 对应逆时针最大速度,midpoint 值表示停止。取值在 count_low ~ midpoint 范围内时顺时针旋转(值越小速度越快),取值在 midpoint ~ count_high 范围内时逆时针旋转(值越大速度越快)。midpoint 用于控制停止位置。

参数:
  • port (tuple) – 舵机连接的端口。

  • pin (int) – 舵机连接的引脚(如果不使用端口)。

  • freq (int) – PWM 频率。默认值为 50 Hz。

  • count_low (int) – 最低范围的占空比微秒计数。默认值为 500。

  • count_high (int) – 最高量程的占空比微秒计数。默认值为 2500。

UiFlow2 代码块:

init.png

init_advanced.png

MicroPython 代码块:

from unit import Servo360Unit

servo_0 = Servo360Unit((33, 32)) # Adjust the port as needed
servo_1 = Servo360Unit(None, pin=15)  # Directly specify the pin
clockwise(speed, wait=True)

以指定速度使舵机顺时针旋转。

参数:
  • speed (int) – 速度百分比(0 到 100)。

  • wait (bool) – 是否等待操作完成。

返回类型:

None

UiFlow2 代码块:

clockwise.png

MicroPython 代码块:

servo_0.clockwise(50)  # Rotate clockwise at 50% speed
counterclockwise(speed, wait=True)

以指定速度使舵机逆时针旋转。

参数:
  • speed (int) – 速度百分比(0 到 100)。

  • wait (bool) – 是否等待操作完成。

返回类型:

None

UiFlow2 代码块:

counterclockwise.png

MicroPython 代码块:

servo_0.counterclockwise(50)  # Rotate counterclockwise at 50% speed
stop(wait=True)

停止舵机旋转。

参数:

wait (bool) – 是否等待操作完成。

返回类型:

None

UiFlow2 代码块:

stop.png

MicroPython 代码块:

servo_0.stop()  # Stop the servo