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

