《Python Cookbook 3rd》笔记(5.20):与串行端口的数据通信
與串行端口的數(shù)據(jù)通信
問(wèn)題
你想通過(guò)串行端口讀寫數(shù)據(jù),典型場(chǎng)景就是和一些硬件設(shè)備打交道 (比如一個(gè)機(jī)器人或傳感器)。
解法
盡管你可以通過(guò)使用 Python 內(nèi)置的 I/O 模塊來(lái)完成這個(gè)任務(wù),但對(duì)于串行通信最好的選擇是使用 pySerial 包 。這個(gè)包的使用非常簡(jiǎn)單,先安裝 pySerial,使用類似下面這樣的代碼就能很容易的打開(kāi)一個(gè)串行端口:
import serial ser = serial.Serial('/dev/tty.usbmodem641', # Device name variesbaudrate=9600,bytesize=8,parity='N',stopbits=1)設(shè)備名對(duì)于不同的設(shè)備和操作系統(tǒng)是不一樣的。比如,在 Windows 系統(tǒng)上,你可以使用 0, 1 等表示的一個(gè)設(shè)備來(lái)打開(kāi)通信端口”COM0” 和”COM1”。一旦端口打開(kāi),那就可以使用 read(), readline() 和 write() 函數(shù)讀寫數(shù)據(jù)了。例如:
ser.write(b'G1 X50 Y50\r\n') resp = ser.readline()大多數(shù)情況下,簡(jiǎn)單的串口通信從此變得十分簡(jiǎn)單。
討論
盡管表面上看起來(lái)很簡(jiǎn)單,其實(shí)串口通信有時(shí)候也是挺麻煩的。推薦你使用第三方包如 pySerial 的一個(gè)原因是它提供了對(duì)高級(jí)特性的支持 (比如超時(shí),控制流,緩沖區(qū)刷新,握手協(xié)議等等)。舉個(gè)例子,如果你想啟用 RTS-CTS 握手協(xié)議,你只需要給Serial() 傳遞一個(gè) rtscts=True 的參數(shù)即可。其官方文檔非常完善,因此我在這里極力推薦這個(gè)包。
時(shí)刻記住所有涉及到串口的 I/O 都是二進(jìn)制模式的。因此,確保你的代碼使用的是字節(jié)而不是文本 (或有時(shí)候執(zhí)行文本的編碼/解碼操作)。另外當(dāng)你需要?jiǎng)?chuàng)建二進(jìn)制編碼的指令或數(shù)據(jù)包的時(shí)候, struct 模塊也是非常有用的。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的《Python Cookbook 3rd》笔记(5.20):与串行端口的数据通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《Python Cookbook 3rd
- 下一篇: 推荐算法--推荐系统冷启动问题(03)