![](/img/trans.png)
[英]Read data from a serial device using Python and save it to PostgreSQL using a Raspberry Pi
[英]Problems retrrieving data from serial device with python Raspberry Pi 3
我有一個電磁線圈控制硬件,我正在嘗試將它用於Access系統,根據設備的手冊,我正在向設備發送命令,並嘗試獲取狀態,但我僅收到空白行。
知道端口狀態的命令如下:
讀取鎖狀態命令(門開關狀態的反饋)起始板地址鎖地址命令校驗碼(XOR)0X80 0X01 – 0XF 0X00-32 0X33 XX鎖地址為0X00,返回所有鎖的狀態,如果它不為0,則將返回到此鎖定狀態。
例如: 返回到鎖1的狀態,例如:上位機發送0X80 0X01 0X01 0X33 0XB2(十六進制),返回命令板地址鎖地址狀態檢查代碼0X80 0X01 0X01 0X11 0X91(鎖打開)0X80 0X01 0X01 0X00 0X80(鎖關閉b。返回到所有鎖的狀態:
例如:主機發送0X80 0X01 0X00 0X33 0XB2(十六進制),返回起始板地址Status1 Status2 Status3 Status4 Status5 Status6 Status7
命令檢查代碼0X80 0X01 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0X33 0XXX
狀態:從狀態1到狀態7,從高到低,相應的鎖定為1-50。
這是我的代碼:
#!/usr/bin/env python
# based on tutorials:
# http://www.roman10.net/serial-port-communication-in-python/
# http://www.brettdangerfield.com/post/raspberrypi_tempature_monitor_project/
import serial, time
SERIALPORT = "/dev/ttyUSB0"
BAUDRATE = 9600
ser = serial.Serial(SERIALPORT, BAUDRATE)
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
#ser.timeout = None #block read
#ser.timeout = 0 #non-block read
ser.timeout = 2 #timeout block read
ser.xonxoff = False #disable software flow control
ser.rtscts = False #disable hardware (RTS/CTS) flow control
ser.dsrdtr = False #disable hardware (DSR/DTR) flow control
ser.writeTimeout = 0 #timeout for write
print 'Starting Up Serial Monitor'
if ser.isOpen():
try:
ser.flushInput() #flush input buffer, discarding all its contents
ser.flushOutput()#flush output buffer, aborting current output
ser.write (serial.to_bytes([0X80,0X01,0X33,0XB2]))
print("write data: 0X80,0X01,0X33,0XB2")
time.sleep(0.5)
numberOfLine = 0
while True:
response = ser.readline()
print("read data: " + response)
numberOfLine = numberOfLine + 1
if (numberOfLine >= 8):
break
ser.close()
except Exception, e:
print "error communicating...: " + str(e)
else:
print "cannot open serial port "
這是我的結果:
讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:讀取數據:
你能幫我做錯什么嗎?
評論 〜文件:鏈接
您的命令[0x80,0x01,0x33,0xB2]
錯誤 。
采用
ser.write ([0x80, 0x01, 0x01, 0x33, 0xB2])
要么
ser.write ([0x80, 0x01, 0x00, 0x33, 0xB2])
讓我們檢查pySerial
看到您的串行端口和電磁控制硬件 。
執行以下操作並檢查輸出:
python -m serial.tools.list_ports
刪除之間的所有設置
ser.bytesize ... ser.writeTimeout
僅使用以下代碼使用默認值 :
ser = serial.Serial(SERIALPORT)
更改為以下內容:
ser.write ([0x80, 0x01, 0x00, 0x33, 0xB2])
您已經有binary
數據,因此不需要編碼。 閱讀pySerial 3.0文檔
serial.to_bytes(sequence)
我不確定您的命令,您對問題的描述不清楚。
您是否有電磁閥控制硬件文檔的公共鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.