本文介绍了 DFRobot FireBeetle 2 ESP32 P4 开发套件通过 MicroPython 编程实现 28-BYJ48 步进电机旋转角度的精确控制,并进一步结合 LabVIEW 和串口通信实现步进电机的远程控制。
包括开发环境搭建、固件上传、工程测试、硬件连接、流程图、代码、LabVIEW 上位机设计、运行效果展示等。
项目介绍
开发环境搭建
工程测试
硬件连接
流程图
工程代码
LabVIEW 上位机
效果演示
环境搭建
包括软件工具安装部署、固件上传等部分。
固件获取
编译或下载最新 firmware.bin 固件;(见附件)
详见:GitHub - Vincent1-python/micropython at esp32p4 .
固件上传
下载并安装乐鑫官方提供的 Flash Download Tool 软件;
连接开发板,加载固件,起始地址 0x002000 ,波特率选择合适的配置;
点击 Start 按钮开始并完成固件上传;

详见:Flash 下载工具用户指南 - ESP32 - — ESP 测试工具 latest 文档 .
工程测试
下载并安装 Thonny IDE 软件;
连接开发板和电脑,点击右下角配置解释器;
选择带有 ESP32 字样的设备,连接成功后, Shell 终端打印板端 MicroPython 版本号、设备型号等信息;

代码
使用闪灯代码测试
from machine import Pin
import time
led_pin = Pin(3, Pin.OUT)
BLINK_INTERVAL_MS = 100 # milliseconds
try:
while True:
led_pin.toggle()
time.sleep_ms(BLINK_INTERVAL_MS)
except KeyboardInterrupt:
led_pin.off()
print("Program stopped")
效果
板载 LED 闪烁,间隔 100 毫秒

硬件连接
步进电机
Step Motor | Board |
---|---|
IN1 | 4 |
IN2 | 5 |
IN3 | 20 |
IN4 | 21 |
VCC | 5V |
GND | GND |
串口
USB to TTL | Board |
---|---|
RXD | TXD (37) |
TXD | RXD (38) |
GND | GND |
Type-C 数据线连接开发板和电脑,用于程序调试和固件上传。
流程图

代码
Thonny 新建 .py 文件,添加如下代码
from machine import Pin, UART
import utime
import ujson
# 电机控制引脚
coils = [
Pin(4, Pin.OUT), # IN1
Pin(5, Pin.OUT), # IN2
Pin(20, Pin.OUT), # IN3
Pin(21, Pin.OUT) # IN4
]
# 四相八拍步进电机的相序
STEP_SEQ = [
[1, 0, 0, 1], # AB'
[1, 0, 0, 0], # A
[1, 1, 0, 0], # AB
[0, 1, 0, 0], # B
[0, 1, 1, 0], # BC
[0, 0, 1, 0], # C
[0, 0, 1, 1], # CD
[0, 0, 0, 1] # D
]
# 初始化 UART
uart = UART(1, baudrate=115200, rx=Pin(38), tx=Pin(37), timeout=10)
def step_motor(steps, delay_ms=1):
direction = 1 if steps >= 0 else -1
for _ in range(abs(steps)):
for phase in range(8)[::direction]:
for coil, state in zip(coils, STEP_SEQ[phase]):
coil.value(state)
utime.sleep_ms(delay_ms)
def rotate_angle(angle):
steps_per_rev = 509 # 28BYJ-48 步进电机通常需要 509 步/圈
steps = int(angle * (steps_per_rev / 360))
step_motor(steps)
def release():
for coil in coils:
coil.value(0)
def uart_control():
while True:
if uart.any():
cmd = uart.readline() # 读取一行数据
if cmd:
try:
data = ujson.loads(cmd)
angle = int(data['angle'])
rotate_angle(angle)
uart.write("OK\r\n") # 转动完成后发送 OK
except ValueError:
uart.write("ERROR: Invalid JSON format\r\n")
except KeyError:
uart.write("ERROR: Missing 'angle' field\r\n")
except Exception as e:
uart.write(f"ERROR: {str(e)}\r\n")
finally:
release() # 确保电机释放
utime.sleep_ms(100)
# 主循环
if __name__ == '__main__':
uart_control()
保存文件并运行。
运行效果

LabVIEW 上位机
包括前面板和程序框图设计。
前面板
前面板设计包括串口配置模块、单步旋转控制模块、数据保存模块、连续旋转控制模块、数据采集和曲线显示模块、字符串发送和接收模块、程序启动和终止控制模块等。

程序框图
主体使用顺序结构,串口初始化后,通过内嵌循环结构实现连续发送指令、旋转角度控制、数据采集等任务。

效果
配置串口波特率、端口号、运行程序;
设置步长、延时、总旋转角度、文件保存路径;
点击 Start 开始采集、点击 Stop 停止采集并保存数据、点击 Terminate 终止程序;

步进电机根据指令,精确连续转动目标角度

结束程序后,自动保存数据

总结
本文介绍了 DFRobot FireBeetle 2 ESP32 P4 开发套件通过 MicroPython 编程实现 28-BYJ48 步进电机旋转角度的精确控制,并进一步结合 LabVIEW 和串口通信实现步进电机的远程控制。为该开发板在工业和科研领域的开发设计和应用提供了参考。
评论