はじめに
気温とか気圧とか色々記録したいなぁなどと
漠然とした理由から色々な製品を調べていたのですが
自分の用途にあった丁度良い製品が見当たらない。無いなら作ればよい!
ということで今更ですがRaspberry Piをはじめてみました。
本記事ではRaspberry Piを触っていて困ったことを書き溜めていきます。
(困ったことが発生した際に本記事に追加更新していきます。)
使用している環境
- Raspberry Pi 4 MODEL B
- SUNFOUNDER Sensor Kit V2.0 for Raspberry Pi
- Python3
以下困ったこと集
Barometer BMP180のサンプルプログラム(31_barometer.py)がエラーで実行できない1
事象
以下のエラーが発生する
$ sudo python3 31_barometer.py
Barometer begins...
Traceback (most recent call last):
File "31_barometer.py", line 42, in <module>
loop()
File "31_barometer.py", line 26, in loop
sensor = BMP085.BMP085()
File "/usr/local/lib/python3.7/dist-packages/Adafruit_BMP-1.5.0-py3.7.egg/Adafruit_BMP/BMP085.py", line 66, in __init__
File "/usr/local/lib/python3.7/dist-packages/Adafruit_GPIO-1.0.4-py3.7.egg/Adafruit_GPIO/I2C.py", line 66, in get_i2c_device
File "/usr/local/lib/python3.7/dist-packages/Adafruit_GPIO-1.0.4-py3.7.egg/Adafruit_GPIO/I2C.py", line 99, in __init__
File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO-1.1.8-py3.7.egg/Adafruit_PureIO/smbus.py", line 125, in __init__
File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO-1.1.8-py3.7.egg/Adafruit_PureIO/smbus.py", line 150, in open
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'
原因
I2Cが有効化されていない
対応
I2Cを有効化してOSを再起動する
-
Raspberry Piのコンフィグを開く
$ sudo raspi-config
-
3 Interface Options
>P5 I2C
を選択する。1 -
Would you like the ARM I2C interface to be enabled? で
<はい>
を選択する。 -
The ARM I2C interface is enabled で
<了解>
を選択する。 -
<Finish>
で閉じる。 -
Raspberry Piを再起動する。
$ sudo reboot
Barometer BMP180のサンプルプログラム(31_barometer.py)がエラーで実行できない2
事象
以下のエラーが発生する
$ sudo python3 31_barometer.py
Barometer begins...
Traceback (most recent call last):
File "31_barometer.py", line 42, in <module>
loop()
File "31_barometer.py", line 27, in loop
temp = sensor.read_temperature() # Read temperature to veriable temp
File "/usr/local/lib/python3.7/dist-packages/Adafruit_BMP-1.5.0-py3.7.egg/Adafruit_BMP/BMP085.py", line 144, in read_temperature
TypeError: unsupported operand type(s) for >>: 'float' and 'int'
原因
BMP085.pyで式の要素の型が合っていない
対応
BMP085.pyを修正(式の要素に型を指定)する
エラーの内容より実行しているファイルが
/usr/local/lib/python3.7/dist-packages/Adafruit_BMP-1.5.0-py3.7.egg/Adafruit_BMP/BMP085.py
であることがわかります。
こちらはeggファイルなので、このままですと修正するのが面倒くさいため
Adafruit_BMP-1.5.0-py3.7.egg
を展開し配下のAdafruit_BMP
フォルダを
以下のようにサンプルプログラムと同じフォルダにコピーします。
こうすることでPythonは親スクリプト(サンプルプログラム)の実行パスと同一パスのファイルから
優先して読み込まれるためコピー後のBMP085.pyが読み込まれます。
[/home/pi/SunFounder_SensorKit_for_RPi2/Python]
├31_barometer.py
└[Adafruit_BMP]
├__init__.py
└BMP085.py
つぎにコピーしたBMP085.pyを修正します。
エラーの内容では144行目がエラーであるとなっていますがこれはあくまでも
一番はじめにヒットしたエラー箇所であり
実は同種のエラー箇所が複数あります。
そのため以下のように複数行修正する必要があります。
いずれも明示的に変数をint型にするよう修正しています。
行数 | 修正前 | 修正後 |
---|---|---|
144 | temp = ((B5 + 8) >> 4) / 10.0 | temp = (int(B5 + 8) >> 4) / 10.0 |
164 | X1 = (self.cal_B2 * (B6 * B6) >> 12) >> 11 | X1 = (self.cal_B2 * int(B6 * B6) >> 12) >> 11 |
165 | X2 = (self.cal_AC2 * B6) >> 11 | X2 = (self.cal_AC2 * int(B6)) >> 11 |
169 | X1 = (self.cal_AC3 * B6) >> 13 | X1 = (self.cal_AC3 * int(B6)) >> 13 |
170 | X2 = (self.cal_B1 * ((B6 * B6) >> 12)) >> 16 | X2 = (self.cal_B1 * (int(B6 * B6) >> 12)) >> 16 |
180 | X1 = (p >> 8) * p >> 8) | X1 = (int(p) >> 8) * (int(p) >> 8) |
182 | X2 = (-7357 * p) >> 16 | X2 = (-7357 * int(p)) >> 16 |
自分はPythonを少しかじっていたのでわかりましたが初心者殺しだよなぁと^^;
libcamera-helloでプレビューが真っ暗になってしまう
原因
グラフィックアクセラレーションが有効化されていない
対応
次の手順でグラフィックアクセラレーションを有効化する。
- raspi-configを起動する
- Advanced Option > Glamerを選択する
- Glamer AccelerrationをEnable(有効化)する
- OSを再起動する
それではよきラズパイライフを!
-
Raspberry Piのバージョンによりコンフィグのメニューが微妙に違います。 ↩