最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python玩轉(zhuǎn)串口(基于pySerial問(wèn)題)

 更新時(shí)間:2023年09月06日 14:26:53   作者:碼農(nóng)老王(JN)  
這篇文章主要介紹了使用Python玩轉(zhuǎn)串口(基于pySerial問(wèn)題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

引言

對(duì)于嵌入式設(shè)備,串口可謂是最常用的接口。在裸機(jī)編程中,串口通常用于輸出程序的運(yùn)行或調(diào)試信息;在嵌入式操作系統(tǒng)中,串口通常會(huì)作為系統(tǒng)的控制臺(tái)接口。

如果掌握了Python操作串口的方法,那我們就可以利用Python強(qiáng)大的數(shù)據(jù)處理能力,快速開(kāi)發(fā)出許多好用的工具。

串口的基本操作

在使用 Python 之前,我們先回想一下平時(shí)我們是如何使用串口的。

總結(jié)來(lái)說(shuō),無(wú)非就是下面幾個(gè)步驟:

首先,我們需要確定要使用的串口號(hào)。

其次,配置波特率、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位、DTR/DSR、RTS/CTS 和 XON/XOFF。

第三,打開(kāi)串口。

第四,收發(fā)數(shù)據(jù)。

第五,關(guān)閉串口。

接下來(lái),我們就來(lái)研究下用 Python 怎么實(shí)現(xiàn)上面的這些步驟。

初識(shí) pySerial

pySerial 是 Python 中用于操作串口的第三方模塊,它支持 Windows、Linux、OSX、BSD等多個(gè)平臺(tái)。

如果要使用 pySerial 模塊,首先必須保證 Python 版本高于 Python 2.7 或者 Python 3.4。

另外,如果你是用的是 Windows 系統(tǒng),那必須使用 Win7 及以上的版本。

pySerial 的安裝很簡(jiǎn)單,只需要執(zhí)行一條命令:pip install pyserial安裝完成后,只需要在 Python 代碼中使用 import serial 語(yǔ)句導(dǎo)入該模塊即可。

確定串口號(hào)

import serial
import serial.tools.list_ports
# 獲取所有串口設(shè)備實(shí)例。
# 如果沒(méi)找到串口設(shè)備,則輸出:“無(wú)串口設(shè)備?!?
# 如果找到串口設(shè)備,則依次輸出每個(gè)設(shè)備對(duì)應(yīng)的串口號(hào)和描述信息。
ports_list = list(serial.tools.list_ports.comports())
if len(ports_list) <= 0:
    print("無(wú)串口設(shè)備。")
else:
    print("可用的串口設(shè)備如下:")
    for comport in ports_list:
        print(list(comport)[0], list(comport)[1])

運(yùn)行結(jié)果:

可用的串口設(shè)備如下:
COM4 藍(lán)牙鏈接上的標(biāo)準(zhǔn)串行 (COM4)
COM6 藍(lán)牙鏈接上的標(biāo)準(zhǔn)串行 (COM6)
COM5 藍(lán)牙鏈接上的標(biāo)準(zhǔn)串行 (COM5)
COM18 Prolific PL2303GT USB Serial COM Port (COM18)
COM17 Prolific USB-to-Serial Comm Port (COM17)
COM3 藍(lán)牙鏈接上的標(biāo)準(zhǔn)串行 (COM3)

配置串口 & 打開(kāi)串口

pySerial 配置和打開(kāi)串口有兩種方式:

  • 第一種方式是在調(diào)用函數(shù)接口打開(kāi)串口時(shí)傳入配置參數(shù)
  • 第二種方式是先配置參數(shù),然后再打開(kāi)串口

這兩種方式操作的效果一樣,此處我們只介紹第一種。

# 方式1:調(diào)用函數(shù)接口打開(kāi)串口時(shí)傳入配置參數(shù)
import serial
ser = serial.Serial("COM17", 115200)    # 打開(kāi)COM17,將波特率配置為115200,其余參數(shù)使用默認(rèn)值
if ser.isOpen():                        # 判斷串口是否成功打開(kāi)
    print("打開(kāi)串口成功。")
    print(ser.name)    # 輸出串口號(hào)
else:
    print("打開(kāi)串口失敗。")
 

在使用 serial.Serial() 創(chuàng)建串口實(shí)例時(shí),可以傳入的參數(shù)很多,常用的參數(shù)如下(默認(rèn)值用紅色標(biāo)記):

  • port- 串口設(shè)備名或 None。
  • baudrate - 波特率,可以是50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000, 4000000。
  • bytesize - 數(shù)據(jù)位,可取值為:FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS。
  • parity - 校驗(yàn)位,可取值為:PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE。
  • stopbits - 停止位,可取值為:STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TOW。
  • xonxoff - 軟件流控,可取值為 True, False。
  • rtscts - 硬件(RTS/CTS)流控,可取值為 True, False。
  • dsr/dtr - 硬件(DSR/DTR)流控,可取值為 True, False。
  • timeout - 讀超時(shí)時(shí)間,可取值為 None, 0 或者其他具體數(shù)值(支持小數(shù))。當(dāng)設(shè)置為 None 時(shí),表示阻塞式讀取,一直讀到期望的所有數(shù)據(jù)才返回;當(dāng)設(shè)置為 0 時(shí),表示非阻塞式讀取,無(wú)論讀取到多少數(shù)據(jù)都立即返回;當(dāng)設(shè)置為其他數(shù)值時(shí),表示設(shè)置具體的超時(shí)時(shí)間(以秒為單位),如果在該時(shí)間內(nèi)沒(méi)有讀取到所有數(shù)據(jù),則直接返回。
  • write_timeout: 寫(xiě)超時(shí)時(shí)間,可取值為 None, 0 或者其他具體數(shù)值(支持小數(shù))。參數(shù)值起到的效果參考 timeout 參數(shù)。
import serial
# 打開(kāi) COM17,將波特率配置為115200,數(shù)據(jù)位為7,停止位為2,無(wú)校驗(yàn)位,讀超時(shí)時(shí)間為0.5秒。
ser = serial.Serial(port="COM17",
                    baudrate=115200,
                    bytesize=serial.SEVENBITS,
                    parity=serial.PARITY_NONE,
                    stopbits=serial.STOPBITS_TWO,
                    timeout=0.5) 

關(guān)閉串口

關(guān)閉串口很簡(jiǎn)單,直接調(diào)用 close() 方法即可。

import serial
ser = serial.Serial("COM17", 115200)    # 打開(kāi) COM17,將波特率配置為115200,其余參數(shù)使用默認(rèn)值
if ser.isOpen():                        # 判斷串口是否成功打開(kāi)
    print("打開(kāi)串口成功。")
else:
    print("打開(kāi)串口失敗。")
ser.close()
if ser.isOpen():                        # 判斷串口是否關(guān)閉
    print("串口未關(guān)閉。")
else:
    print("串口已關(guān)閉。")

發(fā)送數(shù)據(jù) write()

關(guān)于write() 方法,需要了解如下幾點(diǎn):

① write() 方法只能發(fā)送 bytes 類(lèi)型的數(shù)據(jù),所以需要對(duì)字符串進(jìn)行 encode 編碼。

② write() 方法執(zhí)行完成后,會(huì)將發(fā)送的字節(jié)數(shù)作為返回值。

③ 在打開(kāi)串口時(shí),可以為 write() 方法配置超時(shí)時(shí)間

import serial
# 打開(kāi) COM17,將波特率配置為115200.
ser = serial.Serial(port="COM17", baudrate=115200)
# 串口發(fā)送 ABCDEFG,并輸出發(fā)送的字節(jié)數(shù)。
write_len = ser.write("ABCDEFG".encode('utf-8'))
print("串口發(fā)出{}個(gè)字節(jié)。".format(write_len))
ser.close()

讀取數(shù)據(jù) read()

關(guān)于 read() 方法,需要了解如下幾點(diǎn):

① read() 方法默認(rèn)一次讀取一個(gè)字節(jié),可以通過(guò)傳入?yún)?shù)指定每次讀取的字節(jié)數(shù)。

② read() 方法會(huì)將讀取的內(nèi)容作為返回值,類(lèi)型為 bytes。

③ 在打開(kāi)串口時(shí),可以為 read() 方法配置超時(shí)時(shí)間。

import serial
# 打開(kāi) COM17,將波特率配置為115200, 讀超時(shí)時(shí)間為1秒
ser = serial.Serial(port="COM17", baudrate=115200, timeout=1)
# 讀取串口輸入信息并輸出。
while True:
    com_input = ser.read(10)
    if com_input:   # 如果讀取結(jié)果非空,則輸出
        print(com_input)
ser.close()

總結(jié)

以上就是對(duì) pySerial 模塊使用方法的簡(jiǎn)單總結(jié),如果想要了解更多 pySerial 細(xì)節(jié),可以參考 pySerial官方文檔

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytorch自定義loss損失函數(shù)

    pytorch自定義loss損失函數(shù)

    這篇文章主要介紹了pytorch自定義loss損失函數(shù),自定義loss的方法有很多,本文要介紹的是把loss作為一個(gè)pytorch的模塊,下面詳細(xì)資料需要的小伙伴可以參考一下
    2022-02-02
  • python中cPickle用法例子分享

    python中cPickle用法例子分享

    這篇文章主要介紹了python中cPickle用法例子,有需要的朋友可以參考一下
    2014-01-01
  • Ubuntu下安裝卸載python3.8的過(guò)程

    Ubuntu下安裝卸載python3.8的過(guò)程

    這篇文章主要介紹了Ubuntu下python3.8的安裝與卸載,本文以在 Ubuntu 16.04 中安裝為例,方法同樣適用于 Ubuntu 18.04,需要的朋友可以參考下
    2021-09-09
  • 通過(guò)python實(shí)現(xiàn)windows桌面截圖代碼實(shí)例

    通過(guò)python實(shí)現(xiàn)windows桌面截圖代碼實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)windows桌面截圖代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • python中列表的常見(jiàn)操作梳理總結(jié)(一)

    python中列表的常見(jiàn)操作梳理總結(jié)(一)

    這篇文章主要介紹了python中列表的常見(jiàn)操作梳理總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • Python的Django框架中設(shè)置日期和字段可選的方法

    Python的Django框架中設(shè)置日期和字段可選的方法

    這篇文章主要介紹了Python的Django框架中設(shè)置日期和字段可選的方法,是Django設(shè)置當(dāng)中的基本操作,需要的朋友可以參考下
    2015-07-07
  • PyG搭建GCN需要準(zhǔn)備的數(shù)據(jù)格式

    PyG搭建GCN需要準(zhǔn)備的數(shù)據(jù)格式

    這篇文章主要為大家介紹了PyG搭建GCN前需要準(zhǔn)備的PyG數(shù)據(jù)格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Pandas實(shí)現(xiàn)數(shù)據(jù)類(lèi)型轉(zhuǎn)換的一些小技巧匯總

    Pandas實(shí)現(xiàn)數(shù)據(jù)類(lèi)型轉(zhuǎn)換的一些小技巧匯總

    這篇文章主要給大家匯總介紹了關(guān)于Pandas實(shí)現(xiàn)數(shù)據(jù)類(lèi)型轉(zhuǎn)換的一些小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • python中while循環(huán)語(yǔ)句用法簡(jiǎn)單實(shí)例

    python中while循環(huán)語(yǔ)句用法簡(jiǎn)單實(shí)例

    這篇文章主要介紹了python中while循環(huán)語(yǔ)句用法,以一個(gè)簡(jiǎn)單實(shí)例形式分析了Python使用while循環(huán)語(yǔ)句使用方法,需要的朋友可以參考下
    2015-05-05
  • Python 調(diào)用 zabbix api的方法示例

    Python 調(diào)用 zabbix api的方法示例

    這篇文章主要介紹了Python 調(diào)用 zabbix api的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論

霍城县| 延边| 敦煌市| 香格里拉县| 陆丰市| 犍为县| 饶平县| 镇远县| 潼南县| 仙游县| 巴塘县| 茌平县| 云阳县| 银川市| 海城市| 莱州市| 姜堰市| 黎平县| 龙州县| 静乐县| 云浮市| 武夷山市| 娱乐| 芜湖县| 南阳市| 宿州市| 浙江省| 通化市| 怀远县| 弥渡县| 都江堰市| 宁晋县| 墨江| 霸州市| 高雄市| 江源县| 东源县| 苗栗市| 英德市| 千阳县| 德安县|