IoT

ラズパイDockerのJupyter NotebookでSensorTagのグラフ表示

ラズパイ3のDockerでJupyter Notebookサーバを起動して、SensorTagのデータをグラフに表示してみました。

Jupyter Notebook Server for Rasberry Pi

https://hub.docker.com/r/maxjiang/rpi-jupyter/

このラズパイ用のJupyter Notebookコンテナイメージを使います。

--net host をつけて起動します。
グラフ表示に matplotlib も使いたかったのでdatascienceタグを使っています。

1
$ docker run --net host -dp 8888:8888 --name myjupyter maxjiang/rpi-jupyter:datascience

コンテナシェルを起動

1
$ docker exec -it myjupyter /bin/bash

bluepyをインストール

1
2
3
# apt-get update
# apt-get install libglib2.0-dev
# pip3 install bluepy

Jupyter Notebookにログインするためのトークンを確認

1
2
3
# jupyter notebook list
Currently running servers:
http://localhost:8888/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx :: /root/notebooks

表示されるURLはlocalhostとなってるので、この部分を以下のようにraspberrypi.local(またはIPアドレス)に読み替えてブラウザアクセスします。
http://raspberrypi.local:8888/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Jupyter Notebookのdashboardが表示されたら Python 3 の Notebook を使います。

Jupyter Notebookの使い方の説明は割愛します。

SensorTagの値をRead

python code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import bluepy
import time
tag = bluepy.sensortag.SensorTag('XX:XX:XX:XX:XX:XX')
tag.IRtemperature.enable()
tag.humidity.enable()
tag.barometer.enable()
tag.accelerometer.enable()
tag.magnetometer.enable()
tag.gyroscope.enable()
tag.lightmeter.enable()
tag.battery.enable()
time.sleep(1.0)
print('Temp: ', tag.IRtemperature.read())
print("Humidity: ", tag.humidity.read())
print("Barometer: ", tag.barometer.read())
print("Accelerometer: ", tag.accelerometer.read())
print("Magnetometer: ", tag.magnetometer.read())
print("Gyroscope: ", tag.gyroscope.read())
print("Light: ", tag.lightmeter.read())
print("Battery: ", tag.battery.read())
tag.disconnect()
del tag

結果が表示されるまで少し待ちます。

Jupyter Notebookからでも問題なくSensorTagの値をRead出来ました。

1
2
3
4
5
6
7
8
Temp: (35.71875, 21.65625)
Humidity: (35.84320068359375, 61.181640625)
Barometer: (36.7, 1012.02)
Accelerometer: (0.26416015625, 0.2158203125, 0.846435546875)
Magnetometer: (24.589987789987788, 83.06617826617827, 31.187301587301587)
Gyroscope: (-0.69427490234375, -0.2899169921875, 1.21307373046875)
Light: 149.88
Battery: 100

グラフ表示

Accelerometerの値を10回Readしてグラフにしてみます。

python code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import matplotlib.pyplot as plt
%matplotlib inline
import time
import datetime as dt
import bluepy
tag = bluepy.sensortag.SensorTag('XX:XX:XX:XX:XX:XX')
tag.accelerometer.enable()
time.sleep(2.0)
t = []
x = []
y = []
z = []
for var in range(0,10):
acc = tag.accelerometer.read()
x.append(acc[0])
y.append(acc[1])
z.append(acc[2])
t.append(dt.datetime.now())
time.sleep(0.5)
plt.plot(t, x, label='x')
plt.plot(t, y, label='y')
plt.plot(t, z, label='z')
plt.legend()
tag.disconnect()
del tag

グラフに表示できました。