Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Raspbian BusterのRaspberry PiからPythonでPCA9685モジュールを使ってLチカをする
- Raspberry PiのI2Cのピンはこんな感じです
- https://cdn.sparkfun.com/assets/learn_tutorials/6/7/6/PiZero_1.pdf
- I2CデバイスのSDAをRaspberry PiのGPIO2に接続します
- I2CデバイスのSCLをRaspberry PiのGPIO3に接続します
- I2CデバイスのVCCをRaspberry Piの+3.3Vに接続します
- I2CデバイスのGNDをRaspberry PiのGNDに接続します
- 1.raspi-configでI2Cを有効にする
- $ sudo raspi-config
- 「5 Interfacing Options」を選択
- 「P5 I2C」を選択
- 「Would you like the ARM I2C interface to be enabled?」で<はい>を選択
- 「The ARM I2C interface is enabled」と表示されたら<了解>を選択
- 「<Finish>」で終了
- 2.再起動する
- 3.lsmodでi2c_bcm2708があるか確認
- $ lsmod
- hwmon 16384 1 raspberrypi_hwmon
- snd_timer 32768 1 snd_pcm
- snd 73728 5 snd_timer,snd_bcm2835,snd_pcm
- i2c_bcm2835 16384 0
- bcm2835_codec 36864 0
- bcm2835_v4l2 45056 0
- 4.i2c-toolsを入れる
- sudo apt-get -y install i2c-tools
- 5.ls -l /dev/i2c*でI2Cデバイスがあるか確認
- $ ls -l /dev/i2c*
- crw-rw---- 1 root i2c 89, 1 12月 27 16:39 /dev/i2c-1
- /dev/i2c-1の場合はbusnum=1になる
- 6.i2cdetectで接続されているI2Cデバイスのアドレスを確認する
- $ i2cdetect -y 1
- 0 1 2 3 4 5 6 7 8 9 a b c d e f
- 00: -- -- -- -- -- -- -- -- -- -- -- -- --
- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
- 70: -- -- -- -- -- -- -- --
- これでbusnum=1のI2Cに接続されているI2CデバイスのI2Cのアドレスがわかります
- (busnumとI2Cのアドレスは後で使います)
- この例の場合だとI2Cのアドレスは0x40になります
- 7.Adafruit_Python_PureIOを入れる
- https://github.com/adafruit/Adafruit_Python_PureIO
- $ sudo pip3 install Adafruit-PureIO
- 8.Adafruit_Python_GPIOを入れる
- https://github.com/adafruit/Adafruit_Python_GPIO
- $ sudo apt-get update
- $ sudo apt-get install build-essential python3-pip python3-dev python3-smbus git
- $ git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
- $ cd Adafruit_Python_GPIO
- $ sudo python3 setup.py install
- 9.Adafruit_Python_PCA9685を入れる
- $ sudo pip3 install adafruit-pca9685
- これでI2Cの設定、必要なライブラリのインストールは終了です
- pca9685_test01.pyという名前で下記の内容でファイルを作成
- from __future__ import division
- import Adafruit_GPIO.I2C as I2C
- import Adafruit_PCA9685
- import time
- import math
- pwm = Adafruit_PCA9685.PCA9685(address=0x40, busnum=1)
- i2c = I2C
- device = i2c.get_i2c_device(0x40, busnum=1)
- def get_pwm(index):
- _data0 = device.readU8(0x06 + 4 * index)
- _data1 = device.readU8(0x07 + 4 * index)
- _data2 = device.readU8(0x08 + 4 * index)
- _data3 = device.readU8(0x09 + 4 * index)
- data0 = int(_data1 << 8 | _data0)
- data1 = int(_data3 << 8 | _data2)
- pwm_read = (data0, data1)
- return pwm_read
- def duty(index, value=None, invert=None):
- if value is None:
- pwm_read = get_pwm(index)
- if pwm_read == (0, 4096):
- value = 0
- elif pwm_read == (4096, 0):
- value = 4095
- else:
- value = pwm_read[1]
- if invert:
- value = 4095 - value
- return value
- if not 0 <= value <= 4095:
- raise ValueError("Out of range")
- if invert:
- value = 4095 - value
- if value == 0:
- pwm.set_pwm(index, 0, 4096)
- elif value == 4095:
- pwm.set_pwm(index, 4096, 0)
- else:
- pwm.set_pwm(index, 0, value)
- def func01(num):
- a01 = num % 160
- if (a01) < 80.0:
- a02 = (1.0 / 80.0 * a01)
- else :
- a02 = (1.0 / 80.0 * (160.0 - a01))
- return a02 * a02 * a02
- # Set frequency to 60hz, good for servos.
- pwm.set_pwm_freq(240)
- while True:
- for k in range(8):
- for j in range(0,160, 10):
- for i in range(16):
- f01 = func01(int(320.0 / 16.0 * i + j))
- val01 = int(f01 * 4095.0)
- duty(i, value=4095 - val01)
- time.sleep(0.1)
- for i in range(16):
- duty(i, value=4095)
- time.sleep(0.5)
- for i in range(16):
- duty(i, value=0)
- time.sleep(1)
- for i in range(16):
- duty(i, value=4095)
- time.sleep(1)
- for i in range(16):
- duty(i, value=0)
- time.sleep(1)
- for i in range(16):
- duty(i, value=4095)
- time.sleep(1)
- 実行
- python3 pca9685_test01.py
- 上のプログラムは16個のLEDをPCA9685にシンク接続した場合のプログラムです
- micropython-adafruit-pca9685
- https://github.com/adafruit/micropython-adafruit-pca9685
- このmicropython用のライブラリを参考にすればサーボモータも簡単に扱えると思われます
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement