先ずは、参考にした情報はこちら。
- http://blog.nambo.jp/2013/07/23/raspberrypi-mac-osx/
- https://qiita.com/mascii/items/0d1a280ac58ed8f6f999
- https://curecode.jp/tech/raspberrypi-ramdisk/
- https://qiita.com/AmbientData/items/d20d0ff0938ed7fbfd47
先人の苦労に感謝しつつ、以上を踏まえてまっさらな状態からグラフを見れるところまでの構築をまとめてみました。
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 の内容はこんな感じです。
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 の内容はこんな感じです。
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行はこんな感じです。
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行はこんな感じです。
###############
#### 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 の内容はこんな感じです。
# !/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 用のスマートフォンアプリ(iOSとAndroid)を使って、ファームウェアを最新にしておきます。(ファームウェアのバージョンが古いとバッテリーレベルの取得に失敗してプログラムが終了したりします)
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 の行の直後に、以下を追加します。
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行はこんな感じです。
(cd /var/www/html; python3 st2ambient2.py) &
exit 0
再起動します。
$ sudo reboot
完成
5分に1回の間隔で SmartTag のセンサーの値が Ambient に送られます。
Ambient でセンサーの値はグラフ化され、ブラウザで閲覧することができます。
継続的に使うのであれば、 SmartTag のボタン電池を時々交換してあげる必要があります。
お疲れさまでした。
以上です。