Raspberry Pi Zero計測データのUDP配信
前回作成したRaspberry Pi Zeroでの温度計を用いて、ネットワーク上で複数デバイスの計測データを集約します
システム概要
- 各Raspberry Pi温度計で、一定時間毎に温度を計測
- 計測したデータはUDPで受信ホストに送信
- DS18B20のUIDにより各センサを識別
- データはProtocol Bufferを用いてシリアライズ・デシリアライズ
- 一つのRaspberry Piへの複数センサ接続や、複数Raspberry Piデバイスからの受信もサポート
- 記録データはCSV形式で出力
- 保存データのプロット及びリアルタイムデータのプロット
関連ページ
スクリプトのダウンロード
GitHubのプロジェクトページからスクリプトをホスト側、Raspberry Pi側両方にダウンロードします
% git clone https://github.com/udon-code/thermometer.git
または
% wget https://github.com/udon-code/thermometer/archive/master.zip
% unzip master.zip
Raspberry Pi側スクリプトの実行
認識デバイスの確認
ダウンロードしたフォルダにあるscripts/ds18b20_logger.py
がRaspberry Pi側で実行するスクリプトです
まずは-l
オプションで実行し、デバイスが認識できていることを確認します。下記の例ではRaspberry Piに2つのセンサが接続されているため、2つのIDが検出されています
% ./scripts/ds18b20_logger.py -l
Found 2 DS18B20 devices
['28-0301a279beef', '28-0301deadcf6b']
デバイスの検出に失敗する場合は、/sys/bus/w1/devices/
にデバイスが存在することを確認します
ローカルにCSVファイルとしてデータを保存する場合
Raspberry Pi側にデータを保存する場合は、-o
オプションで保存するファイルを指定します(フォルダを指定した場合は、日付名でファイルが自動生成されます)。また-i
で計測間隔を、-t
で計測時間を指定します。-t -1
はプログラムが強制終了されるまで計測を継続します
% ./scripts/ds18b20_logger.py \
-o therm_result.csv \ # 出力ファイル名
-i 10 \ # 計測インターバル
-t -1 # 無限に計測
UDPでデータを送信する
計測データをUDPで送信する場合は-u
オプションをつけて実行します。デフォルトのあて先は<broadcast>
となっており、同一サブネット内にブロードキャストされます。--udp_ip
オプションおよび--udp_port
オプションで宛先IPおよび、ポート番号を指定することが可能です
% ./scripts/ds18b20_logger.py \
--udpd \ # UDPに送信。デフォルトはブロードキャスト
-i 30 \ # 計測インターバル
-t -1 # 無限に計測
自動起動するようサービスに登録する
ブート時に自動で起動するようにサービスとして登録します。ExecStart
のオプションとWorkingDirectory
は環境に応じて設定します
% sudo vi /etc/systemd/system/thermometer_logger.service
[Unit]
Description=My service
After=network.target dbus-fi.w1.wpa_supplicant1.service
[Service]
ExecStart=/usr/bin/python3 -u ./scripts/ds18b20_logger.py -i 60 -t -1 -o log
WorkingDirectory=/home/pi/work/thermometer
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
テスト
% sudo systemctl start thermometer_logger # logフォルダにファイルが生成されていることを確認
サービスに登録
% sudo systemctl enable thermometer_logger
ホスト側スクリプトの実行
UDPで受信したデータをCSVに保存
% ./scripts/ds18b20_client.py \
--csv therm_result.csv \ # 出力ファイル名
-p # リアルタイムにプロット
保存したCSVデータのプロット
-i
オプションで保存したCSVをプロットすることが可能です
% ./scripts/ds18b20_client.py \
-i therm_result.csv # CSVファイル読み込み (複数指定可)
最近のコメント