問題タブ [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でシリアルポートを開く方法は?
Pythonでシリアルポートを開こうとしています。これはUbuntuにあります。openinterface.pyをインポートして、これに入力します
「-:'str'および'int'のサポートされていないオペランドタイプ」というエラーが表示されます。同じ呼び出しを二重引用符ではなく一重引用符で試し、引用符をまったく使用しませんでした。
どうすればこれを修正できますか?または、使用する代替機能はありますか?私はPythonの基本しか知らないので、おそらく私が気付いていない小さな構文のことですか?助けていただければ幸いです、ありがとう。
python - pySerialはPythonインタープリターでは正常に機能しますが、スタンドアロンでは機能しません
おはようございます!最近、部屋の「ライトコントロール」のようなものを作るためにArduinoボードを購入しました。これが私が書いたファームウェアのコードです:
その後、PythonインタープリターのpySerialを使用してピンを制御しましたが、すべて正常に機能していました。インタプリタの出力は次のとおりです。
次に、同じことを行うための簡単なPythonスクリプトを作成することにしました。
しかし、それはまったく機能しません!Arduinoは、スクリプトを起動したときに何かが受信されたことを示していますが、何も起こりません。スクリプトのstrace出力の一部を次に示します。
すべてがうまくいくはずなので、何が問題なのかわかりません。よろしくお願いします。よろしくお願いします。
PS PDBでプログラムを実行すると、すべて正常に動作します。特異なバグ。
更新:コントローラーに受信したデータを返送させましたが、スクリプトの実行中は何も受信していないように見えますが、インタープリターからデータを送信するとすべてを受信します。ファームウェアのコードは次のようになります。
python - pyserial でボットセンサーをストリーミングするには?
iRobot Create のセンサーを pyserial でストリーミングしようとしています。openinterface.py をインポートし、CreateBot 関数を使用してボット変数を設定し、呼び出します。
bot.stream_sensors(6)
次に、このエラーが表示されます-「ストリーミングスレッドエラー! タプルインデックスが範囲外です」 6 で関数を呼び出す唯一の理由は、私が見ている例が使用されているためです。また、stream_sensors(0)、stream_sensors(1) を 6 まで試しました。6 未満の数を使用すると、同じエラーと「不正なセンサー ID!」が表示されます。パラメータは何に基づいていますか? それは私がストリーミングしたい特定のセンサーですか (そうであれば、どうすれば番号を取得できますか)? どんな助けでも大歓迎です。
streaming - iRobotCreateがセンサーデータを返さない
iRobotCreateからセンサーデータをストリーミングしようとしています。bot.stream_sensors(somenumber)とbot.poll_sensors(somenumbers)を試すと、タプルが範囲外のエラーになります。bot.sensorsを入力するたびに、空の配列{}を取得します。バンプセンサーを押し込みながらbot.sensorsを送信しようとしましたが、まだ空の配列を取得しています。シリアルポートを介してボットに接続し、シリアルからUSBへのコンバーターを使用しています。センサーデータを取得する前の唯一のコードは、import openinterface bot = openinterface.CreateBot(com_port = "/ dev / ttyUSB0"、mode = "full")です。
誰かがこの問題を解決する方法のアイデアを持っていますか?他の場所ではstream_sensors(6)を使用するだけで、正常に機能しているようです。
PS私は少し前にこのトピックに似た質問を投稿しましたが、誰も応答しませんでした。スパムを送信しようとはしていませんが、より明確な質問と明らかな問題が何であるかがわかったので、もう一度試してみようと思いました。
python - ArduinoとpySerialの問題
問題が発生しました。最近、ArduinoUnoボードを購入しました。コンピューターからの入力を制御するような面白いものを作ろうとしました。pySerialでPythonを使用しましたが、プログラムは次のとおりです。
書き込み値は、USBを介して値をボードに送信する必要があります。ボードにロードされているプログラムは次のとおりです。
LEDが正常に機能しています。Arduinoが提供するFadeの例を試してみましたが、機能しています。
プログラムが正しくデータを送信しているかどうかを確認しました。はい、そうです。以前に送信したものと同じものが返されます。
送信および設定された値を取得する必要がありますanalaogWriter(pin, VALUE)
が、何かが間違っているか、機能していません。
この問題を解決するにはどうすればよいですか?
解決
Arduinoコード
Pythonスクリプトコード:
みなさん、ありがとうございました!! :)
python - Python: PySerial でステータス ビットとタイムスタンプを送信する最良の方法は何ですか?
私はかなりの検索と読書をしましたが、正確な明確な答えは見つかりませんでした。シリアルポートを介して別のアプリケーションと通信するpythonアプリケーションを作成しています。これを達成するために PySerial を使用しています。送信したいパケットの種類は、ステータス情報とデータ読み取りです。私は次のようにパケットを形成することを提案しています:
そこには長さがあるので、最後のバイトは必要ないと思いますが。私は正しいですか?
ステータス情報のパケットの「メッセージ」部分を次のように整形することを考えています。
ここでのメッセージ ID は、これがデータ パケットではなくステータス パケットであることを区別するためのものです。ステータス情報自体は 16 ビットで構成され、送信側アプリケーションの多数のサブシステムの状態を表します。これらのサブシステムの一部では、1 ビットで十分な情報が得られます (サブシステムがオフ/低/偽であることを示すには「0」、オン/高/真であることを示すには「1」)。他のものは 2 または 3 ビット (状態などを表す) を必要とします。システムのプロトタイプを作成して、ビットを連結して何かを形成し、'1001110101101100'
これをシリアル ポートから送信する文字列を作成しました。チェックサムはステータス ビットのモジュロ 256 です。
私はPythonとシリアル通信にかなり慣れていませんが、これはおそらく帯域幅の無駄であることを知っています. PySerial が文字列を送信する必要があることは知っていますが、このように各ビットを「0」または「1」として表すと、各ビットに完全な文字列表現が使用されます。帯域幅を減らすためにこれらのビットを送信する最良の方法は何だろうと思っていましたか?
たとえば、次のように、各 8 ビットを取得して 16 進数に変換し、連結された 16 進数のバイトを送信します。
として表される
またはASCIIとして送信する必要がありますか?Struct モジュールについての言及も見ました。代わりにそのルートをたどるべきですか?
私が疑問に思っているもう 1 つのことは、メッセージのタイムスタンプ部分を表す方法です。
あなたが私に与えることができるどんな助け、提案も大歓迎です。
どうもありがとう :)
python - PySerial モジュールの「bytesize」
PySerial を使用してシリアル ポート経由でメッセージを送信したい。シリアル コンストラクターのパラメーターの 1 つに「bytesize」があります。serial.SEVENBITS と serial.EIGHTBITS を試してみましたが、違いに気づきませんでした。ドキュメントは少し曖昧で、私は Python とシリアル通信の両方に不慣れです。これは、バイトが保持できる最大値を設定するだけですか、それとも符号付きバイトと関係がありますか? なぜ8ビットよりも7ビットを使用するのか、誰かが明確にすることができますか? 私は検索してきましたが、答えが見つかりませんでした。
ありがとうございました
python - PySerial - STX を送信できません
わかりましたので、私はpySerialの完全な初心者です。ラボ機器と通信しようとしていますが、STX (テキストの開始) コマンドを送信するだけで問題が発生しています。これまでのところ、私の基本的なコードは次のようになります。
しかし、スコープで 232 データを見ると、送信しようとしている STX は、Hperterminal で送信された STX コマンドのようには見えません。
何か案は?これは信じられないほど簡単なことだと確信しており、些細なことを見落としているだけです。
ありがとう!
serial-port - Arduino Uno への pySerial 書き込みがバッファリングされる
pySerial を使用して Arduino Uno ボードのシリアル ポートに短いメッセージを書き込む Python スクリプトがあります。ループがあり、いくつかの条件によっては、次のようにループ内で複数の書き込みが発生する可能性があります。
しかし、Arduino ボードがこれを受信すると、最初のメッセージを INIT として受信しますが、2 番目のメッセージは INITSTOP または INITCHECK として読み取られ、3 番目のメッセージは前のメッセージに連結されます。私のarduinoプログラムは、この方法で特定のメッセージをチェックします:
誰でもこれについて私を案内できますか? ところで、IDE で利用可能なシリアル モニタでテストすると、Arduino は完全に動作するので、問題は Arduino にあるとは思いません。
すべての書き込みの前に最大 10 秒のスリープを追加しようとしましたが、うまくいきませんでした。
python - さらに使用するためにser.readlinesを使用してシリアル出力を値に適切に割り当てる方法は?
私は初心者で、シリアル USB ポートを介してエネルギー メーターへの通信 ("/?!") を開始し、着信エネルギー ログを読み取るスクリプトを作成しました。出力からさまざまな値を抽出し、それらをローカルの sqlite-db に書き込みます。15分ごとにcronジョブとして実行されると想定されています。PHP Web サイトは、sqlite に保存されたエネルギー測定値をグラフとして視覚化します。
現時点ではメーターにアクセスできません。そこは非常に人里離れていて寒いので、そこに行く直前にメーターを入手する必要があります。
スクリプトを実行しようとすると、Error: ser.readlines(eol='!') = z
SyntaxError: can't assign to function call が発生します
シリアル出力の ser.readlines での読み取りと値 z への割り当てが間違っていますか?
同様の値を含むログファイルを開くと、スクリプト(正規表現とDBへの挿入)が機能します。 with open ("log") as z:..