最近、プログラミングができていないのですが、仕事で必要になったので、メモしておきます。
きっかけ
仕事でRaspberryPi 3を使って、サーボモータをたくさん動かさないといけなくなったのですが、標準だとPWMが出せるピンが1本しかないために仕方なく、サーボモータドライバのPCA9685を使うことにしました。
本当はGoでやりたいところですが、GPIOを使った部分のところがPythonが信頼度が高そうなので、ひとまず、Python教に入信しようと思いますw
i2cのセットアップ
Raspberry Pi標準だとi2cが無効になっているため、Raspi-Configで有効にします。
Raspi-Config
$ sudo raspi-config
Interfacing Optionsを選択する。(jessieより前だと、Advanced Optionsにあったみたい?)
##/boot/config.txtに通信速度の設定を追加
$ sudo vi /boot/config.txt
初期値は100000ですが、通信速度が早すぎてエラーメッセージが出力されるので、最下行か、i2c関連の設定付近に以下を追記する。
dtparam=i2c_baudrate=10000
モータドライバのライブラリのセットアップ
Adafruitの公式リポジトリからソースコードをダウンロード
$ git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
$ git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
$ git clone https://github.com/adafruit/Adafruit_Python_PureIO.git
PCA9685のライブラリだけをダウンロードすれば使えるのかと思っていましたが、ファイルがないというエラーメッセージが出ました。
インストール
それぞれのライブラリで以下のコマンドを実行する。
$ cd Adafruit_Python_PCA9685
$ sudo python setup.py install
$ cd ../Adafruit_Python_GPIO
$ sudo python setup.py install
$ cd ../Adafruit_Python_PureIO
$ sudo python setup.py install
動作確認
コマンドで動作確認
まだ、意味はわかっていないのですが、i2cのポートの動作確認ができるようです。
$ sudo i2cdetect -y 1
Pythonで動作確認
できれば、Python3が使いたかった…。
ポート1とポート2にサーボモータ(SG92R)を挿して動作確認しました。ブレッドボードにボタンを2個付けて、それぞれを押すと動作しました。
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import Adafruit_PCA9685
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)
try:
while True:
sw1 = GPIO.input(16)
sw2 = GPIO.input(18)
if sw1 == 1:
pwm.set_pwm(1, 0, 600)
else:
pwm.set_pwm(1, 0, 375)
if sw2 == 1:
pwm.set_pwm(2, 0, 600)
else:
pwm.set_pwm(2, 0, 375)
except KeyboardInterrupt:
pass
参考サイト
- http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_gpio_enable_i2c/
- http://pongsuke.hatenablog.com/entry/2017/01/13/145836
- http://kouzu.info/raspberrypi-twi-7seg/
- https://www.qoosky.io/techs/2316d68b2e
Disclaimer
- この記事は個人的なものです。私の雇用者とは全く関係はありません。(一応つけておきます)