はじめに
Raspberry Pi Zero WHで温度や照度を測って、Googleスプレッドシートに自動記録していく方法のメモ。
Raspberry Pi Zero WH本体のセットアップから、センサの接続、スプレッドシートへの記録まで。
用意したもの
- Raspberry Pi Zero WH
- RPZ-IR-Sensor Rev2.0(端子実装済 外付センサーセット)
- MicroSDカード & リーダライタ
- USB ACアダプタ & MicroUSBケーブル
- その他:ディスプレイ、キーボード、マウス、それらを接続するためのケーブルや変換アダプタなど
準備
MicroSDカードのフォーマット
MicroSDカードをFAT32でフォーマットする。
これは、Raspberry Piがサポートしているフォーマット形式が、FAT32とFAT16のため。
4~32GBのカード(SDHC)であれば、通常FAT32でフォーマットされるので、特に留意点は無し。
32GBより大きなサイズのカード(SDXC)を使う場合は、普通にフォーマットするとexFAT形式になってしまうため、注意が必要。
32GBまでのカードを使うのが無難だけれど、64GB以上のカードでもFAT32でフォーマットすれば使える。
今回は、たまたま余っていたカードが64GBのものだったため、Disk Formatterを使ってFAT32でフォーマットした。
https://www.buffalo.jp/support/download/detail/?dl_contents_id=60879#1
MicroSDカードへのOSイメージ書き込み
OSイメージは、以下URLからRaspbian Stretch with desktopをダウンロードした。
https://www.raspberrypi.org/downloads/raspbian/
ダウンロードできたら、balenaEtcherを使ってOSイメージをMicroSDカードに書き込む。
https://www.balena.io/etcher/
OSイメージの書き込みが完了したら、Raspberry Pi Zero WHにMicroSDをセットすれば起動できる。
が、その前にSSH有効化とWiFi設定を仕込んでおくと楽。
というわけで、以下、その手順。
SSHの有効化
MicroSDのルート直下に「ssh」という名前の空ファイル(拡張子無し)を作成して置いておくと、Raspberry Pi Zero WHの起動時にSSHが有効化される。
WiFi設定
以下の内容を記述した「wpa_supplicant.conf」という名前のファイルを作成し、MicroSDのルート直下に配置する。
これにより、Raspberry Pi Zero WHの起動時に、自動的にWiFiへの接続が行われる。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="無線LANのSSID"
psk="パスフレーズ"
scan_ssid=1
}
Raspberry Pi Zero WHの起動
Raspberry Pi Zero WHにMicroSDカードをセット。
必要に応じて、ディスプレイ(mini HDMI経由)やキーボード(micro USB経由)等を接続した上で、電源ケーブルを接続する。
(電源スイッチは無いので、電源ケーブルを接続したらオンになる)
WiFiに接続されていること等を確認する。
ユーザ名piのパスワードを変更しておく。
SSH接続の確認
起動したRaspberry Pi Zero WHにてIPアドレスを確認して、putty等でSSH接続すれば、つながるはず。
なお、SSHクライアント側がmDNS(multicast Domain Name System)に対応していれば、IPアドレスを確認しなくても、「raspberrypi.local」というホスト名を指定することで接続ができて楽。
macや、最新のWindows 10であればおそらく使える。
(※mDNSは、Apple製品でいうところのBonjour)
環境センサRPZ-IR-Sensorの利用
Raspberry Pi Zero WHとの接続
今回用意したRPZ-IR-Sensorは、端子実装済みなので、はんだ付け不要で接続できる。
Raspberry Pi Zero WHにRPZ-IR-Sensorを重ねるようにして、Raspberry Pi Zero WHのGPIO(電源用MicroUSBと逆側の長辺にある、40ピンの接続端子)に接続すればOK。
また、今回用意したRPZ-IR-Sensorには、外付センサが同梱されている。
これは、Raspberry Pi Zero WH本体の発熱等の影響を受けずに測定するためのもの。
RPZ-IR-Sensorの端にある4ピンの端子に、接続する。
RPZ-IR-Sensor側と、外付センサ側、それぞれ、4ピン端子のところをよく見ると、各ピンの役割(SDA、SCL等)が書いてある。これが合致する向きになるよう、ケーブルの色を見て、接続すればOK。
データの取得
RPZ-IR-Sensorを使う前に、Raspberry Pi Zero WHのI2Cを有効にする必要がある。
$ sudo raspi-config
と打つと、設定画面が現れる。
「5. Interfacing options」から、I2Cを有効(enabled)に設定する。
後は、サンプルプログラムを持ってきて動かせば、ひとまずセンサデータが取得できる。
サンプルプログラムへのリンクは、以下のサポートページに記載されている。
http://indoor.lolipop.jp/IndoorCorgiElec/RPZ-IR-Sensor.php
$ wget http://indoor.lolipop.jp/IndoorCorgiElec/RPZ-IR-Sensor/rpz-sensor.zip
$ unzip rpz-sensor.zip
$ sudo pip3 install docopt
$ python3 /home/pi/rpz-sensor/python3/rpz_sensor.py
うまくいくと、以下のような形でセンサデータが表示される。
0x76が外付センサ、0x77が基板上のセンサ。
BME280 0x76
Temp : 26.3C
Pressure : 1005.3hPa
Humidity : 36.3%
BME280 0x77
Temp : 32.6C
Pressure : 1004.0hPa
Humidity : 30.5%
TSL2572
Lux : 285.2lux
Googleスプレッドシートへのセンサデータ記録
取得したセンサデータを、Googleスプレッドシートに自動記録したい。
要件は以下。
- 定期的にセンサデータを取得し、Googleスプレッドシートに追記
- 過去一定期間のデータ(24時間分、等)を対象に、センサデータをグラフ表示
以下の記事を参考にさせていただいた。
https://qiita.com/kunichiko/items/7f64c7c80b44b15371a3
今回使ったスクリプト等は、以下に置いてある。
https://github.com/nabon/raspberrypi-to-spreadsheet
- sample.xlsx
- script.gs
- measure.py
まず、Googleスプレッドシート上で、記録用のシートを作成する。
sample.xlsxは、シートのサンプル。以下のような仕様になっている。
- 151行目以降に、センサデータが記録される。
- 新しいデータが上にくる。(151行目が最新データ)
- 2行目~145行目には、過去144回分のデータ(151行目~294行目のデータ)が転記される。10分間隔のデータなら24時間分に相当。
- 温度、気圧、湿度、照度のグラフは、2行目~145行目を対象として描画。
「ツール」から「スクリプトエディタ」を開いて、スクリプトを作成する。
script.gsは、スクリプトのサンプル。
過去60,000回分(10分間隔だとおよそ1年分)の測定データを記録するようになっている。
「公開」から「ウェブ アプリケーションとして導入」を選択。
ダイアログの指示に従って、導入処理をする。
ここまでできたら、Raspberry Pi Zero WH側へのプログラム配置と定期実行の設定を行う。
rpz_sensor.py等がある場所と同じ場所(/home/pi/rpz-sensor/python3/)に、measure.pyを置く。
measure.pyは、rpz_sensor.pyを参考にしたもので、センサデータの取得とGoogleスプレッドシートへの送信を行うプログラムになっている。
measure.pyの以下の箇所に、スプレッドシートのスクリプトの、ウェブアプリケーションのURLを記載する。
url = "<URL of web application>"
measure.pyを実行すると、スプレッドシートにデータが1行追記されるはず。
これを、cronで定期実行するように設定する。
まず、cronのログが出力されるように設定する。
$ sudo nano /etc/rsyslog.conf
以下のようにコメントアウトを外す。
# cron.* /var/log/cron.log
↓
cron.* /var/log/cron.log
ログシステムを再起動。
$ sudo /etc/init.d/rsyslog restart
cronのスケジュールを設定する。
$ crontab -e
以下のように記載する。(10分毎に実行する場合)
*/10 * * * * /home/pi/rpz-sensor/python3/measure.py
スケジュールされていることを確認する。
$ crontab -l
ログの確認は以下。
$ sudo cat /var/log/cron.log
以上で、定期的にスプレッドシートへの記録が行われるはず。
おつかれさまでした。