6

pySerial を使用してシリアル ポート経由で Arduino にデータを送信する非常に単純な python スクリプトがあります。これを 1 行ずつ Python シェルで実行すると問題なく動作しますが、「.py」ファイルに入れて実行しようとしても何も起こりません。私のUARTのシリアルライトは点滅しますが。だから何かが通っていますが、それはゴミです(チェックしました)。

これが簡単なコードです。

import serial

ser = serial.Serial('COM3',9600,timeout=.2)
ser.write('A')
ser.close()

すでにスリープを追加しようとしましたが、何も修正されていないようです。何か案は?

4

6 に答える 6

7

わかりました、私はそれを理解しました!

書き込みを実行する前に、次のようなコードを使用する必要があります。

time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)

そうしないと、何らかの理由でシリアル接続を受信すると、arduino が自動的にリセットされます。わーい!

于 2010-02-22T00:14:32.917 に答える
1

Windows 64 ビットを使用している場合、pyserial が機能しないことに気付きました。私はPython 2.7を使用しており、管理者アカウントを介してx86バージョンをインストールし、上記のコードを使用した後

time.sleep(1)

ser.setDTR(level=0)

time.sleep(1)

書き込みの前に追加し、後でポートを閉じることを思い出して、CLIだけでなくスクリプトとして機能させることができました. また、python GUI またはコマンド ラインを管理者として実行していることを確認してください。これはまた、私に成功の違いをもたらしました。また、コードを実行する前に、Arduino のシリアル モニターが閉じていることを確認してください。

于 2010-11-14T03:27:19.473 に答える
0

ばかげているかもしれませんが、Windows を使用している場合は、cmd.exe に「myscript.py」のみを入力してみてください。Windows では、スクリプト名の前に「python」と入力する必要がないことに気付きました。もちろん、これは Windows での標準の CPython インストール用です。

于 2010-02-20T08:56:04.483 に答える
0

シリアルポートを閉じた後、今度はもう一度スリープすることをお勧めします。

import serial

ser = serial.Serial('COM3',9600,timeout=.2)

ser.write('A')

ser.close()

time.sleep(3000) 

//for a first test, give a whopping 3 seconds

//sleep(100), 100 ms (0.1 second) may be enough in final product

その理論的根拠は、コンピューターが非常に高速になっているため (4.77 MHz で最初の x86 のパフォーマンスの 100 万倍を超え、おそらく元のコンピューターに搭載されたスペース シャトルよりも 10 万倍高速)、Python を起動して実行する時間がある可能性があるためです。何百万もの命令...コンソールを閉じてください.1バイトがシリアルポートに送信される前に.

于 2013-02-02T09:55:53.937 に答える