LoRaのフィールドテストの準備
初代RPiでE220-900T22S(JP)-EV1 LoRaモジュールを使ってみた| elchika の続き。
時短のため、文章やコード全ての部分でGPT-4を利用して作成しています。
リモートワークが日常となり、外出することが少ないなかで、技術的な深みを追求するため、フィールドテストに踏み出しました。不便さと向き合いながらも、知識と経験の拡張を目指して頑張りました
今回やりたいフィールドテスト
[受信側: ベランダに設置, 送信側: 人間がリュックに入れて持ち歩き]
+-------------------+
| LoRa |
| 受信機器 (Rpi) | -----> [接続] Serial Port /dev/ttyAMA0
| |
+-------------------+
||
|| (無線通信)
||
+-------------------+
| LoRa |
| 送信機器 (Rpi) | -----> [持ち歩き] ターゲットエリアを歩く
| |
+-------------------+
持ち運べるように100均で買ったケースに組み込み
何処からどう見ても不審物です。ありがとうございます
今回は2台分作成、1台はベランダに設置してもう1台はリュックに入れて持ち歩き。
Systemdを利用したLoRa送受信の自動化
効率的なLoRa通信のセットアップのため、Systemdを使って受信データの自動処理と送信スケジュールの自動化を図りました。
受信側の設定 (arm1rpi1/arm2rpi1)
受信スクリプト: receive_and_log_hexdump.py
LoRa受信データをhexdumpで表示し、ファイルに記録するため、/opt/codes/lora
ディレクトリにreceive_and_log_hexdump.py
を配置します。
import serial
import argparse
import hexdump
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("serial_port")
parser.add_argument("-b", "--baud", default="9600")
parser.add_argument("-m", "--model", default="E220-900JP")
parser.add_argument("--rssi", action="store_true")
args = parser.parse_args()
return args
def main():
args = get_args()
if args.model == "E220-900JP":
print(f"serial port: {args.serial_port}")
with serial.Serial(args.serial_port, args.baud, timeout=1) as ser:
payload = bytes()
while True:
data = ser.read(ser.in_waiting or 1)
if data:
payload += data
else:
if payload:
formatted_line = hexdump.hexdump(payload, result='return').replace('\n', ' ') + ',RSSI: {} dBm\n'.format(int(payload[-1]) - 256) if args.rssi else '\n'
with open('payload_hexdump.txt', 'a') as file:
file.write(formatted_line)
payload = bytes()
else:
print("INVALID")
if __name__ == "__main__":
main()
Systemd 受信サービスの作成: receive-and-log-hexdump.service
/etc/systemd/system/receive-and-log-hexdump.service
を作成し、スクリプトの自動起動を設定します。
[Unit]
Description=Receive and Log Hex Dump with RSSI over Serial
[Service]
ExecStart=/bin/bash -c '/usr/bin/python3 /opt/codes/lora/mode3.py; /usr/bin/python3 /opt/codes/lora/config_cui.py /dev/ttyAMA0 --apply; /usr/bin/python3 /opt/codes/lora/mode0.py; /usr/bin/python3 /opt/codes/lora/receive_and_log_hexdump.py /dev/ttyAMA0 --rssi'
WorkingDirectory=/opt/codes/lora
User=root
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
サービスを有効化し、起動します。
sudo systemctl daemon-reload
sudo systemctl enable receive-and-log-hexdump.service
sudo systemctl start receive-and-log-hexdump.service
送信側の自動化 (arm1rpi1/arm2rpi1)
Systemd 送信サービスの作成: send-lora-data.service
サービスファイル/etc/systemd/system/send-lora-data.service
を作成し、定期的なデータ送信の自動化を行います。
[Unit]
Description=Send LoRa data service
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo "$(date +%%I:%%M:%%S)" | /usr/bin/python3 /opt/codes/lora/send.py /dev/ttyAMA0 -f --target_address 0 --target_channel 0'
Systemdタイマーの作成: send-lora-data.timer
タイマーファイル/etc/systemd/system/send-lora-data.timer
を作成し、サービスが1分ごとに実行されるようにします。
[Unit]
Description=Runs send-lora-data service every minute
[Timer]
OnBootSec=1min
OnCalendar=*:0/1
Persistent=true
[Install]
WantedBy=timers.target
タイマーを有効化し、起動します。
sudo systemctl daemon-reload
sudo systemctl enable send-lora-data.timer
sudo systemctl start send-lora-data.timer
送受信の確認
これらの設定により、LoRaシステムの送受信プロセスの自動化が実現し、フィールドテストの効率とデータ収集の品質が向上しました。
次のような形式でpayload_hexdump.txt
に受信した内容が追記されていくので簡単に確認することが可能。
00000000: 30 33 3A 30 35 3A 31 39 0A D4 03:05:19..,RSSI: -44 dBm
00000000: 30 33 3A 30 36 3A 30 37 0A D7 03:06:07..,RSSI: -41 dBm
00000000: 30 33 3A 30 37 3A 31 30 0A D4 03:07:10..,RSSI: -44 dBm
00000000: 30 33 3A 30 38 3A 31 37 0A D7 03:08:17..,RSSI: -41 dBm
00000000: 30 33 3A 30 39 3A 32 37 0A DC 03:09:27..,RSSI: -36 dBm
00000000: 30 33 3A 31 30 3A 33 31 0A D1 03:10:31..,RSSI: -47 dBm
00000000: 30 33 3A 31 31 3A 31 31 0A D4 03:11:11..,RSSI: -44 dBm
00000000: 30 33 3A 31 32 3A 30 39 0A D9 03:12:09..,RSSI: -39 dBm
00000000: 30 33 3A 31 33 3A 30 32 0A DA 03:13:02..,RSSI: -38 dBm
00000000: 30 33 3A 31 34 3A 34 35 0A D9 03:14:45..,RSSI: -39 dBm
00000000: 30 33 3A 31 35 3A 31 36 0A D7 03:15:16..,RSSI: -41 dBm
Waiting for data... (interrupt to abort)
投稿者の人気記事
-
miso
さんが
2024/02/11
に
編集
をしました。
(メッセージ: 初版)
-
miso
さんが
2024/02/11
に
編集
をしました。
ログインしてコメントを投稿する