如何同时使用ServoKit库与GPIO引脚 解决引脚模式已设置报错
问题原因
adafruit_servokit库内部默认会在初始化时将GPIO引脚模式设置为BCM编码,当你后续再调用GPIO.setmode(GPIO.BOARD)时,GPIO库检测到模式已被设置且不一致,就会抛出该错误。
软件解决方案(无需额外采购硬件)
- 方案1:统一引脚编码模式
直接使用BCM编码模式,将你的GPIO设置代码修改为GPIO.setmode(GPIO.BCM),同时把后续代码里用到的引脚编号更换为对应BCM编码的引脚号即可。 - 方案2:调整库导入顺序
先导入RPi.GPIO库并设置你需要的引脚模式,再导入adafruit_servokit库,库会检测到已有的引脚模式设置并沿用,不会触发冲突:
额外提示:每次程序运行结束时调用import RPi.GPIO as GPIO # PWM直流电机控制的依赖库 GPIO.setmode(GPIO.BOARD) # 先设置引脚模式 from adafruit_servokit import ServoKit # 适配Jetson的舵机控制库GPIO.cleanup(),可以避免前次程序异常退出残留的模式设置导致的偶发冲突。
硬件解决方案(彻底规避冲突)
采购基于PCA9685芯片的I2C舵机驱动板,adafruit_servokit原生支持该硬件。舵机全部接在驱动板上,通过I2C总线和主板通信,不需要占用主板的GPIO/PWM引脚,主板GPIO可以完全独立使用,不存在任何模式冲突问题,同时也能支持更多舵机的同时控制。
内容的提问来源于stack exchange,提问作者Carlos Cuartas
相关产品推荐
相关产品推荐

