python虛擬串列埠 python 虛擬串列埠通訊

2021-10-11 20:24:16 字數 2537 閱讀 9003

準備著手寫乙個串列埠工具,當前程式設計環境,並沒有辦法接好下位機平台,需要模擬出乙個串列埠,不斷傳送資訊,方便除錯串列埠工具。

這兩個串列埠是互相接通的,乙個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接受資料...