python3 讀取串口數據 demo
最近在寫一個demo,zigbee串口連接樹莓派,樹莓派使用串口通信接受zigbee穿過來得值。其中我是用的樹莓派是3代B+,zigbee每隔三秒鍾從串口輸出數據。
下面是python串口通信,但是不是linux的,是我在windows上寫的測試demo,python版本是3。
python串口讀取數據
# TODO 串口讀取數據
# Auther wjw
import serial # 導入串口包
import time # 導入時間包
ser = serial.Serial("COM3",115200,timeout = 5) # 開啟com3口,波特率115200,超時5
ser.flushInput() # 清空緩沖區
def main():
while True:
count = ser.inWaiting() # 獲取串口緩沖區數據
if count !=0 :
recv = ser.read(ser.in_waiting).decode("gbk") # 讀出串口數據,數據采用gbk編碼
print(time.time()," --- recv --> ", recv) # 打印一下子
time.sleep(0.1) # 延時0.1秒,免得CPU出問題
if __name__ == '__main__':
main()
上邊的代碼就已經實現python串口讀數了,但大部分還需要寫入。
串口寫入數據
其實就是一個write方法,我開了一個線程,在線程里獲取串口出來的數據,然后一個死循環每隔一秒發1,每隔一秒發0.
import serial
import time
import _thread # 導入線程包
data_ser = serial.Serial("COM3",115200,timeout = 5)
data_ser.flushInput()
def get_data():
while True:
data_count = data_ser.inWaiting()
if data_count !=0 :
recv = data_ser.read(data_ser.in_waiting).decode("gbk")
print(time.time()," --- data_recv --> ", recv)
time.sleep(0.1)
if __name__ == '__main__':
_thread.start_new_thread(get_data,()) # 開啟線程,執行get_data方法
while 1:
time.sleep(20)
data_ser.write(b'1') # 發送二進制1
time.sleep(20)
data_ser.write(b'0') # 發送二進制0
完成了,應該差不多就這樣!
樹莓派自帶python,但是默認是python2,可以兩行命令修改默認python3,命令在我之前的博客。