準備するもの
- Raspberry Pi 3 Model B+ あるいはRaspberry Pi Zero
- ACケーブル
- Bosch BME280 気温・湿度・気圧センサ(千石電商で購入)
- ジャンパピン メス-メス 4本
- USB接続キーボード
- Raspbian OSインストール用のMicroSDカード(今回は32GBのものを利用しました)
Raspberry Pi Zeroで動かすなら、更に下記を準備
- USB接続の無線LANドングルとUSB On-The-Goケーブル(Raspberry Pi Zero WかWHを買えば不要です)
- HDMI変換コネクタ
Raspbian Liteのインストール、初期設定
- PCでNoobsをダウンロードし、ZIPファイルの内容をFAT32フォーマットされたMicroSDカードにコピーします。
- MicroSDカードを挿入して起動します
- Raspbian Liteをインストール
- Wi-FiのSSIDとパスワードも登録しておくと楽です
- 再起動後、user:pi, password:raspberryでログイン
% sudo raspi-config
- hostnameを設定
- SSHサーバを起動
- timezoneを設定
- ユーザpiのパスワードを変更
これ以降、sshによるリモートログインで作業を続行できます。
Apache2とMuninのインストール
# apt update && apt upgrade
# apt install apache2 munin i2c-tools python-smbus
# ln -s /etc/munin/apache.conf /etc/apache2/sites-enabled/munin.conf
Munin動作設定
18c18,20
< Allow from localhost 127.0.0.0/8 ::1
---
> Allow from all
> Require all granted
> Allow from localhost 127.0.0.0/8 ::1
BME280の動作設定
Raspberry PiのGPIOとセンサを接続します。
Vcc - Pin01(3.3V DC)
SDA - Pin03(I2C Data)
SCK - Pin05(I2C Clock)
GND - Pin06(GND)
※スイッチサイエンス社のBME280の場合、SDOをPin09(GND)に落とします。
センサの認識状態を確認する
# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
BME280のセンサが0x76にて認識されていることを確認できました。
次に、スイッチサイエンス社のWebサイトから、サンプルコードをダウンロードします。ファイル冒頭のSMbus2は、SMbusに書き換えておきます。
$ python bme280_sample.py
temp : 23.37 ℃
pressure : 1015.26 hPa
hum : 52.59 %
無事、センサから情報を取得できました。
Muninのプラグイン
こちらのサイトを全面的に参考にさせていただきました。なので、Muninプラグインについてはあまり書くことがありません。すみません。
ちなみに、スイッチサイエンス社のサンプルコードでは、UTF-8で単位がつけられていますが、Muninにわたす場合には単位を付けずに浮動小数点の値をそのまま出力させてやります。
おまけ:IFTTTでGoogle Spreadsheetに出力させる
温度取得のスクリプトに少し手を加えます。IFTTTのWebhookによりPOSTしたデータをGoogle Spreadsheetに格納させるスクリプトにします。動作にはurllib3が必要ですので、aptでpython-urllib3をインストールしておきます。特にpipなどを入れる必要はありませんでした。
url ="https://maker.ifttt.com/trigger/(イベント名)/with/key/(取得したKEY)"
method = "POST"
headers = {"Content-Type" : "application/json"}
obj = {"value1" : result_temperature, "value2" : result_humidity, "value3" : result_pressure}
json_data = json.dumps(obj).encode("utf-8")
http = urllib3.PoolManager()
r = http.request(
'POST',
url,
body = json_data,
headers = headers)
おまけ2:Twitterに投稿する
(作成中)
終わりに
念の為、1日毎にリブートするようにします。
% sudo crontab -e
01 5 * * * /sbin/reboot
Raspberry Pi OS更新にあわせて
- print文の引数に()をつける必要があります。
- apt install python3-smbus でPython3用のSMBUSを追加インストールします