不管怎樣,為了簡便開發,通信選擇串口通信。
推薦文章:https://blog.csdn.net/magnetoooo/article/details/53564797
推薦測試工具:https://blog.csdn.net/u011625775/article/details/99681560(這個發送數據好像有點問題?)
采用的方案是python的pyserial。
pip insatll pyserial
查找可用端口
硬件連接:stm32使用ch340g的串口輸出,接入到樹莓派的USB口上。
通過如下代碼查找端口,通過拔插觀察實際端口。一般來說,是一個ttyUSB的標號
python3 -m serial.tools.list_ports
最簡測試代碼
進入python3環境后,該代碼實現了讀取數據(這里stm32端一直在發送數據,接收到數據表示正常)
發送數據通過dev.write即可,但是需要發送編碼數據如:b'\xd5\xbd\xbd\xa2STM32\xbf\xaa\xb7\xa2\xb0\xe5(什么什么的)
import serial
dev=serial.Serial('/dev/ttyUSB1',115200,timeout=0.5)
dev.readlines()
最后可以用剛開始提供的測試工具直接測試
提供一段測試代碼
使用的時候,注意修改COM4為指定的端口即可。這里開了兩個線程,進行數據測試。
額外參閱:https://blog.csdn.net/grubberbin/article/details/96476672
import serial
import time
import threading
global ser
def thread_recv():
global ser
while True:
read = ser.readall()
if len(read) > 0:
print(read)
def thread_send():
global ser
while True:
ser.write('AT+POWER_OFF\r\n'.encode())
#print(ser.readline())
time.sleep(10)
def usart_ctrl():
global ser
ser=serial.Serial("COM4",115200,timeout=0.5)
recv_data = threading.Thread(target=thread_recv)
send_data = threading.Thread(target=thread_send)
recv_data.start()
send_data.start()
usart_ctrl()
附解碼示例代碼
import chardet
s = b'\r\n\xd5\xbd\xbd\xa2STM32\xbf\xaa\xb7\xa2\xb0\xe5 \xb4\xae\xbf\xda\xca\xb5\xd1\xe9\r\n\xd5\xfd\xb5\xe3\xd4\xad\xd7\xd3@ALIENTEK\r\n\r\nplease input the message for communication test..\r\n'
print(chardet.detect(s))
print(s.decode('GB2312'))
str = b'\xe5\xae\x9d\xe9\xb8\xa1\xe5\xb8\x82'
print(str.decode('utf-8'))
