APDS-9960をRaspberry Piで試す

BluePillでは検出すらできなかったAPDS-9960ですが、Raspberry Piで試してみます。
とりあえず、3.3V、GND、SDA、SCLを結線してRaspberry Piの電源を入れて、I2C上に見えているか確認します。

$ i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- 39 -- -- -- -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- --                   
$

アドレス0x39でデバイス自体は見えているようですので、実際に動作させます。今回はお手軽に済ませたいので、こちらのライブラリを使用して進めます。
まずはPython3の仮想環境を作って、ライブラリをインストールします。

$ cd python3
$ python3 -m venv apds9660
$ cd apds9660
$ source bin/activate
$ pip install --upgrade pip
$ pip install apds9960 RPi.GPIO smbus
$ cd python-apds9960
$ python3 setup.py install
/usr/lib/python3.7/distutils/dist.py:274: UserWarning: Unknown distribution option: 'long_description_content_type'
  warnings.warn(msg)
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/apds9960
copying apds9960/const.py -> build/lib/apds9960
copying apds9960/__init__.py -> build/lib/apds9960
copying apds9960/device.py -> build/lib/apds9960
copying apds9960/exceptions.py -> build/lib/apds9960
running install_lib
running install_egg_info
Writing /home/pi/python3/apds9660/lib/python3.7/site-packages/apds9960-0.2.egg-info
$ 

gitでプロジェクトをcloneしてサンプルプログラムを実行してみます。

$ git clone https://github.com/liske/python-apds9960.git
Cloning into 'python-apds9960'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 114 (delta 3), reused 6 (delta 2), pack-reused 102
Receiving objects: 100% (114/114), 37.23 KiB | 150.00 KiB/s, done.
Resolving deltas: 100% (49/49), done.
$ cd python-apds9960/rpi
$ python3 test_gesture.py 
Traceback (most recent call last):
  File "test_gesture.py", line 8, in <module>
    bus = smbus.SMBus(port)
FileNotFoundError: [Errno 2] No such file or directory
$ 

ということで、エラーになってしまいます。どうやら、普通のsmbusモジュールでは仮想環境ではダメなようです。

$ pip install smbus2
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting smbus2
  Downloading https://www.piwheels.org/simple/smbus2/smbus2-0.3.0-py2.py3-none-any.whl (9.1 kB)
Installing collected packages: smbus2
Successfully installed smbus2-0.3.0
$

として、smbus2というモジュールをインストールします。その後、test_gesture.py の ソースの冒頭の

import smbus

というモジュールをインポートしている箇所を

import smbus2 as smbus

と修正します。これで実行すると、今度は、

$ python3 test_gesture.py 
Traceback (most recent call last):
  File "test_gesture.py", line 8, in <module>
    bus = smbus.SMBus(port)
  File "/home/pi/python3/apds9660/lib/python3.7/site-packages/smbus2/smbus2.py", line 279, in __init__
    self.open(bus)
  File "/home/pi/python3/apds9660/lib/python3.7/site-packages/smbus2/smbus2.py", line 308, in open
    self.fd = os.open(filepath, os.O_RDWR)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'
$

ということで、「そんなデバイスはない」と怒られます。ソース7行目の「port = 1」を「port = 0」に修正すると、ようやく動作しました。センサーの前で手を動かすと、その方向に応じた表示が出ます。なかなか面白いです。

・・・・が、Raspberry Piで動かすのではなく、もっと小さなマイコンで動かしたいんだよなぁ。なんでBluePillのI2Cは動かないんだろう??

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)