RasPi の GPIO制御ライブラリ一覧 : spec
こうして一覧表にまとめてみると、制御ライブラリでは”pigpio”で、特にサーボモーターの制御で出力チャンネルが2チャンネルで足りるなら、ハードウェアPWMを出力する関数”.hardware_PWM”がよいのではないでしょうか。出力チャンネルがそれ以上必要な場合は、Hardware Timed PWMで出力する関数”.set_servo_pulsewidth”がサーボモーターの制御に特化していて使いやすいと思います。
残念だったのは”Gpiozero”の関数”.AngularServo_angle”がサーボモーターの回転を直接、角度で指定できるのがとても分かり易かったのに、ジャダーが激しくて使い物にならないことでした。
RasPi の GPIO制御ライブラリ一覧 : info
こちらの一覧表では、各ライブラリのバージョンアップが進んでいたので、現時点での最新情報に改訂しました。新たにnode-rpioというライブラリも見つかったので、今後も確認をしていきたいと思います。
RPi.GPIOの関数".PWM_ChangeDutyCycle"
import RPi.GPIO from time import sleep RPi.GPIO.setmode(RPi.GPIO.BCM) RPi.GPIO.setup(12, RPi.GPIO.OUT) pig = RPi.GPIO.PWM(12, 50) pig.start(7.25) counter = 0 while (counter < 3): pig.ChangeDutyCycle(2.5) sleep(1) pig.ChangeDutyCycle(7.25) sleep(1) pig.ChangeDutyCycle(12) sleep(1) pig.ChangeDutyCycle(7.25) sleep(1) counter = counter + 1 pig.stop() RPi.GPIO.cleanup()
WiringPiの関数".pwmWrite"
import wiringpi from time import sleep wiringpi.wiringPiSetupGpio() wiringpi.pinMode(12, wiringpi.GPIO.PWM_OUTPUT) wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS) wiringpi.pwmSetRange(1024) wiringpi.pwmSetClock(375) counter = 0 while (counter < 3): wiringpi.pwmWrite(12, 25) sleep(1) wiringpi.pwmWrite(12,75) sleep(1) wiringpi.pwmWrite(12. 123) sleep(1) wiringpi.pwmWrite(12, 75) sleep(1) counter = counter + 1 wiringpi.pwmWrite(12, 0) wiringpi.pinMode(12, wiringpi.GPIO.INPUT) wiringpi.wiringPiSetGpio()
pigpioの関数".set_PWM_dutycycle"
import pigpio from time import sleep pig = pigpio.pi() pig.set_PWM_frequency(12, 50) pig.set_PWM_range(12, 1024) counter = 0 while (counter < 3): pig.set_PWM_dutycycle(12, 25) sleep(1) pig.set_PWM_dutycycle(12, 75) sleep(1) pig.set_PWM_dutycycle(12, 123) sleep(1) pig.set_PWM_dutycycle(12, 75) sleep(1) counter = counter + 1 pig.set_PWM_dutycycle(12, 0) pig.set_mode(12, pigpio.INPUT) pig.stop()
pigpioの関数".set_servo_pulsewidth"
import pigpio from time import sleep pig = pigpio.pi() counter = 0 while (counter < 3): pig.set_servo_pulsewidth(12, 2400) sleep(1) pig.set_servo_pulsewidth(12, 1450) sleep(1) pig.set_servo_pulsewidth(12, 500) sleep(1) pig.set_servo_pulsewidth(12, 1450) sleep(1) counter = counter + 1 pig.set_servo_pulsewidth(12, 0) pig.set_mode(12, pigpio.INPUT) pig.stop()
pigpioの関数”.hardware_PWM”
import pigpio from time import sleep pig = pigpio.pi() pig.set_mode(12, pigpio.ALT0) counter = 0 while (counter < 3): pig.hardware_PWM(12, 50, 120000) sleep(1) pig.hardware_PWM(12, 50, 72500) sleep(1) pig.hardware_PWM(12, 50, 25000) sleep(1) pig.hardware_PWM(12, 50, 72500) sleep(1) counter = counter + 1 pig.hardware_PWM(12, 50, 0) pig.set_mode(12, pigpio.INPUT) pig.stop()
Gpiozeroの関数".Servo"
from gpiozero import Servo from time import sleep pig = Servo(12, min_pulse_width=0.5/1000, max_pulse_width=2.4/1000) counter = 0 while (counter < 3): pig.min() sleep(1) pig.mid() sleep(1) pig.max() sleep(1) pig.mid() sleep(1) counter = counter + 1
Gpiozeroの関数”.AngularServo.angle”
from gpiozero import AngularServo from time import sleep pig = AngularServo(12, min_pulse_width=0.5/1000, max_pulse_width=2.4/1000) counter = 0 while (counter < 3): pig.angle = 90 sleep(1) pig.angle =0.0 sleep(1) pig.angle = -90 sleep(1) pig.angle = 0.0 sleep(1) counter = counter + 1