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

Python之串口收發(fā)的異步程序

 更新時(shí)間:2023年09月06日 10:24:03   作者:土谷祠房客  
這篇文章主要介紹了Python之串口收發(fā)的異步程序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python串口收發(fā)的異步程序

進(jìn)行Python串口程序開發(fā)時(shí),一般使用 pyserial 模塊。這是個(gè)同步方式運(yùn)行的庫(kù)。

串口運(yùn)行時(shí),收發(fā)等待的時(shí)間較多,使用異步方式開發(fā)可以提高開發(fā)效率和運(yùn)行效率。

為了進(jìn)行異步編程,可以使用一個(gè)建立在 asyncio 基礎(chǔ)上的異步串口程序模塊,即pyserial_asyncio 模塊。

在使用這個(gè)模塊時(shí),我們發(fā)現(xiàn),網(wǎng)上資料中,能夠獨(dú)立直接運(yùn)行的簡(jiǎn)單實(shí)例較少。

為此,我們編寫了一個(gè)簡(jiǎn)單的可以獨(dú)立運(yùn)行的實(shí)例,以方便讀者使用這個(gè)模塊。

下面是這個(gè)程序的完整代碼

可以在 python 3.9 及以后的版本上運(yùn)行。

注意:

編程和運(yùn)行前要安裝 pyserial_asyncio 模塊。

import asyncio
import serial_asyncio
import time
# 接收異步函數(shù),收到后打印時(shí)間、收到的內(nèi)容和接收的序號(hào)
async def read_from_serial(reader):
    count = 0
    while True:
        data = await reader.read(1000)
        p = time.strftime("%X", time.localtime())
        print(f'received at {p}, {data.decode()}, serial = {count}')
        count += 1
# 發(fā)送異步函數(shù),每隔兩秒鐘發(fā)送一次
async def write_to_serial(writer):
    while True:
        writer.write(b'hello')
        await writer.drain()
        await asyncio.sleep(2)
async def main():
    # 連接串口,其中的'/dev/cu.usbserial-1140'是串口的名稱,
    # windows 的串口名一般是 'comx' 的格式,例如:'com3;
    # linux 的串口格式一般是 '/dev/ttyx' 的格式,例如:'dev/ttyUSB0'。
    reader, writer = await serial_asyncio.open_serial_connection(url='/dev/cu.usbserial-1140', baudrate=9600)
    # 生成串口讀寫異步任務(wù)各一個(gè)
    task_1 = asyncio.create_task(read_from_serial(reader))
    task_2 = asyncio.create_task(write_to_serial(writer))
    # 并行運(yùn)行兩個(gè)異步任務(wù)
    await task_1
    await task_2
if __name__ == '__main__':
    asyncio.run(main())

這個(gè)程序可以分為三個(gè)部分

1. 讀寫異步函數(shù):read_from_serial 和 send_to_serial。其中后者每隔兩秒鐘向串口發(fā)送b“hello”字節(jié)串;前者則從串口接收數(shù)據(jù),并將接收的時(shí)間的操作的序號(hào)打印出來。

2. 初始化異步函數(shù)main(),這個(gè)函數(shù)的功能是打開串口、生成接收和發(fā)送任務(wù),并行執(zhí)行這兩個(gè)任務(wù),以進(jìn)行串口的收發(fā)。

3. 最后的__name__ == ‘__main__’: 的主程序部分啟動(dòng)程序的運(yùn)行。

這個(gè)程序的測(cè)試運(yùn)行過程

如下:

1. 準(zhǔn)備一個(gè) USB 轉(zhuǎn)串口的轉(zhuǎn)接板;

2. 將轉(zhuǎn)接板的 TxD 和 RxD 短接,使發(fā)送的數(shù)據(jù)直接送到接收端;

3. 在操作系統(tǒng)上查找插入的串口設(shè)備,在 windows 操作系統(tǒng)下,可以用設(shè)備管理器查找;MacOS 下可以在終端上用 ls /dev/cu.* 命令查找;Linux 下則可以用 ls /dev/ttyUSB* 查找。當(dāng)然,也可以用pyserial 模塊中的相關(guān)功能編程查找。

4. 根據(jù)查找的結(jié)果改寫異步 main 程序中的 uri 參數(shù),上面程序是MacOS下的例子。

5. 啟動(dòng)程序,查看運(yùn)行結(jié)果(見下)。

/usr/local/bin/python3 /Users/xxxxxx/PycharmProjects/try_and_test/async_serial_3.py
received at 11:23:25, hello, serial = 0
received at 11:23:27, hello, serial = 1
received at 11:23:29, hello, serial = 2
received at 11:23:31, hello, serial = 3
received at 11:23:33, hello, serial = 4
received at 11:23:35, hello, serial = 5
received at 11:23:37, hello, serial = 6

在上述程序的基礎(chǔ)上,加上異常處理、內(nèi)部隊(duì)列接口等就可以實(shí)現(xiàn)自己所需功能的實(shí)用串口接口程序了。

總結(jié)

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

相關(guān)文章

  • Python繪制七段數(shù)碼管實(shí)例代碼

    Python繪制七段數(shù)碼管實(shí)例代碼

    這篇文章主要介紹了Python繪制七段數(shù)碼管實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • pandas中concat函數(shù)實(shí)現(xiàn)橫向連接

    pandas中concat函數(shù)實(shí)現(xiàn)橫向連接

    在pandas中,concat函數(shù)可用于合并不同的Series和DataFrame對(duì)象,本文主要介紹了pandas中concat函數(shù)實(shí)現(xiàn)橫向連接,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • 查看Python依賴包及其版本號(hào)信息的方法

    查看Python依賴包及其版本號(hào)信息的方法

    今天小編就為大家分享一篇查看Python依賴包及其版本號(hào)信息的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python?數(shù)據(jù)可視化實(shí)現(xiàn)5種炫酷的動(dòng)態(tài)圖

    Python?數(shù)據(jù)可視化實(shí)現(xiàn)5種炫酷的動(dòng)態(tài)圖

    數(shù)據(jù)可以幫助我們描述這個(gè)世界、闡釋自己的想法和展示自己的成果,但如果只有單調(diào)乏味的文本和數(shù)字,我們卻往往能難抓住觀眾的眼球。而很多時(shí)候,一張漂亮的可視化圖表就足以勝過千言萬語
    2022-01-01
  • python中l(wèi)ambda函數(shù)詳解及用法舉例

    python中l(wèi)ambda函數(shù)詳解及用法舉例

    這篇文章主要給大家介紹了關(guān)于python中l(wèi)ambda函數(shù)詳解及用法的相關(guān)資料,Lambda 函數(shù)是 Python中的匿名函數(shù),有些人將它們簡(jiǎn)稱為lambdas,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Python+Matplotlib繪制小提琴圖的示例代碼

    Python+Matplotlib繪制小提琴圖的示例代碼

    小提琴圖 (Violin Plot) 類似紡錘,是一種用來顯示數(shù)據(jù)分布和概率密度的圖形,本文為大家介紹了Matplotlib繪制小提琴圖的函數(shù)源碼,需要的可以參考一下
    2023-06-06
  • Python googletrans庫(kù)使用示例詳解

    Python googletrans庫(kù)使用示例詳解

    googletrans是一個(gè)基于谷歌翻譯API的Python庫(kù),支持多種語言的自動(dòng)檢測(cè)和翻譯,提供了translate和detect方法,用于翻譯文本和檢測(cè)文本語言,通過簡(jiǎn)單的命令即可安裝使用,適合需要實(shí)現(xiàn)多語言翻譯功能的開發(fā)者
    2024-09-09
  • 關(guān)于PyTorch 自動(dòng)求導(dǎo)機(jī)制詳解

    關(guān)于PyTorch 自動(dòng)求導(dǎo)機(jī)制詳解

    今天小編就為大家分享一篇關(guān)于PyTorch 自動(dòng)求導(dǎo)機(jī)制詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python實(shí)現(xiàn)單張圖像拼接與批量圖片拼接

    python實(shí)現(xiàn)單張圖像拼接與批量圖片拼接

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)單張圖像拼接與批量圖片拼接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 基于Python+Pygame實(shí)現(xiàn)變異狗大戰(zhàn)游戲

    基于Python+Pygame實(shí)現(xiàn)變異狗大戰(zhàn)游戲

    只有你想不到,沒有我找不到寫不了的好游戲!這篇文章就來和大家分享一下如何基于Python+Pygame實(shí)現(xiàn)變異狗大戰(zhàn)游戲,感興趣的可以了解一下
    2023-03-03

最新評(píng)論

包头市| 临江市| 威远县| 高邮市| 郯城县| 石棉县| 昌都县| 革吉县| 平罗县| 岑巩县| 乌拉特中旗| 宜良县| 临朐县| 阳西县| 获嘉县| 大丰市| 秭归县| 建平县| 涟源市| 信宜市| 当雄县| 通化县| 克山县| 乃东县| 综艺| 安溪县| 云安县| 上高县| 沙田区| 昌乐县| 永顺县| 临武县| 德江县| 桃源县| 尼勒克县| 泽州县| 新宾| 广灵县| 万源市| 如皋市| 仪征市|