python3 讀取串口數據


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,命令在我之前的博客。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM