
Серво моторите, като популярния SG90, са изключително полезни в хоби и професионални проекти – от роботи и автоматизирани механизми до интелигентни системи за управление. ESP32, особено популярният модел ESP32 R32, е идеален микроконтролер за такива задачи, благодарение на своята мощ и възможност за работа с MicroPython. Може да намерите пълните характристики на тази платформа в нашето ревю за нея: ESP32-R32 – Мощта на ESP32 в позната UNO форма
В тази статия ще ви представим проста, но ефективна библиотека, написана от нас, за управление на SG90 серво мотор чрез ESP32 и MicroPython. Ще ви покажем и примерен код, който демонстрира как лесно да позиционирате сервото във всякакъв ъгъл с плавно движение.
Статията включва:
- Библиотеката
Servo
за MicroPython - Подробно обяснение как работи
- Примерен код за плавно завъртане на SG90
- Подробно описание на основния скрипт
Библиотека за управление на серво мотор
Отдолу ще ви предоставим библитеката написана от нас за управление на серво мотори с MicroPython.
from machine import Pin, PWM
class Servo:
def __init__(self, pin, freq=50, min_us=500, max_us=2500, angle_range=180):
self.pwm = PWM(Pin(pin), freq=freq)
self.min_us = min_us
self.max_us = max_us
self.angle_range = angle_range
self.freq = freq
def write_angle(self, angle):
if angle < 0:
angle = 0
elif angle > self.angle_range:
angle = self.angle_range
us = self.min_us + (self.max_us - self.min_us) * angle // self.angle_range
duty = int(us * 1024 * self.freq // 1000000)
self.pwm.duty(duty)
def deinit(self):
self.pwm.deinit()
Обяснение на библиотеката
Тази библиотека предоставя лесен начин да управлявате позицията на SG90 серво мотор чрез PWM сигнал. Ето как работи всеки елемент:
Импортиране на библиотеките
from machine import Pin, PWM
Тази библиотека използва вградените в MicroPython библиотеки “Pin“, “PWM“. Може да научите как се използва широчинно импулсна модулация (PWM) в статията ни: Генериране на PWM сигнали с ESP8266 и MicroPython: Практически примери
Инициализация на класа Servo
def __init__(self, pin, freq=50, min_us=500, max_us=2500, angle_range=180):
pin
– GPIO пин на ESP32, към който е свързан серво моторът.freq=50
– Стандартна честота за серво моторите (50 Hz).min_us
иmax_us
– Минималната и максималната ширина на PWM импулса в микросекунди. За SG90 тези стойности обикновено са между 500 и 2500 µs.angle_range=180
– Указва ъгловия обхват на сервото.
Метод write_angle()
def write_angle(self, angle):
- Проверява дали подаденият ъгъл е в допустимите граници (0 до 180).
- Изчислява ширината на импулса (в микросекунди), отговарящ на желания ъгъл.
- Преобразува тази стойност в “duty cycle” за MicroPython PWM.
Метод deinit()
def deinit(self):
self.pwm.deinit()
- Спира PWM сигнала и освобождава ресурси. Полезно, когато приключим с използването на сервото.
Схема на свързване на SG90 серво мотор с ESP32 R32
Може да намерите схема на свързването на ESP32 R32 с SG90 серво мотора на картинката отдолу.

След като сме свързали компонентите нека продължим с примерния код за управление на серво мотора SG90 с ESP32 R32 и MicroPython.
Примерен код за използване на библиотеката
from servo import Servo
from time import sleep
servo = Servo(pin=26) # Свържи SG90 към GPIO26
while True:
for i in range(0, 180):
servo.write_angle(i)
sleep(0.02)
for i in range(180, -1, -1):
servo.write_angle(i)
sleep(0.02)
Обяснение на кода
Този код прави сервото да се движи плавно напред и назад между 0 и 180 градуса. Нека разгледаме детайлно какво се случва:
Импортиране на библиотеки и инициализация
from servo import Servo
from time import sleep
servo = Servo(pin=26)
- Импортираме нашата собствена библиотека
Servo
. - Създаваме обект
servo
, като указваме, че серво моторът е свързан към GPIO26 на ESP32 R32.
Забележка: Може да използвате и друг пин, стига той да поддържа PWM на ESP32.
Основен цикъл за движение
while True:
for i in range(0, 180):
servo.write_angle(i)
sleep(0.02)
- Цикълът завърта сервото от 0 до 180 градуса с 1 градус на стъпка.
sleep(0.02)
забавя движението, за да изглежда плавно.
for i in range(180, -1, -1):
servo.write_angle(i)
sleep(0.02)
- След това серво моторът се връща обратно от 180 до 0 градуса.
Заключение
С тази библиотека и примерен код вие можете лесно да контролирате SG90 серво мотор (както и други серво мотори) чрез ESP32 R32 с MicroPython. Решението е гъвкаво и може да бъде интегрирано в по-сложни проекти – като роботизирани рамена, автоматични врати или интелигентни механизми.
Този подход е особено полезен за начинаещи, тъй като:
- се използва MicroPython, който е четим и лесен за разбиране;
- библиотеката опростява работата с PWM;
- ESP32 R32 предоставя достатъчно GPIO пинове и възможности за управление на множество серво мотори.
Ако разработвате проекти с ESP32 и търсите надежден начин да интегрирате серво мотор, този код и библиотека са идеалната отправна точка.