樹莓派 pypi UART串列埠

2021-08-11 02:20:18 字數 2699 閱讀 4986

樹莓派在linux上層支援通用的串列埠介面,用linux上通用的串列埠程式設計即可操作。

樹莓派3b的板載串列埠被藍芽占用,但可以方便地使用usb串列埠模組。

樹莓派的板載串列埠是給系統登入使用的,我們要先把這個功能關掉。

sudo raspi-config

advanced options –> serial –> 關閉串列埠 –> 重啟

樹莓派上有兩個串列埠,乙個硬體串列埠,工作穩定,但是分配給了藍芽;還有乙個「mini-uart」,這個串列埠的時鐘是由核心提供,所以不太穩定 。 在樹莓派3b上,藍芽和硬體串列埠是不能兼得的。

這個鏈結(有介紹如何把硬體串列埠分配到gpio14、gpio15上,這裡不做介紹了。

總之,在樹莓派3b上,想要使用板載硬體串列埠是比較麻煩的,我們這裡使用的是usb轉串列埠模組,也能很方便地使用串列埠。

pypi庫沒有提供串列埠操作函式,我們使用串列埠的思路是通過linux上層通用的串列埠介面。

這裡介紹的是第三方庫 pyserial 的安裝和使用。

ubuntu、mac和樹莓派上,只要安裝了python都可以用此方法操作串列埠。

官網:github主頁:

1、從github clone**

git clone [email protected]:pyserial/pyserial.git

2、進入安裝目錄安裝

sudo python3 setup.py install

(在mac下安裝不用sudo許可權也行)

3、python3中import模組

import serial

如果沒有安裝成功的話 import 會報錯。

首先要 import serial

1、開啟串列埠並建立物件

[串列埠物件] = serial.serial(『[串列埠裝置檔案]』,

baudrate=[波特率],

bytesize=[資料位],

parity=』[校驗]』,

stopbits=[停止位],

timeout=[timeout])

例1,指明所有引數:

ser = serial.serial(『/dev/ttyusb1』,

baudrate=9600,

bytesize=8,

parity=』n』,

stopbits=1,

timeout=3)

例2,只指定某些引數:

ser = serial.serial(『/dev/ttyusb1』, 9600, timeout=3)

2、緩衝區操作

python對串列埠接收資料和微控制器有所不同。

微控制器接收到資料後會產生中斷,然後在中斷中處理資料。

python是不會產生串列埠中斷的,接收到的資料會存放在緩衝區,然後python程式主動檢查緩衝區讀取資料。讀取資料方法也有多種。

每次新開啟乙個串列埠,之前的緩衝區就會被清空。

緩衝區有輸入緩衝區和輸出緩衝區。

緩衝區的大小是:

[串列埠物件].flushinput()

清除接收緩衝區,放棄接收到的所有內容。

[串列埠物件].flushoutput()

清除傳送緩衝區,放棄輸出。

[串列埠物件].inwaiting()

【功能】獲取緩衝區裡的位元組數。

【輸出】返回乙個數值,代表緩衝區裡有多少資料。

3、波特率設定

[串列埠物件].setbaudrate([波特率])

設定已經開啟的串列埠的波特率,傳入的是數值,可以選擇:

2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200

4、從串列埠傳送資料

[串列埠物件].write([單位元組陣列])

傳送的資料必須是單位元組資料,可以是單位元組組成的list,也可以是單位元組編碼的字串(如ascii、utf-8)。   返回的是寫入的位元組數。

例1,傳送16進製制資料:

list1 = [0x01,0x02,0x03,0x10]

ser.write(list1)

會把這幾個16進製制數依次通過串列埠發出,另一端會接收到一模一樣的資料。

例2,傳送單位元組編碼的字串:

ser.write(b』abcdefg』)

把字串』abcdefg』的ascii碼發出,另一端收到:0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67。

5、從串列埠接收資料

[串列埠物件].read([長度])

【功能】從緩衝區讀取指定長度內容。

【輸入】

[長度] 是乙個數值,代表要從緩衝區讀取的位元組數。

這個引數可以省略,預設是1。

【輸出】輸出的是一連串單位元組資料。

【說明】如果緩衝區內容小於讀取的長度則會等待,直到timeout後讀取僅有的全部內容返回。

[串列埠物件].readall()

【功能】讀取緩衝區的所有資料。

【輸出】輸出的是一連串單位元組資料。

這個函式必然會等待乙個timeout時間,把之前緩衝區裡所有內容和等待階段接收到的所有內容讀出。

[串列埠物件].readline()

【功能】從緩衝區裡讀取一行。

【輸出】輸出的是一連串單位元組資料。

【說明】

讀取時會找到第乙個』\n』結束,如果緩衝區裡的資料沒有』\n』,則會等待,知道timeout後返回僅有的所有內容。

6、關閉串列埠

[串列埠物件].close()

樹莓派串列埠

串列埠使用例程及說明 pyserial api sudo apt get install python serial python m serial.tools.list ports 此命令可以檢視裝置的檔案節點。class serial.serial init port none,baudrate...

樹莓派串列埠通訊python 樹莓派串列埠通訊設定

實驗環境樹莓派 3b 開發板 2018 06 27 raspbian stretch 樹莓派作業系統 使用 windows 10 通過網線連線遠端登陸訪問方式控制樹莓派 實驗目的 為了將樹莓派構建成乙個智慧型家居的資料中心,我們需要在樹莓派上連線 zigbee 無線通訊模組,實現與感測器的一對多通訊...

樹莓派串列埠連線

樹莓派串列埠連線需要修改udev檔案,在 etc udev rules.d資料夾下建立相應串列埠連線的rules檔案,如雷射雷達ydlidar為例,串列埠線與樹莓派主機板相連,樹莓派主機板要識別出雷射雷達,我們就需要編寫rules檔案,我們lsusb命令檢視連線到樹莓派主機板上個介面的id裡以pl2...