一.IIC通信
在raspi-config中的interface选项打开IIC通信
二.下载Adafruit_PCA9685包
pip3 install Adafruit_PCA9685
也可以去github或者gitee搜索adafruit_pca9685查看源码和demo
注:
这里还可以选用SERVO DRIVER HAT这一控制舵机的板子
可参考(17条消息) 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码_袁六加.的博客-CSDN博客
三.接线
根据本人的实际情况,当仅仅取树莓派的3.3V电压时舵机是不会动的,因此需要一个电源模块供电(与pca板子上的绿色柱相连)
四.编写程序
(使用a d 控制舵机转角)
# -*- coding: utf-8 -*-
#键盘控制舵机转动
from __future__ import division
import sys, select, termios, tty
import time
# Import the PCA9685 module.
import Adafruit_PCA9685
#获取键盘事件
def getKey():
settings = termios.tcgetattr(sys.stdin)
tty.setraw(sys.stdin.fileno())
rlist, _, _ = select.select([sys.stdin], [], [], 0.1)
if rlist:
key = sys.stdin.read(1)
else:
key = ''
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)
return key
def set_servo_angle(channel, angle):#输入角度转换成12^精度的数值
date=int(4096*((angle*11)+500)/20000)#进行四舍五入运算 date=int(4096*((angle*11)+500)/(20000)+0.5)
pwm.set_pwm(channel, 0, date)
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(50)
beangle = 0
channel1 = 15
channel2 = 14
while 1:
key = getKey()
if key == 'a':
while True:
beangle += 2.5
if beangle >= 180:
beangle = 180
set_servo_angle(channel1,beangle)
set_servo_angle(channel2,beangle)
key = getKey()
if (key != 'a'):
break
if key == 'd':
while True:
beangle -= 2.5
if beangle <= 0:
beangle = 0
set_servo_angle(channel1,beangle)
set_servo_angle(channel2,beangle)
key = getKey()
if (key != 'd'):
break
if key == 'q':
break
自此就可以通过输入转角或者使用键盘控制舵机了。
报错IOError: [Errno 121] Remote I/O error:
1.仔细检查接线有没有错误
2.参考(17条消息) 树莓派4B使用 Adafruit_PCA9685 报错IOError: [Errno 121] Remote I/O error解决办法_Black__Jacket的博客-CSDN博客