0
私はいくつかのGPIOの値を読み取ろうとしています。ここでは、コードです:Pythonシリアル:ポートの読み込みに問題があります
import serial
import codecs
import time
ser = serial.Serial(port = 'COM4', baudrate = 9600, \
parity = serial.PARITY_NONE, \
stopbits = serial.STOPBITS_ONE, \
bytesize = serial.EIGHTBITS, \
timeout = 0, \
)
print('connected to: ',ser.name)
ser.close()
def SSend(input):
ser.write(codecs.decode(input, "hex_codec")) #send as ASCII
print('sent: ', input)
def ReadIO():
#open the port
try:
ser.open()
except:
print('error opening serial port')
exit()
#flush the buffers
ser.flushInput()
ser.flushOutput()
#write data to read from GPIO
#causes SC18IM to return a byte containing each of the 8 I/O values
SSend(b'4950')
time.sleep(0.1) #allow time for the data to be received
#read the data
serialData = False
serialData = ser.readline()
ser.close()
return serialData
while 1:
print(ReadIO())
time.sleep(0.5)
これは次のように出力されます
送ら: b'4950'
B ''
(私は戻っては0x00または0x20の代わりのいずれかを期待しています空のバイト)
Realtermを使用していて、正常に書き込みコマンドを受け取ったときに私が期待しているものが返ってくるので、他の場所で私のスクリプトで。それが働いた理由
は、私はこの
#read the data
serialData = False
for c in ser.readline():
print('in loop')
print(c)
serialData = c
ser.close()
を使用して、いくつかの運を持っていたしかし、私は本当に理解していないとそれだけで断続的に動作するように表示されます。
読んでいただきありがとうございます。
ああ、私は今すぐ参照してください。それをクリアしていただきありがとうございます。問題のもう1つは、スレーブがASCII文字でシリアルデータを送信していたことです。この問題は 'binascii.hexlify(data)'を使って修正されました。 – Jack