前提
https://github.com/SWITCHSCIENCE/samplecodes/tree/master/BME280/Python27 を動かすときに。
最初に結論
- 依存パッケージはsudoで入れよ
sudo pip install -r requirements.txt
- I2Cを有効化せよ
sudo raspi-config
- プログラムはsudoで実行せよ
sudo python bme280_sample.py
以下は蛇足。どういう経緯で結論に至ったか。
ImportError: No module named smbus2
pip install -r requirements.txt
すれば済む話に見えるが、実は
sudo pip install -r requirements.txt
の方がいい。理由は後述。
OSError: [Errno 2] No such file or directory: '/dev/i2c-1'
pip install requirements.txt
python bme280_sample.py
するとこうなる。
理由はデフォルトでI2Cが無効化されているからで、解決策は Check! Raspberry Pi で I2C を使いたい(トラブルシューティング)にある通り
sudo raspi-config
だ。なお上記記事は2016年のもので、2020年現在(Raspberry Pi OS 5.4.79+)では若干違う。I2Cの設定は 3 Interface Options
の中にある。
さて、I2Cを有効化して改めて
python bme280_sample.py
するとどうなるかというと、こうなる
OSError: [Errno 13] Permission denied: '/dev/i2c-1'
じゃあsudoにすりゃいいんだろと思って
sudo python bme280_sample.py
すると
ImportError: No module named smbus2
になる。
pythonのモジュールシステムにはあまり詳しくないが、sudoで起動するpythonは別の場所から依存パッケージを探してるのかな?というわけで
sudo pip install -r requirements.txt
すると動くようになった。