真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于pyserial【Python串口通信】

前言

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、錦江網(wǎng)絡(luò)推廣、微信小程序開發(fā)、錦江網(wǎng)絡(luò)營銷、錦江企業(yè)策劃、錦江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供錦江建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

Python串口通信有多種方式,本文是基于基于pyserial實(shí)現(xiàn)的。首先安裝pyserial依賴庫,了解常用的方法函數(shù),認(rèn)識Serial參數(shù)說明;然后電腦查看可用的端口,舉個簡單示例:能自動檢測串口,并連接此串口,收集串口的數(shù)據(jù);最后查看運(yùn)行效果。

安裝pyserial

pip install pyserial

查看可用的端口

# coding:utf-8 import serial.tools.list_ports plist = list(serial.tools.list_ports.comports())  if len(plist) <= 0:     print("沒有發(fā)現(xiàn)端口!") else:     plist_0 = list(plist[0])     serialName = plist_0[0]     serialFd = serial.Serial(serialName, 9600, timeout=60)     print("可用端口名>>>", serialFd.name) 

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

注:在pyCharm環(huán)境下運(yùn)行的,在電腦串口上有一個采集的傳感器(通過串口連接到電腦)

常用的方法函數(shù) 導(dǎo)入串口模塊import serial;打開串口ser = serial.Serial(端口名稱,...其他參數(shù)), ser.open()方法可以在close之后再次打開相應(yīng)端口;關(guān)閉串口ser.close();通過串口寫入ser.write(b\'\'),參數(shù)需要使用字節(jié)bytes類型,如果是str類型,則可以使用encode(\'utf-8\')的方式進(jìn)行轉(zhuǎn)換;讀取模塊信息的方法如下:
-> x= ser.read()讀取一個字節(jié),x=read(n)讀取n個字節(jié),readline()可以用來讀取一行。 查看COM口工

python -m serial.tools.list_ports -v,可以列出所有串口名稱及屬性。

Serial參數(shù)說明

port端口名字,windows下為\'COM1\'等;

baudrate (int)波特率,可以設(shè)置的范圍9600到115200;

bytesize為每個字節(jié)的比特?cái)?shù),設(shè)置值為FIVEBITS, SIXBITS,SEVENBITS, EIGHTBITS 5-8比特;

parity設(shè)置校驗(yàn)位PARITY_NONE, PARITY_EVEN,PARITY_ODD PARITY_MARK,PARITY_SPACE,用來設(shè)置校驗(yàn)位;stopbits停止位,用來指示字節(jié)完成,可以選擇的設(shè)置STOPBITS_ONE,STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO;write_timeout(float) 寫入超時設(shè)置;

timeout (float)讀出超時設(shè)置;xonxoff (bool)軟件流控開關(guān);

rtscts (bool)硬件RTS/CTS流控開關(guān);

dsrdtr (bool)硬件DSR/DTR流控開關(guān)。

關(guān)于UART流控兩線方式?jīng)]有硬件流控,四線方式采用DSR、DTR進(jìn)行流控,而RS232標(biāo)準(zhǔn)中可以有DSR、DTR的流控方式。RTS-request to send; CTS- clear to send;DSR-data set ready;DTR-Data Terminal Ready。

一個簡單示例:能自動檢測串口,并連接此串口,收集串口的數(shù)據(jù)

#!usr/bin/python3.6  import serial import sys import os import time import re  global MAX_LOOP_NUM global newCmd MAX_LOOP_NUM = 10   def waitForCmdOKRsp():     maxloopNum = 0     while True:         line = ser.readline()         maxloopNum = maxloopNum + 1                   try:             print("Rsponse : %s"%line.decode(\'utf-8\'))         except:             pass                  if ( re.search(b\'OK\',line)):             break          elif(maxloopNum > MAX_LOOP_NUM):             sys.exit(0)   def sendAT_Cmd(serInstance,atCmdStr,waitforOk):     print("Command: %s"%atCmdStr)     serInstance.write(atCmdStr.encode(\'utf-8\'))     #or define b\'string\',bytes should be used not str     if(waitforOk == 1):         waitForCmdOKRsp()     else:         waitForCmdRsp()  ser = serial.Serial("COM5",9600,timeout=30) sendAT_Cmd(ser,\'AT+CFUN=1\\r\',1) ser.close()

綜合上面的兩個代碼,能自動檢測串口,并連接此串口,收集串口的數(shù)據(jù)

# !usr/bin/python3.6  import serial import sys import os import time import re  import serial.tools.list_ports  global MAX_LOOP_NUM global newCmd  MAX_LOOP_NUM = 10   def waitForCmdOKRsp():     maxloopNum = 0      while True:          line = ser.readline()                              #讀取一行數(shù)據(jù)         maxloopNum = maxloopNum + 1                        #計(jì)算讀取長度          try:             print("Rsponse : %s" % line.decode(\'utf-8\'))  #串口接收到數(shù)據(jù),然后顯示         except:             pass          if (re.search(b\'OK\', line)):             break         elif (maxloopNum > MAX_LOOP_NUM):             sys.exit(0)   def sendAT_Cmd(serInstance, atCmdStr, waitforOk):    # print("Command: %s" % atCmdStr)     serInstance.write(atCmdStr.encode(\'utf-8\'))   # atCmdStr  波特率     # or define b\'string\',bytes should be used not str      if (waitforOk == 1):         waitForCmdOKRsp()     else:         waitForCmdRsp()   plist = list(serial.tools.list_ports.comports())  if len(plist) <= 0:     print("沒有發(fā)現(xiàn)端口!") else:     plist_0 = list(plist[0])     serialName = plist_0[0]       #先自動檢測串口, 檢測到可用串口,取出串口名  #ser = serial.Serial("COM6", 115200, timeout=30) ser = serial.Serial(serialName, 115200, timeout=30)  # timeout=30 30s print("可用端口名>>>", ser.name) sendAT_Cmd(ser, \'AT+CFUN=1\\r\', 1) ser.close() 

運(yùn)行效果:

我用CC2530(Zigbee),采集了溫度、濕度的數(shù)據(jù),通過串口和電腦連接,運(yùn)行此程序后,能自動檢測到串口,然后獲取 CC2530的數(shù)據(jù),然后顯示在電腦端。

希望對你有幫助。


本文標(biāo)題:基于pyserial【Python串口通信】
分享鏈接:http://weahome.cn/article/checgi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部