背景
笔者最近有个需求,涉及到安卓设备串口通讯的。但是串口设备可能还需要一段时间才能使用,急切需要一个方式可以调试。于是就想到了使用电脑(windows)与安卓设备互通。本文只介绍到通讯成功。
效果图:
安卓设备上:
设备
设备连接比较奇怪:安卓连一个type-c转串口(母口),windows连usb转串口(公口),然后把他们接起来即可。
安卓端
写个应用去显示串口,网上有很多的教程,这里我后面会写更复杂的功能的,这里先调通再说。所以就选择的了最简单的方式,google play下载了一个现成的————可以直接用。
下载,安装,打开。
然后点设置里,可以设置一下波特率什么的:
然后点device,就自动连接上了。
PC端
PC端有垃圾的方案和优秀的方案
PC端垃圾方案
发送很简单可以进行测试: 可以使用mode命令查看当前可用的端口啥的:
其实串口就是映射的文件,所以直接写入就可以了:
echo 'hello jim' > COM3,这样在移动端就可以读取到了。但是这有个问题,它会占用这个端口,别的进程就不能操作了。读取也是一样的,使用命令more < COM3即可。但是这个不光会占用端口,还会有时候读不到。有知道为啥的懂个麻烦在评论区告诉我。
PC端优秀方案
我们要实现一个操作,什么最方便?当然是python了。弄个python脚本,直接运行,不就完事了?
import threading
def receive_serial_data(serial_port):
while True:
try:
# 从串口读取数据
data = serial_port.readline().strip()
if data:
print("收到数据:", data)
except KeyboardInterrupt:
break
def send_serial_data(serial_port):
while True:
try:
# 获取用户输入并发送数据到串口
user_input = input("请输入要发送的数据(输入'exit'退出发送):")
if user_input.lower() == 'exit':
break
else:
serial_port.write(user_input.encode()) # 将输入的数据转换为字节并发送
except KeyboardInterrupt:
break
if __name__ == "__main__":
PORT = str(input("输入连接串口号:"))
baud_rate = int(input("波特率:"))
serialFd = serial.Serial(PORT, baud_rate, timeout=6, bytesize=8, parity='N', stopbits=1)
print("check which port was really used >", serialFd.name)
# 创建两个线程,分别用于接收和发送数据
receive_thread = threading.Thread(target=receive_serial_data, args=(serialFd,))
send_thread = threading.Thread(target=send_serial_data, args=(serialFd,))
# 启动线程
receive_thread.start()
send_thread.start()
# 等待线程完成
receive_thread.join()
send_thread.join()
# 关闭串口连接
serialFd.close()
上面就是贴的代码,直接用python命令执行即可。会依次让你输入串口号和波特率:
然后就大功告成了,效果见文章开头的图。