問題タブ [pyserial]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Pyserial の永続的な構成
Linuxマシンから組み込みデバイスにファイルサイズを送信するためのこのコードがあります:
問題は、このコードを実行すると (常にここで終了します)、プログラマー (同じシリアル ポート経由でデバイスにファームウェアをロードする) がbad file descriptor
エラーで終了することです。デバイスを再接続しても (内部エネルギー源がありません)、コンピューターを再起動する必要があります。Python コードの何が問題になっていますか? デバイス (FT2232) を再接続しても、悪い設定が残る可能性があるのはなぜですか?
cutecom でポートを開くとデバイスのプログラミングが可能になりますが、再度閉じるとエラーが再発します。
UPDATE 1:使用strace
して、最初の違いはロックにあることがわかりました:
失敗したとき。2 つ目の違い (およびエラー全体) はローダーのバグかもしれないので、ツールチェーン フォーラムに書きました(彼らはread()
0 を返すことをエラーと見なし、 を呼び出しますが、エラーperror()
はなかったので、以前から errno に EBAFD が格納されています)。 . しかし、私はロックについて興味があります。cutecom または python スクリプト (strace を使用) で参照を見つけることができませんでしたが、ロックは何らかの影響を受けています。この質問を Unix & Linux サイトに移行することはできますか?
更新 2: 前に述べたように、問題はread()
シリアル ポートで 0 が返されることです。これに注目すると、非ブロック モードで read() がブロックまたは EAGAIN を返す必要があることがわかりました。どのような状況で read() 呼び出しが 0 を返すことがありますか?
更新 3: 呼び出しでデバイスを待機することで、ローダーの問題を「解決」しましたselect()
。ポート内の何かを変更する PySerial にはまだ問題があります。
python - Windows XPでpyserialモジュールを使用してシリアルポート(COM3)からデータを読み取る
問題に入る前に、いくつかのハードウェア/ソフトウェア情報を次に示します。
アクセスするデバイス: Ohaus Scout Pro Digital Weight Machine (製品リンク) 使用するインターフェイス: USB (製品リンク) シリアル ポート: COM3 OS: WinXP Python バージョン: Activestate Python 2.7 pyserial バージョン: 2.5
Python はこのシリアル ポートを認識し、問題なく開くことができました。私はPythonだけでなくpyserialも初めてです。シリアルポートからデータを正確に読み取る方法がわかりませんでした。次のコードを使用しました。
これは何も出力しません。その 3 秒のタイムアウトの間に、計量機に物を置いたところ、計量機に 100 グラムが表示されました。しかし、このデータはコンピューターに表示されません。pyserial を使用してこのデータを読み取るにはどうすればよいですか?
python - PythonでPySerialの「__del__」メソッドをオーバーライドするにはどうすればよいですか?
COM3上のデバイスにキャラクターを送信するように設定された単純なPythonスクリプトがあります。(これはWindows XPで実行されています)デバイスは文字を正常に受信しますが、スクリプトが終了すると、または
シリアルポートのDTRラインをHighに設定し、デバイスをリセットします。
これに戸惑い、PySerialのドキュメント(http://pyserial.sourceforge.net/)をざっと見てみると、モジュールには、Serialインスタンスが削除されたときに関数__del__
を呼び出すメソッドがあることがわかりました。ser.close()
このメソッドをオーバーライドする方法はあり__del__
ますか?
(デバイスのリセットラインをDTRラインから切断する必要はありません)
以下は私が使用している基本的なコードです:
python - Python/Win7でシリアルを使用する
シリアルWWANモデムとのインターフェースを試みています(診断/信号強度測定の目的で)。これは、デスクトップ上のオンボードCOM1(115200-8-n-1)を介して行われ、接続はPuTTYを介して機能します。Pythonを使用してATコマンドのスクリプトを作成できますが、シリアルポートを開くのに苦労しています。
指示に従ってPython2.7.1とPySerialをインストールしました。私は自分のマシンのローカル管理者であり、管理者権限の有無にかかわらずPythonを実行しましたが、ポートを開こうとすると次のようになります。
8-N-1がデフォルトであり、手動で設定しようとしても同じ例外がスローされることを理解しています。
誰かアドバイスはありますか?前もって感謝します。
python - Pythonシリアル通信
私はArduinoプロジェクトに取り組んでいますが、メモリの制限のため、Pythonスクリプトとのインターフェースを取っています。Python側では、座標のそれぞれのx、y値を含む2次元の行列があり、このリストには26000の座標ペアがあります。したがって、すべての人のデータ構造を明確にするために、、pathlist[0][0]
は私のリストの最初の座標のX値を返します。このリストでPythonでさまざまな操作などを実行しても、問題はありません。しかし、私が問題にぶつかっているのは、これらの値をシリアル経由でArduinoに送信することです。これは便利な方法です。
シリアル通信の性質上(少なくともこれが当てはまると思います)、各整数を文字列として、一度に1桁だけ送信する必要があります。したがって、345のような数字は、3つの個別の文字として送信されます。もちろん、3、4、5の順になります。
私が苦労しているのは、Arduinoでそれらの整数を再構築する方法を見つけることです。
値を送信するたびに、データを受信して次のように出力します。
Arduinoコードは次のとおりです。
そして、Pythonコードは次のようになります。
問題はoutputメソッド()に起因するものではないとほぼ確信していSerial.print
ます。別のintを宣言すると、出力で正常にフォーマットされるため、問題はintdata
変数の構成方法にあると考えられます。
この問題の診断に役立つ可能性のある注意点の1つは、結果を変更Serial.print(intdata)
すると、30(25 + 5)になると予想されることです。この7は、入力に関係なく存在します。たとえば、シリアルに271を書き込むと、結果は次のようになります。Serial.print(intdata+5)
2ÿÿ57
Arduinoは値を2つのペアにチャンクし、最後に長さを追加しているように見えます。なぜそうなるのか理解できません。
またÿ
、forループにが追加されているように見えます。その時点では何も送信されていないため、追加されていることを意味します。しかし、さらに別のif(Serial.available()>0)
条件を追加してそれを修正しても、結果は整数のようには扱われません。
また、ここではピクルスを使用するのが適切でしょうか?私は何が間違っているのですか?
python - ArduinoからPythonに値を送信し、その値を使用する方法
私は、Pythonを使用してリモート制御され、単純なGUIを介してインターネット経由で制御メッセージを送信するロボットを構築中です。
私は自分のコードの一部、GUIと制御システムをかなりうまく機能させましたが、行き詰まっています。視差pingセンサーを使用してArduinoMegaからオブジェクト情報までの距離を取得し、その値をPython制御スクリプトに送信してリモートGUIに表示しようとしています。
私が抱えている主な問題は、すでに確立されているCOMポートを使用するPythonコードをArduinoと統合し、メッセージを送信してArduinoにpingセンサーをポーリングし、値を受け取るPythonプログラムに送信する方法です。次に、その値をGUIに挿入します。
私はすでにArduinoを制御するためのこのコードを持っており、それは私のシンプルなGUIで機能します。
私が本当にやりたいのは、上記のコードを改善し、クリックするボタンを追加して、Pythonにメッセージを送信してpingセンサーをチェックして値を返すように指示することです。私はArduinoコードに非常に精通していますが、この2週間でPythonを使い始めたばかりです。
pyserial - __init__でのPyserialエラー
Pythonを使用してシリアルポート接続を初期化するモジュールを作成しようとしています。
これをPythonで実行すると、selfに属性が開いていないことを示すAttributeErrorメッセージが表示されます。上記のコードの何が問題になっているのか誰かが知っていますか?どんな助けでも大歓迎です。
ありがとう
python - pyserialを介して複数の値を受け取り、PythonGUIで表示する
Pythonでシリアル通信を使用してデータを受信しようとしていますが、コードを改善する必要があります。
Arduinoから「&4,25 /n」の形式の「パケット」を送信しています。重要な要素は「4」と「25」の位置の値です。このパケットには、スタートバイトとして「&」があり、ターミネータとして改行フィード「/n」があります。これは、新しいパケットがいつ送信され、終了したかを知るためです。
このパケット「&4,24 / n」を受信して、「4,24」の場所にある値を抽出するにはどうすればよいですか?値が変化することにも注意する価値があるかもしれません、それらはArduinoから送信されたセンサー値に変化します。
これが私が今持っているコードで、startbyteなしで単一の値を受け取るために使用し、新しい改行を使用してパケットを終了します。
これは、リソースファイルとともに、VNCを介してロボットをリモートで制御するためのGUIを提供します。このコードは、ソナーから1つのping値を受け取り、それをGUIに報告して表示します。2つの異なるセンサーを表示するには、2つの異なるping値が必要です。
アップデート
<以下のコメント投稿者による回答>これが機能する正しいコードです。
素晴らしくて簡単な答えをありがとう!
python - PySerial Readline を文字列からバイナリに変換する
PIC マイクロコントローラからバイト文字列 0x0F、0x07、0x55、0x55、0x55 を送信しています。
Python のシリアル ポート経由で、PySerial で readlines() コマンドを使用しています。私は受け取ります:
これは確かに私が送信したバイト文字列に対応していますが、16 進数と ASCII 文字の奇妙な組み合わせのように見えるものを使用してフォーマットされています。これを 0x0F, 0x07, 0x55, 0x55, 0x55 にフォーマットする良い方法は何でしょうか?
python - pyserial 列挙ポート
既存のシリアル ポートのリストまたは列挙が必要です。今までこのメソッドenumerate_serial_ports()を使用していましたが、Windows 7 では機能しません。Windows 7 で使用可能なシリアル ポートを見つける方法を知っていますか?
私は IterationError を取得します