先ずは、参考にした情報はこちら。

先人の苦労に感謝しつつ、以上を踏まえてまっさらな状態からグラフを見れるところまでの構築をまとめてみました。

Raspberry Pi の準備

使用する Raspberry Pi は Raspberry Pi 3 Model B です。
Raspberry Pi の設定には Mac を用います。

OSのダウンロード

https://www.raspberrypi.org/downloads/raspbian/ から Raspbian Stretch Lite を ダウンロードします。

Mac の Terminal から、ダウンロードしたOSイメージをSDカードに書き込みます。
当方の環境ではSDカードスロットは disk4 でした。(ディスクの番号を間違えて dd するとMacのディスクが壊れます)

$ sudo diskutil list
$ sudo diskutil unmount /dev/disk4s1
$ sudo dd bs=16m if=2017-04-10-raspbian-jessie-lite.img of=/dev/rdisk4

書き込みが終わるとSDカードのパーテーションがマウントされるので、追加の設定をします。
Raspberry Pi の宅内ネットワークへの接続は無線を使用します。有線を使用する場合は wpa_supplicant.conf の作成は不要です。

$ touch /Volumes/boot/ssh
$ nano /Volumes/boot/wpa_supplicant.conf

wpa_supplicant.conf の内容はこんな感じです。

wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="アクセスポイントのSSID"
    psk="アクセスポイントのパスワード"
}

Raspberry Piにログイン

Mac からSDカードを取り出して Raspberry Pi にセットし、電源を入れます。
少し待ってから、Mac の Terminal からリモートログインします。

$ ssh-keygen -R raspberrypi.local
$ ssh pi@raspberrypi.local

以降はリモートログインしている Raspberry Pi 上での操作です。

既存パッケージの更新

既定の mirrordirector.raspbian.org に繋がりにくいので近隣のミラーサイトに変更します。

$ sudo nano /etc/apt/sources.list

sources.list の内容はこんな感じです。

sources.list
deb http://ftp.jaist.ac.jp/raspbian stretch main contrib non-free rpi
#deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspbian.org/raspbian/ stretch main contrib non-free rpi

パッケージを更新します。

$ sudo apt-get update
$ sudo apt-get upgrade

スワップを無効、ログディレクトリをRAMディスクへ

スワップを無効にします。

$ sudo swapoff --all
$ sudo apt-get remove dphys-swapfile

ログディレクトリをRAMディスクにします。

$ sudo nano /etc/fstab

fstab の最後の3行はこんな感じです。

fstab
tmpfs   /tmp        tmpfs   defaults,size=64m,noatime,mode=1777 0   0
tmpfs   /var/tmp    tmpfs   defaults,size=32m,noatime,mode=1777 0   0
tmpfs   /var/log    tmpfs   defaults,size=32m,noatime,mode=0755 0   0

シスログに出力する項目を絞ります。

$ sudo nano /etc/rsyslog.conf

rsyslog.conf の最後の40行はこんな感じです。

rsyslog.conf
###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*         /var/log/auth.log
*.*;auth,authpriv.none      -/var/log/syslog
#cron.*             /var/log/cron.log
#daemon.*           -/var/log/daemon.log
#kern.*             -/var/log/kern.log
#lpr.*              -/var/log/lpr.log
#mail.*             -/var/log/mail.log
#user.*             -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info          -/var/log/mail.info
#mail.warn          -/var/log/mail.warn
#mail.err           /var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#   auth,authpriv.none;\
#   news.none;mail.none -/var/log/debug
#*.=info;*.=notice;*.=warn;\
#   auth,authpriv.none;\
#   cron,daemon.none;\
#   mail,news.none      -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg             :omusrmsg:*

起動時にRAMディスク上に既定のログファイルが用意されるようにします。

$ sudo nano /etc/init.d/make-varlog-files

make-varlog-files の内容はこんな感じです。

make-varlog-files
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          make-varlog-files
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Required-Start:
# Required-Stop:
# Short-Description: Create /var/log/... files on tmpfs at startup
# Description:       Create /var/log/... files needed by system daemon
### END INIT INFO

#
# main()
#
case "${1:-''}" in
  'start')

    mkdir -p /var/log/ConsoleKit
    mkdir -p /var/log/samba
    mkdir -p /var/log/fsck
    mkdir -p /var/log/apt
    mkdir -p /var/log/ntpstats
    chown root.ntp /var/log/ntpstats
    chown root.adm /var/log/samba
    touch /var/log/lastlog
    touch /var/log/wtmp
    touch /var/log/btmp
    chown root.utmp /var/log/lastlog
    chown root.utmp /var/log/wtmp
    chown root.utmp /var/log/btmp

   ;;
  'stop')
   ;;
  'restart')
   ;;
  'reload'|'force-reload')
   ;;
  'status')
   ;;
  *)
   echo "Usage: $SELF start"
   exit 1
   ;;
esac

exit 0
$ sudo chmod 755 /etc/init.d/make-varlog-files
$ sudo update-rc.d make-varlog-files defaults 01 10

その他、お好みの設定で仕上げます。

$ sudo raspi-config

一度、再起動します。

$ sudo reboot

TI SensorTag の準備

TI SensorTag (CC2650STK) はここなどから入手できます。

SensorTag に装着されているボタン電池は (CR2032) 、念のため、新しいものに入れ替えておきます。(電池が弱っているとセンサーの値を取得しても0だったり、スマートフォンアプリの Sensor View が正しく表示されなかったりします)

SensorTag 用のスマートフォンアプリ(iOSAndroid)を使って、ファームウェアを最新にしておきます。(ファームウェアのバージョンが古いとバッテリーレベルの取得に失敗してプログラムが終了したりします)

Ambient の準備

https://ambidata.io/ でアカウントを作成し、Myチャネルで SensorTag の値を受け取るチャネルを作ります。
作成したチャネルの チャネルIDライトキー は後で使うので控えておきます。

作成したチャネルの設定を開いて、データー名を設定しておくと、チャートを追加するときにわかりやすいです。

  • データー1 … 温度
  • データー2 … 湿度
  • データー3 … 気圧
  • データー4 … バッテリー
  • データー5 … 照度

そして、チャートをお好みの設定で追加します。

Raspberry Pi にプログラムをインストール

依存するツールをインストール

$ sudo apt-get install python3-pip
$ sudo pip3 install bluepy
$ sudo apt-get install redis-server
$ sudo pip3 install redis
$ sudo nano /etc/init.d/make-varlog-files

make-varlog-files はファイルの中の chown root.utmp /var/log/btmp の行の直後に、以下を追加します。

make-varlog-files
    mkdir -p /var/log/redis
    chown redis.redis /var/log/redis
    touch /var/log/redis/redis-server.log
    chown redis.redis /var/log/redis/redis-server.log
$ sudo apt-get install git
$ sudo pip3 install git+https://github.com/TakehikoShimojima/ambient-python-lib.git

プログラムのインストール

$ git clone https://github.com/TakehikoShimojima/sensortag-ambient.git
$ chmod +x sensortag-ambient/cgi-bin/*.py
$ sudo mkdir -p /var/www/html
$ cd /var/www/html
$ sudo cp -r ~pi/sensortag-ambient/* .

プログラムの動作確認

$ cd /var/www/html
$ sudo python3 st2ambient2.py -i 10 -v -d
^C

Raspberry Pi と SmartTag が接続されてセンサーの値の取得が始まると、点滅していた SmartTag の LED が消灯します。
プログラムを止めるときは CTRL+C です。

プログラムの設定

Webブラウザで http://raspberrypi.local/ に接続します。

インストールしたプログラムとツールおよび SensorTag がそれぞれ正しく動作していれば、 SensorTag リストにその SensorTag のアドレスと信号強度 (rssi) が表示されます。

控えておいた チャネルIDライトキー を入力して 設定 ボタンを押します。

プログラムの自動起動

Raspberry Pi を起動したときにプログラムが自動的に実行されるようにします。

$ sudo nano /etc/rc.local

rc.local の最後の4行はこんな感じです。

rc.local
(cd /var/www/html; python3 st2ambient2.py) &

exit 0

再起動します。

$ sudo reboot

完成

5分に1回の間隔で SmartTag のセンサーの値が Ambient に送られます。
Ambient でセンサーの値はグラフ化され、ブラウザで閲覧することができます。
継続的に使うのであれば、 SmartTag のボタン電池を時々交換してあげる必要があります。

お疲れさまでした。


以上です。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.