準備著手寫乙個串列埠工具,當前程式設計環境,並沒有辦法接好下位機平台,需要模擬出乙個串列埠,不斷傳送資訊,方便除錯串列埠工具。
這兩個串列埠是互相接通的,乙個com 可以當作上位機,乙個com可以當作下位機
2.python 實現向乙個串列埠內寫資料,另乙個串列埠內接受資料
#!/usr/bin/python
# -*-coding: utf-8 -*-
import serial
import serial.tools.list_ports
import threading
import time
from datetime import datetime
#列出所有當前的com口
port_list = list(serial.tools.list_ports.comports())
port_list_name =
class serialport:
def __init__(self,port,buand):
self.port = serial.serial(port,buand)
self.port.close()
if not self.port.isopen():
self.port.open()
def port_open(self):
if not self.port.isopen():
self.port.open()
def port_close(self):
self.port.close()
def send_data(self):
#date = datetime.now().strftime('%y-%m-%d %h:%m:%s.%f')[:-3]
while true:
date = datetime.now().strftime('%h:%m:%s.%f')[:-3]
print("send:",date)
self.port.write(date.encode())
time.sleep(1)
def read_data(self):
while true:
count = self.port.inwaiting()
if count > 0:
rec_str = self.port.read(count)
print("receive:",rec_str.decode())
def show_all_com():
if len(port_list) <= 0:
print("the serial port can't find!")
else:
for itms in port_list:
if __name__ == '__main__':
baunrate = 115200
print("1.list all com")
show_all_com()
print(port_list_name)
print("2.open write port ",port_list_name[0])
serialport_w = port_list_name[0]
mserial_w = serialport(serialport_w,baunrate)
print("3.start write thread")
t1 = threading.thread(target=mserial_w.send_data)
t1.setdaemon(true)
t1.start()
print("4.open read port ",port_list_name[1])
serialport_r = port_list_name[1]
mserial_r = serialport(serialport_r,baunrate)
print("5.start read thread")
t2 = threading.thread(target=mserial_r.read_data)
t2.setdaemon(true)
t2.start()
#do something else, make main thread alive there
while true:
time.sleep(10)
**流程:
啟動乙個子執行緒,開啟com3 ,將當前時間作為資料,寫入到串列埠
啟動另乙個子執行緒,開啟com4,讀取串列埠中寫入的資料
注意點:
1.串列埠中寫入的資料為byte型別,str to byte 需要 encode(), 預設使用utf-8
2.從串列埠中讀取的資料,也是byte型別,byte to str 需要decode(), 預設使用utf-8
3.虛擬串列埠是兩個裝置直接的通訊 ,需要在com3 中寫 ,在com4中讀,筆者犯過乙個低階錯誤,com3寫,也在com3中讀,不會出任何資料
4.子執行緒設定為守護執行緒,主線程退出,子執行緒隨之退出,後續可以在主線程中處理讀取到的資料
執行結果
python 虛擬串列埠通訊
準備著手寫乙個串列埠工具,當前程式設計環境,並沒有辦法接好下位機平台,需要模擬出乙個串列埠,不斷傳送資訊,方便除錯串列埠工具。列出所有當前的com口 port list list serial.tools.list ports.comports port list name class serial...
建立python虛擬環境並打包python檔案
當需要為乙個離線環境部署python應用時,離線環境可能缺少各種python環境,有docker的話可以用docker,沒有docker可以用pyinstaller打包成二進位制檔案。pyinstaller會打包當前所有用pip安裝的包,所以建議在虛擬環境中打包python應用。安裝virtuale...
c 藍芽虛擬串列埠 C 虛擬串列埠通訊
將主埠com8拆分成 com1和com2兩個虛擬埠 com8接收的訊息會傳遞給com1和com2 serialport spsend spsend,spreceive用虛擬串列埠連線,它們之間可以相互傳輸資料。spsend傳送資料 serialport spreceive spreceive接受資料...