【树莓派/入门】Manjaro下通过GPIO控制云台
说在前面
- 树莓派版本:4B
- 树莓派系统:Manjaro-ARM-xfce-rpi4-20.02
- 主要参考:树莓派实验室
- 其他说明:非抄袭或转载,本体在CSDN,测试
说明
- 参考的那篇文章挺详细的了,如果树莓派系统是
Raspbian参考那篇应该就行了。此处记录下在Manjaro下遇到的一些问题。
安装RPi.GPIO模块
- pip安装
sudo pip install RPi.GPIO -i https://pypi.tuna.tsinghua.edu.cn/simple - 通过
AUR安装sudo pacman -S yay sudo yay -S python-raspberry-gpio - 如果
pip安装的不行,可以试试AUR的;我两个都安装了/哭
连接
- 一般买来的云台三个引脚是粘在一起的,所以最好买一些
杜邦线(公对母)。我就比较惨了,没买,就把它们剪开来了/暴风哭泣


- 将云台的红色接
5V power,棕色接Ground,橘色接GPIO(任意一个GPIO即可,例如17,那么在python中就对应的使用17)
是否需要编辑Config.txt
- 不需要
- 实验证明,即使不在
Config.txt中添加dtoverlay=w1-gpio-pullup,gpiopin=17,pullup=on也可以通过python包RPi.GPIO进行访问。
Not running on a RPi!
- 错误信息
>>> GPIO.setup(17, GPIO.OUT) Traceback (most recent call last): File "<stdin>", line 1, in <module> RuntimeError: Not running on a RPi! - 原因是普通用户
pi没有对GPIO的访问权限,正确的做法应该是对用户pi赋予访问GPIO的权限。简单方法是直接在root权限下运行(如直接sudo):[pi@RaspberryPI ~]$ sudo python Python 3.8.1 (default, Jan 25 2020, 17:01:17) [GCC 9.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import RPi.GPIO as GPIO >>> GPIO.setmode(GPIO.BCM) # 设置GPIO模式为BCM,这样与上面那个引脚图就能对上了 >>> GPIO.setup(17, GPIO.OUT)# 将17号引脚作为输出(云台的输入) >>> tilt = GPIO.PWM(17, 50) # 设置频率 >>> tilt.start(0) # 启动 >>> tilt.ChangeDutyCycle(2) # 转动 >>> tilt.ChangeDutyCycle(3) >>> tilt.ChangeDutyCycle(10) - 注意:在转动时很容易转过头,因此在调用
ChangeDutyCycle()时的参数不要过大或者过小,建议3-10
单次触发
- 若有点击某个按钮,让舵机移动一定的方向,可以考虑如下代码:
其中3、11是转动的最大值;不使用import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) Angle = 7 GPIO.setup(17, GPIO.OUT) pwm = GPIO.PWM(17, 50) def setServoAngle(angle): global Angle global pwm pwm.start(0) Angle = Angle + angle if Angle < 3: Angle = 3 if Angle > 11: Angle =11 pwm.ChangeDutyCycle(Angle) sleep(0.1) pwm.ChangeDutyCycle(0)pwm.stop()而使用pwm.ChangeDutyCycle(0)来暂停的原因是:在pwm.stop()后,再次调用setServoAngle()会出现一些过度转动的情况(实验得出的结论,原因未知),使用上面这种方式要正常一点。
运行图


浙公网安备 33010602011771号