気圧と健康の気象病予報士@東京

OpenWeatherMapのデータと生成AIを用いて記事を作成しています

Python でボーレートの変更@GR-M10-RP

GR-M10-RP の話。ボーレートの変更の方法。Python スクリプトを使って。私の場合、初期値は、38400bps になっていました。

出荷時のボーレートは 9600bps または 38400bps (2024年6月以降出荷分) に設定されています。

prioris.jp

QZSS の災危通報をデコードするスクリプトを、ラズベリーパイで再起動しても自動で起動するように、system で管理をしていました。今回、ボーレートの数値を変更するにあたり、system を止める必要があります。

$ sudo systemctl stop <サービス名>

スクリプトを止めて、GR-M10-RP を使用していない状態にします。そして、下記の Python スクリプトを実行して、ボーレートを、115200bps に変更します。

from pyubx2 import UBXMessage, UBXReader
import serial
import time

def send_ubx_message(ser, msg):
    ser.write(msg.serialize())
    time.sleep(0.1)

def read_ubx_response(ubr):
    try:
        while True:
            response = ubr.read()
            if response:
                print(response)
                break
    except serial.SerialException as e:
        print(f"Error reading from serial port: {e}")
    except Exception as e:
        print(f"An error occurred: {e}")

# シリアルポートの設定
ser = serial.Serial('/dev/ttyS0', 38400, timeout=1)
ubr = UBXReader(ser, protfilter=2)  # UBXプロトコルのみをフィルタリング

# NMEAメッセージを無効化するためのUBXメッセージの作成
nmea_off = [
    UBXMessage.config_set(1, 0, [("CFG_MSGOUT_NMEA_ID_GGA_UART1", 0)]),
    UBXMessage.config_set(1, 0, [("CFG_MSGOUT_NMEA_ID_GLL_UART1", 0)]),
    UBXMessage.config_set(1, 0, [("CFG_MSGOUT_NMEA_ID_GSA_UART1", 0)]),
    UBXMessage.config_set(1, 0, [("CFG_MSGOUT_NMEA_ID_GSV_UART1", 0)]),
    UBXMessage.config_set(1, 0, [("CFG_MSGOUT_NMEA_ID_RMC_UART1", 0)]),
    UBXMessage.config_set(1, 0, [("CFG_MSGOUT_NMEA_ID_VTG_UART1", 0)])
]

# NMEAメッセージの無効化
for msg in nmea_off:
    send_ubx_message(ser, msg)

# UBX-CFG-VALSETメッセージの作成
layers = 1  # RAMレイヤー
transaction = 0  # トランザクションなし
cfgData = [("CFG_UART1_BAUDRATE", 115200)]

msg = UBXMessage.config_set(layers, transaction, cfgData)

# メッセージの送信
send_ubx_message(ser, msg)

# 応答の確認
read_ubx_response(ubr)

# シリアルポートを閉じる
ser.close()

# 新しいボーレートで再接続して確認
time.sleep(1)  # 少し待機してから再接続
ser = serial.Serial('/dev/ttyS0', 115200, timeout=1)
ubr = UBXReader(ser, protfilter=2)  # UBXプロトコルのみをフィルタリング

# 再度応答の確認
read_ubx_response(ubr)

# シリアルポートを閉じる
ser.close()

その後、デコードするスクリプトの引数を変更します。

/dev/ttyS0 38400
↓
/dev/ttyS0 115200

そして、system をスタートします。

$ sudo systemctl start <サービス名>

または、ラズベリーパイを再起動。

$ sudo reboot

きちんと、変更されたボーレートで、Python スクリプトが働いているかどうかは、次のコマンド、または出力されるログを見るなど。

$ ps aux | grep python

上のコマンドで、引数を確認できます。下のシェルで、アウトプットされるデータを確認することができます。

$ tail -f output.log # などの、出力されるデータ