不管怎样,为了简便开发,通信选择串口通信。
推荐文章: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'))