欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 串口通信的實(shí)現(xiàn)

 更新時(shí)間:2020年09月29日 15:07:07   作者:東小東  
這篇文章主要介紹了Python的串口通信的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

串口通信是指外設(shè)和計(jì)算機(jī)間,通過(guò)數(shù)據(jù)信號(hào)線(xiàn) 、地線(xiàn)、控制線(xiàn)等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線(xiàn)少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)汀4谑怯?jì)算機(jī)上一種非常通用的設(shè)備通信協(xié)議。pyserial模塊封裝了python對(duì)串口的訪問(wèn),為多平臺(tái)的使用提供了統(tǒng)一的接口。

安裝:

pip3 install pyserial

測(cè)試:

兩個(gè)CH340 (TTL轉(zhuǎn)串口模塊)接入到PC串口上,通過(guò)Python進(jìn)行數(shù)據(jù)交互:

簡(jiǎn)單串口程序?qū)崿F(xiàn):

import serial #導(dǎo)入模塊
try:
 #端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
 portx="COM3"
 #波特率,標(biāo)準(zhǔn)值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
 bps=115200
 #超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒)
 timex=5
 # 打開(kāi)串口,并得到串口對(duì)象
 ser=serial.Serial(portx,bps,timeout=timex)

 # 寫(xiě)數(shù)據(jù)
 result=ser.write("我是東小東".encode("gbk"))
 print("寫(xiě)總字節(jié)數(shù):",result)

 ser.close()#關(guān)閉串口

except Exception as e:
  print("---異常---:",e)

獲取可用串口列表:

import serial #導(dǎo)入模塊

import serial.tools.list_ports
port_list = list(serial.tools.list_ports.comports())
print(port_list)
if len(port_list) == 0:
  print('無(wú)可用串口')
else:
  for i in range(0,len(port_list)):
    print(port_list[i])

十六進(jìn)制處理:

import serial #導(dǎo)入模塊
try:
 portx="COM3"
 bps=115200
 #超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒)
 timex=None
 ser=serial.Serial(portx,bps,timeout=timex)
 print("串口詳情參數(shù):", ser)

 #十六進(jìn)制的發(fā)送
 result=ser.write(chr(0x06).encode("utf-8"))#寫(xiě)數(shù)據(jù)
 print("寫(xiě)總字節(jié)數(shù):",result)

 #十六進(jìn)制的讀取
 print(ser.read().hex())#讀一個(gè)字節(jié)

 print("---------------")
 ser.close()#關(guān)閉串口

except Exception as e:
  print("---異常---:",e)

其他細(xì)節(jié)補(bǔ)充:

import serial #導(dǎo)入模塊
try:

 #端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
 portx="COM3"
 #波特率,標(biāo)準(zhǔn)值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
 bps=115200
 #超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒)
 timex=5
 # 打開(kāi)串口,并得到串口對(duì)象
 ser=serial.Serial(portx,bps,timeout=timex)
 print("串口詳情參數(shù):", ser)



 print(ser.port)#獲取到當(dāng)前打開(kāi)的串口名
 print(ser.baudrate)#獲取波特率

 result=ser.write("我是東小東".encode("gbk"))#寫(xiě)數(shù)據(jù)
 print("寫(xiě)總字節(jié)數(shù):",result)


 #print(ser.read())#讀一個(gè)字節(jié)
 # print(ser.read(10).decode("gbk"))#讀十個(gè)字節(jié)
 #print(ser.readline().decode("gbk"))#讀一行
 #print(ser.readlines())#讀取多行,返回列表,必須匹配超時(shí)(timeout)使用
 #print(ser.in_waiting)#獲取輸入緩沖區(qū)的剩余字節(jié)數(shù)
 #print(ser.out_waiting)#獲取輸出緩沖區(qū)的字節(jié)數(shù)

 #循環(huán)接收數(shù)據(jù),此為死循環(huán),可用線(xiàn)程實(shí)現(xiàn)
 while True:
     if ser.in_waiting:
       str=ser.read(ser.in_waiting ).decode("gbk")
       if(str=="exit"):#退出標(biāo)志
         break
       else:
        print("收到數(shù)據(jù):",str)

 print("---------------")
 ser.close()#關(guān)閉串口


except Exception as e:
  print("---異常---:",e)

部分封裝:

其中讀數(shù)據(jù)的封裝方法并不是很好用,使用的話(huà)又得循環(huán)接收,這樣反而更加復(fù)雜了

import serial #導(dǎo)入模塊
import threading
STRGLO="" #讀取的數(shù)據(jù)
BOOL=True #讀取標(biāo)志位

#讀數(shù)代碼本體實(shí)現(xiàn)
def ReadData(ser):
  global STRGLO,BOOL
  # 循環(huán)接收數(shù)據(jù),此為死循環(huán),可用線(xiàn)程實(shí)現(xiàn)
  while BOOL:
    if ser.in_waiting:
      STRGLO = ser.read(ser.in_waiting).decode("gbk")
      print(STRGLO)


#打開(kāi)串口
# 端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
# 波特率,標(biāo)準(zhǔn)值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
# 超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒)
def DOpenPort(portx,bps,timeout):
  ret=False
  try:
    # 打開(kāi)串口,并得到串口對(duì)象
    ser = serial.Serial(portx, bps, timeout=timeout)
    #判斷是否打開(kāi)成功
    if(ser.is_open):
      ret=True
      threading.Thread(target=ReadData, args=(ser,)).start()
  except Exception as e:
    print("---異常---:", e)
  return ser,ret



#關(guān)閉串口
def DColsePort(ser):
  global BOOL
  BOOL=False
  ser.close()



#寫(xiě)數(shù)據(jù)
def DWritePort(ser,text):
  result = ser.write(text.encode("gbk")) # 寫(xiě)數(shù)據(jù)
  return result




#讀數(shù)據(jù)
def DReadPort():
  global STRGLO
  str=STRGLO
  STRGLO=""#清空當(dāng)次讀取
  return str



if __name__=="__main__":
  ser,ret=DOpenPort("COM6",115200,None)
  if(ret==True):#判斷串口是否成功打開(kāi)
     count=DWritePort(ser,"我是東小東,哈哈")
     print("寫(xiě)入字節(jié)數(shù):",count)
     #DReadPort() #讀串口數(shù)據(jù)
     #DColsePort(ser) #關(guān)閉串口

查看所有串口

import serial.tools.list_ports
port_list = list(serial.tools.list_ports.comports())
if len(port_list) == 0:
  print('找不到串口')
else:
  for i in range(0,len(port_list)):
    print(port_list[i])

參考:

https://pythonhosted.org/pyserial/pyserial_api.html#serial.Serial.open

以上就是Python 串口通信的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于python 串口通信的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Django卸載之后重新安裝的方法

    Django卸載之后重新安裝的方法

    如果你打算從過(guò)去的一個(gè)版本升級(jí)Django, 你需要先刪除老版本的Django之后,再安裝新的版本。下面這篇文章主要給大家介紹了在Django卸載之后重新安裝的方法,文中給出了詳細(xì)的步驟,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • python中wheel的用法整理

    python中wheel的用法整理

    在本篇文章里小編給大家整理的是關(guān)于python中wheel的用法整理內(nèi)容,需要的朋友們可以跟著學(xué)習(xí)下。
    2020-06-06
  • Pythony運(yùn)維入門(mén)之Socket網(wǎng)絡(luò)編程詳解

    Pythony運(yùn)維入門(mén)之Socket網(wǎng)絡(luò)編程詳解

    這篇文章主要介紹了Pythony運(yùn)維入門(mén)之Socket網(wǎng)絡(luò)編程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python清除PDF文件中水印的項(xiàng)目實(shí)踐

    python清除PDF文件中水印的項(xiàng)目實(shí)踐

    本文主要介紹了python清除PDF文件中水印的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • python數(shù)學(xué)建模是加深Numpy和Pandas學(xué)習(xí)

    python數(shù)學(xué)建模是加深Numpy和Pandas學(xué)習(xí)

    這篇文章主要介紹了python數(shù)學(xué)建模是加深Numpy和Pandas學(xué)習(xí),緊接上一篇學(xué)習(xí)內(nèi)容展開(kāi)Numpy更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-07-07
  • Python Pycurl的屬性與方法案例詳解

    Python Pycurl的屬性與方法案例詳解

    這篇文章主要介紹了Python Pycurl的屬性與方法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • pyshp創(chuàng)建shp點(diǎn)文件的方法

    pyshp創(chuàng)建shp點(diǎn)文件的方法

    今天小編就為大家分享一篇pyshp創(chuàng)建shp點(diǎn)文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 使用python實(shí)現(xiàn)離散時(shí)間傅里葉變換的方法

    使用python實(shí)現(xiàn)離散時(shí)間傅里葉變換的方法

    這篇文章主要介紹了使用python實(shí)現(xiàn)離散時(shí)間傅里葉變換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析

    使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析

    這篇文章主要介紹了使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 10個(gè)Python實(shí)現(xiàn)的最頻繁使用的聚類(lèi)算法

    10個(gè)Python實(shí)現(xiàn)的最頻繁使用的聚類(lèi)算法

    聚類(lèi)或聚類(lèi)分析是無(wú)監(jiān)督學(xué)習(xí)問(wèn)題。它通常被用作數(shù)據(jù)分析技術(shù),用于發(fā)現(xiàn)數(shù)據(jù)中的有趣模式。本文為大家介紹了10個(gè)最頻繁使用的聚類(lèi)算法,感興趣的可以了解一下
    2022-12-12

最新評(píng)論