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ファイル読み込み (複数指定可)

1件の返信
[…] 次回投稿では、実際にデータを記録するためにRaspberry Pi側及びホスト側で動かすプログラムの説明を行っていきます […]