python真的是強大。
還能處理串列埠的資料。
今天主要解釋下串列埠如何進行通訊的。
首先進行串列埠通訊用的是
import serial
也就是這個包起的作用。
首先我們可以先測試哪個埠是可以使用的。
# coding:utf-8
import serial.tools.list_ports
plist = list(serial.tools.list_ports.comports())
if len(plist) <= 0:
print("沒有發現埠!")
else:
plist_0 = list(plist[0])
serialname = plist_0[0]
serialfd = serial.serial(serialname, 9600, timeout=60)
print("可用埠名》", serialfd.name)
檢視現在可以用的埠數
我的電腦輸出的是com3
serialport = serial.serial(serialname, 115200, timeout=1,parity=serial.parity_even, rtscts=1)
serialname 就是埠名稱,也就是上邊自動檢測到的com3
其餘的引數是 波特率
bytesize為每個位元組的位元數,設定值為fivebits, sixbits,sevenbits, eightbits 5-8位元;
parity設定校驗位parity_none, parity_even,parity_odd parity_mark,
parity_space,用來設定校驗位;stopbits停止位,用來指示位元組完成,可以選擇的設定stopbits_one,
timeout (float)讀出超時設定;xonxoff (bool)軟體流控開關;
if x.isopen():
print("open success")
else:
print("open failed")
檢查串列埠是否正常開啟,只有開啟了才能進行通訊
現在基本的準備工作做完了,下來是進行傳送和接收資訊。
處理串列埠的傳送**
def fasong():
f = 0
while f <1:
print("zai fa song ")
time.sleep(3)
myinput=bytes([0x3f,0x0d,0x0a]) # 需要傳送的十六進製制資料的 ? 回車鍵 以及換行符
x.write(myinput)
time.sleep(3)
f = f + 1
沒有直接寫成死迴圈是因為希望進行順序通訊的,我在網上看到有的是寫了個死迴圈,然後開啟了執行緒進行通訊的,這裡沒用這個方法。
開始的時候我只傳送了乙個? 但是返回的資料都是空,一直尋找不到原因,最後通過示波器,把傳送**的波形進行對比發現傳送的波形除了?還有乙個回車以及換行的訊號。
補足了**也就返回了資訊。
def jieshou():
j = 0
while j < 1:
print("zai jie shou")
# print(x.inwaiting)
while x.inwaiting() > 0:
# global lastval
myout=x.read(8) # 提取接收緩衝區中的前8個位元組數
rainval = myout.decode('gbk')
# val = rainval - lastval
print(rainval)
# lastval = rainval
j = j + 1
這是接收部分的**。
python虛擬串列埠 python 虛擬串列埠通訊
準備著手寫乙個串列埠工具,當前程式設計環境,並沒有辦法接好下位機平台,需要模擬出乙個串列埠,不斷傳送資訊,方便除錯串列埠工具。這兩個串列埠是互相接通的,乙個com 可以當作上位機,乙個com可以當作下位機 2.python 實現向乙個串列埠內寫資料,另乙個串列埠內接受資料 usr bin pytho...
python 串列埠接收
最簡單的接收然後列印 如下 1 2 3 4 5 6 7 8 9 10 importserial ser serial.serial com4 115200 data while1 whileser.inwaiting 0 data ser.read 1 ifdata printdata data 掃...
python串列埠通訊
然後需要安裝python的serial庫 pip install pyserial在pyserial中設定串列埠的操作為 serial.serial portx,bps,timeout waittime 其中,portx為埠名稱,bps為波特率,timeout為超時時間,以秒為單位,所以操作非常簡單...