我的ESP32板子是星瞳的板子:
PCA9685 16路舵机控制板子也是星瞳的:
(上面两个板子其实无论是什么厂家的板子都差别不大)
整个工作过程:
esp32烧录micropython固件,将用micropython来编写代码,esp32连接数据线到电脑,电脑通过串口工具编写代码,esp32接收后通过i2c给pca9685,pca9685控制舵机运动。
接线图:
我写的代码:
import time
from machine import I2C,Pin
from servo import Servos
i2c=I2C(sda=Pin(21),scl=Pin(22),freq=10000)
servos=Servos(i2c,address=0x40)
//while循环下面操作
while True:
for i in range(2, 170): //我不想把舵机转到最尽0或180度,个人喜好;当然我这里是每次转1°,如果你想调快点
//你可以【for i in range(2,170, 2)】,后面的2是步伐相当于c++里面的2++
servos.position(0,i) //0是表示pca9685的舵机接口,我接的是0号排针;i表示舵机位置
time.sleep_ms(10)
for i in range(170, 2, -1):
servos.position(0,i)
time.sleep_ms(10)
对比用 arduino 的舵机转速调节程序:
#include <Servo.h> // 声明调用Servo.h库
Servo myservo; // 创建一个舵机对象
int pos = 0; // 变量pos用来存储舵机位置
void setup() {
myservo.attach(9); // 将引脚9上的舵机与声明的舵机对象连接起来
}
void loop() {
for(pos = 0; pos < 180; pos += 1){ // 舵机从0°转到180°,每次增加1°
myservo.write(pos); // 给舵机写入角度
delay(15); // 延时15ms让舵机转到指定位置
}
for(pos = 180; pos>=1; pos-=1) { // 舵机从180°转回到0°,每次减小1°
myservo.write(pos); // 写角度到舵机
delay(15); // 延时15ms让舵机转到指定位置
}
}
特别的是esp32板子烧录的是适应esp32的micropython【详情可以参考1Z实验室阿凯简书】,特点是我没有找到舵机控制的servo库而我发现一些其他的pyboard板子烧录的micropython有servo库的,所以要用到Adafruit公司开源了MicroPython控制PCA9685模块的工程:micropython-adafruit-pca9685
这里我们需要用到这个工程里面的两个文件:
- pca9685.py
- servo.py
我们把这两个文件上传到esp32中,我们就可以调用它们来使用了。如何上传文件到esp32呢,我们在windows中可以通过ampy上传到ESP32的文件系统中。首先我们用 cmd 命令 pip install adafruit-ampy --upgrade
,然后用命令ampy --port /COM5 put C:/servo.py
【COM5是我esp32连接电脑显示的串口名称,具体看个人修改,好像很废话,大家应该都懂的】
通过终端重新链接, 查看刚刚存入的.py文件:
>>> import os
>>> os.listdir()
['boot.py', 'servo.py']
删除文件使用rm 指令:
ampy --port /COM5 rm servo.py
那么说了,那么多整体操作效果是:【串口工具那么多随便一个都可以啦,我用的是 MobaXterm 可以到他们官网下载有免费版的】
最后感谢大家的支持,转载请标明作者和出处。