中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Python的串口通信(pyserial)

         串口通信是指外設(shè)和計(jì)算機(jī)間,通過(guò)數(shù)據(jù)信號(hào)線 、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線少,在遠(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):

 1 import serial #導(dǎo)入模塊 2 try: 3   #端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等 4   portx="COM3" 5   #波特率,標(biāo)準(zhǔn)值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200 6   bps=115200 7   #超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒) 8   timex=5 9   # 打開串口,并得到串口對(duì)象10   ser=serial.Serial(portx,bps,timeout=timex)11 12   # 寫數(shù)據(jù)13   result=ser.write("我是東小東".encode("gbk"))14   print("寫總字節(jié)數(shù):",result)15 16   ser.close()#關(guān)閉串口17 18 except Exception as e:19     print("---異常---:",e)

 獲取可用串口列表:

 1 import serial #導(dǎo)入模塊 2  3 import serial.tools.list_ports 4 port_list = list(serial.tools.list_ports.comports()) 5 print(port_list) 6 if len(port_list) == 0: 7    print('無(wú)可用串口') 8 else: 9     for i in range(0,len(port_list)):10         print(port_list[i])

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

 1 import serial #導(dǎo)入模塊 2 try: 3   portx="COM3" 4   bps=115200 5   #超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒) 6   timex=None 7   ser=serial.Serial(portx,bps,timeout=timex) 8   print("串口詳情參數(shù):", ser) 9 10   #十六進(jìn)制的發(fā)送11   result=ser.write(chr(0x06).encode("utf-8"))#寫數(shù)據(jù)12   print("寫總字節(jié)數(shù):",result)13 14   #十六進(jìn)制的讀取15   print(ser.read().hex())#讀一個(gè)字節(jié)16 17   print("---------------")18   ser.close()#關(guān)閉串口19 20 except Exception as e:21     print("---異常---:",e)

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

 1 import serial #導(dǎo)入模塊 2 try: 3  4   #端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等 5   portx="COM3" 6   #波特率,標(biāo)準(zhǔn)值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200 7   bps=115200 8   #超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒) 9   timex=510   # 打開串口,并得到串口對(duì)象11   ser=serial.Serial(portx,bps,timeout=timex)12   print("串口詳情參數(shù):", ser)13 14 15 16   print(ser.port)#獲取到當(dāng)前打開的串口名17   print(ser.baudrate)#獲取波特率18 19   result=ser.write("我是東小東".encode("gbk"))#寫數(shù)據(jù)20   print("寫總字節(jié)數(shù):",result)21 22 23   #print(ser.read())#讀一個(gè)字節(jié)24   # print(ser.read(10).decode("gbk"))#讀十個(gè)字節(jié)25   #print(ser.readline().decode("gbk"))#讀一行26   #print(ser.readlines())#讀取多行,返回列表,必須匹配超時(shí)(timeout)使用27   #print(ser.in_waiting)#獲取輸入緩沖區(qū)的剩余字節(jié)數(shù)28   #print(ser.out_waiting)#獲取輸出緩沖區(qū)的字節(jié)數(shù)29 30   #循環(huán)接收數(shù)據(jù),此為死循環(huán),可用線程實(shí)現(xiàn)31   while True:32          if ser.in_waiting:33              str=ser.read(ser.in_waiting ).decode("gbk")34              if(str=="exit"):#退出標(biāo)志35                  break36              else:37                print("收到數(shù)據(jù):",str)38 39   print("---------------")40   ser.close()#關(guān)閉串口41 42 43 except Exception as e:44     print("---異常---:",e)

部分封裝:

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

 1 import serial #導(dǎo)入模塊 2 import threading 3 STRGLO="" #讀取的數(shù)據(jù) 4 BOOL=True  #讀取標(biāo)志位 5  6 #讀數(shù)代碼本體實(shí)現(xiàn) 7 def ReadData(ser): 8     global STRGLO,BOOL 9     # 循環(huán)接收數(shù)據(jù),此為死循環(huán),可用線程實(shí)現(xiàn)10     while BOOL:11         if ser.in_waiting:12             STRGLO = ser.read(ser.in_waiting).decode("gbk")13             print(STRGLO)14 15 16 #打開串口17 # 端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等18 # 波特率,標(biāo)準(zhǔn)值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,11520019 # 超時(shí)設(shè)置,None:永遠(yuǎn)等待操作,0為立即返回請(qǐng)求結(jié)果,其他值為等待超時(shí)時(shí)間(單位為秒)20 def DOpenPort(portx,bps,timeout):21     ret=False22     try:23         # 打開串口,并得到串口對(duì)象24         ser = serial.Serial(portx, bps, timeout=timeout)25         #判斷是否打開成功26         if(ser.is_open):27            ret=True28            threading.Thread(target=ReadData, args=(ser,)).start()29     except Exception as e:30         print("---異常---:", e)31     return ser,ret32 33 34 35 #關(guān)閉串口36 def DColsePort(ser):37     global BOOL38     BOOL=False39     ser.close()40 41 42 43 #寫數(shù)據(jù)44 def DWritePort(ser,text):45     result = ser.write(text.encode("gbk"))  # 寫數(shù)據(jù)46     return result47 48 49 50 51 #讀數(shù)據(jù)52 def DReadPort():53     global STRGLO54     str=STRGLO55     STRGLO=""#清空當(dāng)次讀取56     return str57 58 59 60 if __name__=="__main__":61     ser,ret=DOpenPort("COM6",115200,None)62     if(ret==True):#判斷串口是否成功打開63          count=DWritePort(ser,"我是東小東,哈哈")64          print("寫入字節(jié)數(shù):",count)65          #DReadPort() #讀串口數(shù)據(jù)66          #DColsePort(ser)  #關(guān)閉串口

 參考:

https://blog.csdn.net/wjcq8455/article/details/77981616

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

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python 中輕松實(shí)現(xiàn)串口通信
學(xué)習(xí)記錄:python serial 庫(kù)&excel操作
python中pyserial模塊使用方法
與外部設(shè)備對(duì)話:Python串口通信實(shí)戰(zhàn)指南
「調(diào)試」使用python與單片機(jī)進(jìn)行通信
使用python來(lái)調(diào)試串口
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服