質問するログイン新規登録
シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

意見交換

クローズ

1回答

711閲覧

NanoVNAによるシリアル通信

kai_ren

総合スコア0

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/09/18 07:35

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に送ることができるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答1

#1

thkana

総合スコア7739

投稿2023/09/18 09:57

これが意見交換? とは思いますが。

とりあえず、"COM1"が割り当てられるというのはちょっと普通でない気がします。
歴史的なところで、COM1とCOM2はマザーボード上にハードウェアがあったので、追加されたCOMポートは3以降になる、というのが「慣習」となっています。本当にCOM1で正しいのでしょうか。

で。

プログラムが間違っているのか。
NanoVNA側の操作が必要なのか。
もっと良い方法があるのか。
なにがなんだかわからないときは、不定な要素をできるだけ減らすために、Teratermなどでシリアルを直接見てみる、というのが常套手段かと思います。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問