第三課使用pyserial來接收和發送串口數據

2021-01-07 李軼君談測試

1、python的庫非常多,功能同樣十分強大,在現有的庫的情況下,我們沒有必要去重複造輪子,拿來用就可以了,在這裡我選了pyserial庫。

安裝pyserial,使用pip工具,在cmd界面輸入:pip install pyserial,等待安裝完畢:

我們查看下pyserial的文檔https://pythonhosted.org/pyserial/,我們要實現一個簡單的串口助手功能,那我們串口組件部分需要的功能:

1)、可以搜索PC自帶的串口;

2)、可以配置串口;

3)、可以打開關閉串口;

4)、可以發送以及接收數據;

5)、數據的格式可以以16進位或者utf-8來顯示。

如此,我們來先實現搜索本地串口,查看pyserial的文檔:

使用serial.tools.list_ports來搜索串口,新建com.py,敲入代碼:

#coding:utf-8

import serial

import serial.tools.list_ports

def Get_ports():

clist=[]

port_list = list(serial.tools.list_ports.comports())

if len(port_list)> 0:

clist=[]

for e in port_list:

port_list_0 =list(e)

port_serial = port_list_0[0]

clist.append(port_serial)

print(clist)

Get_ports()

運行代碼:

可以看到搜索到了串口1,我的電腦自帶了一個串口。

接著我們來設置串口,包括串口名,波特率,數據位、停止位以及校驗位。

try:

com.port = comname

com.baudrate = 115200

com.bytesize = 8

com.stopbits = 1

com.parity = serial.PARITY_NONE

com.open()

except Exception as e:

print(e)

設置完畢後直接打開,打開完了串口還必須有一個關閉串口的功能:

if com.isOpen():

com.close()

print("串口關閉")

代碼已經有了,怎麼集成到我們的串口界面中去,我們將串口操作這部分做成一個類來直接調用就可以了。

寫成一個類:

#coding:utf-8

import serial

import serial.tools.list_ports

class opencom():

def __init__(self):

self.com=serial.Serial()

def initcom(self,comname):

try:

self.com.port = comname

self.com.baudrate = 115200

self.com.bytesize = 8

self.com.stopbits = 1

self.com.parity = serial.PARITY_NONE

except Exception as e:

print(e)

def opencom(self):

try:

self.com.open()

except Exception as e:

print(e)

return self.com.isOpen()

def CloseCom(self):

if self.com.isOpen():

self.com.close()

print("串口關閉")

def Get_ports(self):

clist=[]

port_list = list(serial.tools.list_ports.comports())

if len(port_list)> 0:

clist=[]

for e in port_list:

port_list_0 =list(e)

port_serial = port_list_0[0]

clist.append(port_serial)

return clist

敲入調用代碼:

c1=opencom()

clist=c1.Get_ports()

if len(clist)>0:

comname=clist[0]

c1.initcom(comname)

if c1.opencom():

c1.CloseCom()

在cmd中運行:

下節課我們將代碼與界面來進行信號綁定,在我們的醜陋的界面來進行操作。

相關焦點

  • 串口發送浮點型數據及int(2個字節)long int(4個字節)的方法
    (1)大端存儲,小端存儲;如果搞錯讀取數據就不是你接收的數據地址(我主要使用了fpga,arm以及PC機,很有可能存儲方式不同,一般可能不需要考慮) (2)字對齊。傳輸數據長度為8 Bit。奇偶檢驗無,停止位1 接收和發送都使能4GPIO引腳自動設置 USART1_RX/USART_TX5 NVIC Settings 一欄使能接收中斷關於串口部分的講解可以參考 發表於 2020-05-12
  • 串口通訊的起始、數據、停止位分配也不過如此
    串行通信的數據是逐位傳輸的,發送方發送的每一位都具有固定的時間間隔,這就要求接收方也要按照發送方同樣的時間間隔來接收每一位。不僅如此,接收方還必須能夠確定一個信息組的開始和結束。 常用的兩種基本串行通信方式包括同步通信和異步通信。
  • 邏輯分析儀的簡單使用介紹(附帶i2c、串口、spi數據分析)
    它是由數據線 SDA 和時鐘 SCL 構成的串行總線,可發送和接收數據。在 CPU 與被控 IC 之間、 IC 與 IC 之間進行雙向傳送, 高速 IIC 總線一般可達 400kbps 以上。I2C 總線在傳送數據過程中共有三種類型信號, 它們分別是:開始信號、結束信號和應答信號。開始信號:SCL 為高電平時, SDA 由高電平向低電平跳變,開始傳送數據。
  • Android串口的使用
    "選擇的串口地址"+path+"波特率:"+baudrate);try catch (IOException e) Log.d(TAG, "openSerialPort: 打開串口");return serialPort;}/** * 關閉串口 */public void closeSerialPort() catch (IOException e) Log.d(TAG, "closeSerialPort
  • 十大串口調試工具之誰是王者?
    優點:使用方便、用戶群最多、有書介紹及免費的原始碼。Ps:哪位高手回去改進一下?缺點:1)因採用多線程接收技術,接收有時丟數,特別在高波特率或使用USB轉串口時丟數較多。2)最大隻支持115.2k波特率。3)只能選擇COM1~COM2,使用USB轉串口時,要重新映射串口。
  • LabVIEW系列——將串口二進位數據轉換成ASCII字符
    有朋友經常問:怎麼將從串口接收到的數據轉換成ASCII字符?又怎麼給串口發送二進位數據?就不能使用com1了;為了解決這個問題,需要創建一個虛擬串口,我使用的是VSPM虛擬串口軟體,它能創建一個網絡串口,可以從網路埠收發數據到虛擬串口。
  • STM32如何高效接收串口數據?
    DMA,直接內存存取,可以用它的雙手釋放CPU的靈魂,所以,本文通過USART3進行串口收發,接受使用DMA的方式,無需CPU進行幹預,當接受完成之後,數據可以直接從內存的緩衝區讀取,從而減少了CPU的壓力。
  • Arduino的串口通訊函數
    不會的,單片機怎麼會知道「關燈」是什麼呢,但是單片機可以判斷接收到的字符串,但是我們可以提前設置好,也就是給單片機編程,當單片機接收到「關燈」這兩個字符時,它就給LED引腳輸出低電平,以此來達到關閉LED燈的目的。
  • 玩轉單片機之五--串口多數據收發
    unsigned char inbuf[INBUF_LEN]; //存儲數據數組unsigned char count3; //計數器//向串口發送一個字符void send_char_com( unsigned char ch){ SBUF=ch; while (TI== 0 ); TI= 0
  • 如何採用串口通信的連接方式和C語言編程實現串口通訊
    2.1.1單機測試方式 如果單機僅僅擁有一個RS232串口,可將RS232連接線的第2引腳(RD)與第3引腳(TD)短路,那麼由第3引腳的輸出信號就會被發送到第2引腳而送到同一串行端}1的輸入緩衝區,即可將數據讀入,進入測試過程。 如果單機擁有COMl和COM2口兩個RS232串口,那麼請選擇1 3節表2中的串口連接方式,進入測試過程。
  • 嵌入式系統串口傳輸int float型數據的處理
    在做嵌入式系統通信時往往會用到串口,包括嵌入式系統將數據傳輸給PC,或者是嵌入式系統之間進行數據傳輸,這時候就會遇到發送數據的問題。我們知道單片機通過串口發送數據時往往是一次一個字節(8位),如果傳輸char(8位)型數據則很好辦,只需要直接發送就可以了,但是在發送int型數據和float型數據時就會稍微有些複雜。
  • DB9串口使用技巧匯總
    1)DB9埠定義 編號定義功能1DCD數據載波檢測2RXD數據接收3TXD數據發送4DTR數據終端準備好5SG信號地6DSR數據設備準備好7RaS請求發送8CTS清除發送9RI振鈴指示    串口通信用到的是2/3/5引腳。
  • 淺談UART通信協議 UART接收數據時序設計
    UART接收數據的過程和發送數據的過程是恰好相反的。區別只在於UART發送的開始信號和發送數據端tx是從FPGA內部的其它模塊產生的;而UART接收的開始信號和接收數據段rx送來的數據來自其它設備,因此需要對外部送來的信號進行監測。
  • 十大串口調試工具之誰是王者?(沒有木馬,軟體免費下載)
    上的串口調試工具來調試或者測試。發送數據可發送十六進位(HEX)格式和ASCII碼,可以設置定時發送的數據以及時間間隔。可以自動顯示接收到的數據,支持HEX或ASCII碼顯示。是工程技術人員監視、調試串口程序的必備工具。
  • 容易被大多數人忽視的STM32串口DMA問題
    DMA傳輸將數據從一個地址空間複製到另一個地址空間。當CPU初始化這個傳輸動作,傳輸動作本身是由DMA控制器來實現和完成的。STM32有兩個DMA控制器(DMA2隻存在於大容量產品中),DMA1有7個通道,DMA2有5個通道,每個通道專門用來管理來自於一個或者多個外設對存儲器的訪問請求。還有一個仲裁器來協調各個DMA請求的優先權。作用:為CPU減負!
  • STM32串口通信基本原理
    在異步通訊中不使用時鐘信號進行數據同步,它們直接在數據信號中穿插一些用於同步的信號位,或者將主題數據進行打包,以數據幀的格式傳輸數據。通訊中還需要雙方規約好數據的傳輸速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。
  • 如何使用CanBus發送和接收特定數據
    我將簡單地將一個電位計數據和按鈕數據發送到CanBus模塊上的另一個Arduino。確保你使用一個Arduino作為主(發件人)而另一個作為奴隸(接收者)。 potPin,potValue,cantxValue 整數用於讀取和發送電位計值和 btnPin,btnValue 整數用於讀取和發送按鈕值 void setup() { Serial.begin(115200); while (CAN_OK !
  • 談談容易被多數人忽視的STM32串口DMA問題
    下面上圖從外設(TIMx、ADCx、SPIx、I2Cx、和USARTx)產生的DMA請求,通過邏輯或輸入到DMA控制器,這就意味著同時只能有一個請求有效(在同一時間,就只能使用其中的一個,其他通道也類似)。外設的DMA請求,可以通過設置相應的外設寄存器中的控制位,被獨立的開啟或關閉。
  • STM32實例——USART串口通信實驗(二)
    ,第三個參數用來使能或者失能對應中斷。, 我們就會把串口接收寄存器內數據讀取出來,然後再通過串口發送至上位機,等待發送完成後我們就會清除發送完成標誌位 USART_FLAG_TC。電路是按照 RS232 接口標準搭建,使用了一個 DB9 的公頭和母頭,電平轉換晶片使用的是 SP3232,與 MAX3232 一樣。母頭可作為下位機和上位機 PC 進行串口通信,公頭可作為上位機和其他母頭設備進行串口通信,當然也可以和計算機的公頭進行通信,需使用交叉型串口線。
  • 基於C++Builder的串口數據實時曲線繪製的實現
    對接收的數據進行處理和溫度鹽度曲線繪製後可在每次測量結束後自動將所有數據存儲到Realtime Data文件夾和Backup文件夾中。操作人員可以對歷史數據進行查詢,並根據需要列印。MSComm控制項有很多屬性,如CommPort屬性用來設置或返回通信埠號,可以設置為1~16之間的任何值,本系統採用預設值2;Settings屬性以字符串形式設置或返回波特率、奇偶校驗、數據位和停止位,本系統採用預設值「9 600,n,8,1」;PortOpen屬性用來設置或返回通信埠的狀態以及打開和關閉埠;InBufferSize和OutBufferSize屬性分別設置接收和發送緩衝區分配的內存數量