下林明正のブログ

個人的かつ雑多なブログです。

Raspberry Pi 2でAdafruit TSL2561を正しく使うメモ

普通に調べてやると

qiita.com

瞬間の計測のためかバラツキがあるデータになりました。

となるけど、さすがにバラつきすぎていておかしい。そもそも自分の環境では暗いのに1000ルクスとかあることになってておかしい。ので調べた。

どうやら一口にTSL2561といっても実装が色々あるっぽい。ちゃんと調べてないけど、照度センサーがTSL2561という型番で、I2Cで取れるようにした実装が色々あるのだと思う。そんで、上の記事とかが参照しているPythonコードのは僕が持っているやつとは別のやつのための実装っぽい。

僕が持っているのは、

akizukidenshi.com

[adafruit PRODUCT ID: 439]

というやつ。

調べてみた感じでは、

github.com

これがAdafruit公式のTSL2561のArduino向けの実装で、

github.com

これがRaspberry Piで使えるようにしたPython移植版っぽい。 ところでpython3という時点で嫌な予感がする。

pi@raspberrypi2 ~/works/TSL2561 $ ./TSL2561.py
Traceback (most recent call last):
  File "./TSL2561.py", line 3, in <module>
    import quick2wire.i2c as i2c
ImportError: No module named quick2wire.i2c

まずquick2wireとやらが入っていないので動かなかった。

github.com

仮想化環境を使うことを推奨しているが男らしくシステムPythonへインストール……するけど、

pi@raspberrypi2 ~/works/quick2wire-python-api $ python3 setup.py install
Traceback (most recent call last):
  File "setup.py", line 3, in <module>
    from setuptools import setup
ImportError: No module named setuptools

setuptoolsとやらがなくて動かない。Pythonはよく分からない。 sudo apt-get install python3-setuptoolsしてやり直したらいけた。

気を取り直して実行するも、

pi@raspberrypi2 ~/works/TSL2561 $ ./TSL2561.py
Traceback (most recent call last):
  File "./TSL2561.py", line 300, in <module>
    with i2c.I2CMaster(0) as bus:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait bcm2708.vc_i2c_override=1
  File "/usr/local/lib/python3.2/dist-packages/quick2wire_api-0.0.0.2-py3.2.egg/quick2wire/i2c.py", line 48, in __init__
    self.fd = posix.open("/dev/i2c-%i"%n, posix.O_RDWR|extra_open_flags)
OSError: [Errno 2] No such file or directory: '/dev/i2c-0'

とかいって動かない。 いろいろ調べてみた感じでは、/dev/i2c-0は古いRaspberry Piで使われていたデバイスっぽい?古いモデルでは設定を書くことで/dev/i2c-1と同時に使えたようだが、手元のRaspberry Pi 2では使えないようだった?ので、ダメ元でシンボリックリンクを張ってごまかす。sudo ln -s /dev/i2c-1 /dev/i2c-0みたいな感じで。

pi@raspberrypi2 ~/works/TSL2561 $ ./TSL2561.example.py
0a
00 00
00 00
Full:     0000
Infrared: 0000
Visible:  0000
0a
Found sensor...
Full luminosity value: 196616
Full luminosity value: 0x030008
IR: 3
Full: 8
Visible: 0x5
Visible, calculated: 0x5
Lux: 55

動いたっぽい? 試しに照明を近づけて再実行してみる。

pi@raspberrypi2 ~/works/TSL2561 $ ./TSL2561.example.py
0a
00 00
00 00
Full:     0000
Infrared: 0000
Visible:  0000
0a
Found sensor...
Full luminosity value: 262241
Full luminosity value: 0x040061
IR: 4
Full: 61
Visible: 0x5d
Visible, calculated: 0x5d
Lux: 1330

値はそれらしいし、安定して得られる。ので動いているっっぽい。

ので、やはり参照している実装が悪かったっぽい。Python3とか使いたくなければ自分で別の言語に移植すれば動かせそう。

取り急ぎ忘れないようにメモった。