W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你想通過(guò)串行端口讀寫數(shù)據(jù),典型場(chǎng)景就是和一些硬件設(shè)備打交道(比如一個(gè)機(jī)器人或傳感器)。
盡管你可以通過(guò)使用Python內(nèi)置的I/O模塊來(lái)完成這個(gè)任務(wù),但對(duì)于串行通信最好的選擇是使用pySerial包 [http://pyserial.sourceforge.net/] 。這個(gè)包的使用非常簡(jiǎn)單,先安裝pySerial,使用類似下面這樣的代碼就能很容易的打開一個(gè)串行端口:
import serial
ser = serial.Serial('/dev/tty.usbmodem641', # Device name varies
baudrate=9600,
bytesize=8,
parity='N',
stopbits=1)
設(shè)備名對(duì)于不同的設(shè)備和操作系統(tǒng)是不一樣的。比如,在Windows系統(tǒng)上,你可以使用0, 1等表示的一個(gè)設(shè)備來(lái)打開通信端口”COM0”和”COM1”。一旦端口打開,那就可以使用 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
模塊也是非常有用的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: