2
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi Zero WHで取得したセンサデータをGoogleスプレッドシートに自動記録

Last updated at Posted at 2019-05-07

はじめに

Raspberry Pi Zero WHで温度や照度を測って、Googleスプレッドシートに自動記録していく方法のメモ。
Raspberry Pi Zero WH本体のセットアップから、センサの接続、スプレッドシートへの記録まで。

用意したもの

準備

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

以上で、定期的にスプレッドシートへの記録が行われるはず。
おつかれさまでした。

2
11
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
2
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?