Raspberry Pi + WebIOPi + MCP3008 (SPI ADC) + PCA9685(I2C PWM)
Raspberry Pi に WebIOPi をインストールして SPI 接続タイプの ADC MCP3008 を制御してみる。ついでに PWM 制御 LSI の PCA9685 も使ってみる。PCA9685 は I2C。MCP3008 はひとつだが、PCA9685 は二つ接続している。
SPI と I2C のドライバ関係は改めてインストールする必要はない。
WebIOPi に含まれているらしい。
まず、Raspberry Pi に SPI と I2C 関係のドライバインストールなどを行う。
- ドライバインストール
$ sudo apt-get -y install python-smbus i2c-tools
- raspi-blacklist.conf の修正
$ sudo nano /etc/modprobe.d/raspi-blacklist.conf
で、この2行をコメントアウトする。
[BEFORE]blacklist spi-bcm2708 blacklist i2c-bcm2708
[AFTER]# blacklist spi-bcm2708 # blacklist i2c-bcm2708
- py-spidev のインストール
$ cd $ mkdir py-spidev $ cd py-spidev $ wget https://raw.github.com/doceme/py-spidev/master/setup.py $ wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c $ sudo python setup.py install $ cd ../ $ rm -fr py-spidev
- /etc/modules の修正
$ sudo nano /etc/modules
で、次の2行を追加する。i2c-dev i2c-bcm2708
- リブート
- I2C の接続確認はこう
$ sudo i2cdetect -y 1
次に、WebIOPi 関係。
- /etc/webiopi/config [SCRIPTS]
[SCRIPTS] myscript = /home/pi/myproject/python/script.py
- /etc/webiopi/config [DEVICES]
ここで「adc0」と「pwm0」「pwm1」という名称は rest で使われるので、MCP3008と PCA9685 を操作するための URL 中に現れる。pwm0 = PCA9685 pwm1 = PCA9685 slave:0x41 adc0 = MCP3008
- myproject/python/script.py の import 部分
チュートリアルではfrom webiopi.devices.analog import MCP3008
となっていたが、これではインポートできなかった。webiopi.devices.analog ではなく、webiopi.devices.analog.mcp3x0x を使用する。import webiopi from webiopi import deviceInstance from webiopi.devices.analog.mcp3x0x import MCP3008 from webiopi.devices.analog.pca9685 import PCA9685 import datetime
- myproject/python/script.py の def setup()
これを追加する。adc0 = MCP3008() pwm0 = PCA9685(frequency=100) pwm1 = PCA9685(slave=0x41, frequency=100)
WebIOPi の起動はこれ。
さらにいろいろやりたい時は、 Javascript か Python でプログラムを作る。それはまた次回。
$ sudo webiopi -d -c /etc/webiopi/configRaspberry Pi の IP アドレスを 192.168.0.202 とすると、次の URL で状態を表示できる。
さらにいろいろやりたい時は、 Javascript か Python でプログラムを作る。それはまた次回。
adc0 の入力電圧を表示する。
http://192.168.0.202:8000/devices/adc0/analog/0/voltadc0 の AD の値を表示する。
http://192.168.0.202:8000/devices/adc0/analog/0/integerpwm1 のチャンネル数を表示する。
http://192.168.0.202:8000/devices/pwm1/pwm/countPCA9685 に値を書き込むのは GET ではなく、POST になるのでこれも次回。
WebIOPi のインストールコマンドに、こういうのもあった。
$sudo ./setup.sh skip-apt
device not found のようなエラーが発生した。WebIOPi をインストールし直したら動いてしまった。なんだったのか・・・。
/var/log/webiopi に WebIOPi のログがあるので、これを見ると何かあったときに原因がわかるかもしれない。
/var/log/webiopi に WebIOPi のログがあるので、これを見ると何かあったときに原因がわかるかもしれない。