自分用の書きかけの覚書。pigpio の i2c 関連の関数のパラメータの与え方がよくわかっていない状態だが、〔Raspberry Pi 3B/3B+/Zero W + Python + pigpio ライブラリ + pigpio コード PCA9685.py*1〕と〔PCA9685 16channel 12bit pwm サーボドライバー*2〕を使ってサーボモータを動かすことができた。これでラズパイ側は(電源を除けば)[03:GPIO02(SDA1,I2C)] [05:GPIO03(SCL1,I2C)]の2個のGPIOピンを使うだけで最大16個までのサーボを動かせるようになった*3。
- ハードウェア側(Adafluit製)
次のようにピン接続する。ピン接続がきちんとしていて、ラズパイに電源がつながっていたら(ラズパイのOSが起動していても、いなくても電力が供給されているので)ドライバー上の赤いLEDが点灯する。 - プログラム側
- まず pigpio のサイトの Examples のページ(http://abyz.me.uk/rpi/pigpio/examples.html)から PCA9685_py.zip をダウンロードする
- この zip ファイルを解凍して Python コード PCA9685.py を取り出す
- コマンド "sudo python PCA9685.py" で実行。*5ドライバーに接続されているすべてのサーボモータが一斉に同じ動作をする
- Pythonプログラムの自作
- 最小限のコード:0番ポートのサーボモータを(多分、約)90度のポジションに動かす。これを"runPCA9685.py"の名前で"PCA9685.py"と同じフォルダに保存する
# -*- coding: utf-8 -*- if __name__ == "__main__": # ライブラリを読み込む部分 import PCA9685 import pigpio # ライブラリを使うためのインスタンスを立ち上げる部分 pi = pigpio.pi() if not pi.connected: exit(0) pwm = PCA9685.PWM(pi) # defaults to bus 1, address 0x40 # サーボモータを動作させるPWM信号の周波数を決める部分 pwm.set_frequency(50) # suitable for servos # サーボモータを動作させる部分 ch = 0 pw = 1500 pwm.set_pulse_width(ch, pw) # プログラムの終了処理の部分 pwm.cancel() pi.stop()
-
- コマンド "sudo python runPCA9685.py" で実行。
*1:"pigpio" i2c PCA9685 - Google 検索; pigpio library Examples
*2:pca9685 16channel 12bit pwm サーボドライバー - Google 検索 Adafluit製のものがあちこちで売られているようだ。
*3:ただし電力の供給をラズパイに頼ると、サーボモータの数が増えたときに、ラズパイが落ちるかもしれない。
I2C通信の使い方に記載の接続法を見ると、何台でもつなげそう。
*4:GroundのピンならどれでもOK
*5:この前に "sudo pigpiod" を実行しておく。