0
0
テーマ、知りたいこと
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.2 16 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 bytes 3 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に送ることができるのでしょうか。
回答1件
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。