Python的擴充介面[1] -> 串口通訊

來源:互聯網
上載者:User

標籤:檢測   type   manual   mina   value   str   長度   配置參數   result   

串口通訊 / Serial Communication

 

1 串口簡介 / Serial Introduction

串列介面(Serial Interface)簡稱串口,通常為COM介面,資料發送方式為一位一位地順序傳送,通訊線路簡單,一對傳輸線即可實現雙向通訊,適用於遠距離且傳輸速度慢的通訊。其中最常用的也是標準介面為RS-232,除此之外還有RS-422,RS-485等。

 

2 pyserial環境搭建

Pyserial的安裝可以通過pip進行,直接在命令列輸入下列命令進行安裝,

pip install pyserial

 

3 pyserial基本用法

利用pyserial可以實現Python對串口的控制,其基本使用方式十分簡單,主要為一下幾步,

       1. 利用Serial類傳入配置參數,產生串口執行個體;

       2. 利用串口執行個體的write()/read()方法訊息的發送與接收。

Note: 關於Serial類,主要參數為連接埠和傳輸速率,更多參數可查看原始碼。

 1 import serial 2  3 ser = serial.Serial(port=‘com1‘, baudrate=9600) 4 print(ser.portstr) 5  6 def serial_communi(ser, msg): 7     # n is the length of msg sent 8     n = ser.write(msg.encode()) 9     print(n)10     s = ser.read(n)11     print(s)

 

4 read_until 方法的實現與擴充
在pyserial中,read_until 方法只能處理一個終止符,而當需要處理多個終止標誌的時候,則需要重新定義一個新的方法,參考 pyserial 原始碼中的 read_until 函數,其實現方式為:

  1. 每次讀取一個字元,加入待返回字串
  2. 根據終止符長度n,擷取字元中後 n 位字元,檢測是否為終止符

下面的代碼供參考,

 1     def _read_until(self): 2         line = ‘‘ 3         while True: 4             try: 5                 c = self.read(1) 6             except ( 7                     AttributeError, TypeError,          # COM Exception 8                     ValueError, EOFError,               # TELNET Exception 9                     self._connection.OpenCloseException) as e:10                 # Above Exception happens when communication manually closed,11                 # if still should run, condition sleep here,12                 # else return None to exit thread13                 if self.should_run:14                     self._cond_wait(self._recv_cond)15                     continue16                 else:17                     return None18             if c:19                 line += c20                 self._result.put(c)21                 tokens = [self._term_token, self._abort_token, self._cr_token, self._lf_token]22                 for token in tokens:23                     if not line[-len(token):] == token:24                         continue25                     if token == self._cr_token or token == self._lf_token:26                         return line27                     if token == self._term_token:28                         self.waiter_wake_up()29                         self.termi_signal(True)30                         self._result.save(strip=self._term_token)31                         self.logger.debug("TERMINATE %s" % self._term_token)32                         return line33                     if token == self._abort_token:34                         # TODO: handle this abort token encountered35                         self.logger.debug("ABORT %s" % self._abort_token)36                         pass37             # When timeout will enter this else38             # else:39             #     return line

 

Python的擴充介面[1] -> 串口通訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.