misoのアイコン画像
miso 2024年02月11日作成 (2024年02月11日更新) © MIT
製作品 製作品 閲覧数 372
miso 2024年02月11日作成 (2024年02月11日更新) © MIT 製作品 製作品 閲覧数 372

面倒だけどLoRaフィールドテストの準備

面倒だけどLoRaフィールドテストの準備

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のアイコン画像
寝るのが趣味
ログインしてコメントを投稿する