4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Piで温度記録Webサーバを作る

Last updated at Posted at 2018-11-14

準備するもの

  • 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動作設定

/etc/munin/apache.conf
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を追加インストールします
4
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?