NanoVNAによるシリアル通信

テーマ、知りたいこと

Python

1import serial 2import csv 3import time 4import struct 5 6# 仮想COMポートを開く7ser = serial.Serial(port='COM1',baudrate=115200,timeout = 2) # 'COM1'は接続されたCOMポートに置き換える8 9# CSVファイルに書き込むヘッダ行10header = ['Frequency', 'S11_real', 'S11_imag', 'S21_real', 'S21_imag']11# CSVファイルのパス12csv_file_path = 'data.csv'13 14start_time = time.time() #現在時刻を取得15flag = 0.216 17try:18 # CSVファイルを作成し、ヘッダ行を書き込む19 with open(csv_file_path, mode='w', newline='') as csv_file:20 writer = csv.writer(csv_file)21 writer.writerow(header)22 23 while flag < 1.0:24 format_string = 'ffffffff'25 # データを受信する (適切なバイト数に置き換える)26 ser.read(ser.in_waiting)27 data = ser.read(32) # 20バイトのデータを受信する例28 29 print(len(data))30 # データの解析処理を実装 (NanoVNA-H4のデータフォーマットに依存)31 unpacked_data = struct.unpack(format_string, data)32 freq, s11_real, s11_imag, s21_real, s21_imag = unpacked_data 33 #freq = struct.unpack()34 #s11_real, s11_imag = struct.unpack()35 #s21_real, s21_imag = struct.unpack()36 37 data_row = [freq, s11_real, s11_imag, s21_real, s21_imag]38 # データをCSVファイルに追記する39 with open(csv_file_path, mode='a', newline='') as csv_file:40 writer = csv.writer(csv_file)41 # data_rowは解析したデータをリスト形式で置き換える42 writer.writerow(data_row)43 44 current_time = time.time() #現在時刻を更新45 flag = current_time - start_time 46 47 print("経過時間:",flag) 48 49 50except KeyboardInterrupt:51 # Ctrl+Cでプログラムを終了する場合の例外処理52 print("プログラムを終了します。")53 54finally:55 # COMポートを閉じる56 ser.close()57

背景、状況

現在, NanoVNAとPC間でシリアル通信を行うことを検討しています。シリアル通信を行い、csvファイルに変更しようとしています。
しかし以下のようなエラーコードが出てきます。

python

1例外が発生しました: error 2unpack requires a buffer of 32 bytes3 File "C:\Python\output.py", line 31, in <module>4 unpacked_data = struct.unpack(format_string, data)5 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^6struct.error: unpack requires a buffer of 32 bytes

それもそのはず、試しにいくつのバイトが送られてるかprint(len(data))で確認したところ、0となっているのでおそらくデータが届いていません。
プログラムが間違っているのか。
NanoVNA側の操作が必要なのか。
もっと良い方法があるのか。
どのようにしたらシリアル通信をすることができ、NanoVNAの情報をPCに送ることができるのでしょうか。

コメントを投稿

0 コメント