安卓设备通过串口与windows通讯(简易版)

845 阅读1分钟
背景

笔者最近有个需求,涉及到安卓设备串口通讯的。但是串口设备可能还需要一段时间才能使用,急切需要一个方式可以调试。于是就想到了使用电脑(windows)与安卓设备互通。本文只介绍到通讯成功。

效果图:

image.png

安卓设备上:

image.png

设备

设备连接比较奇怪:安卓连一个type-c转串口(母口),windows连usb转串口(公口),然后把他们接起来即可。

安卓端

写个应用去显示串口,网上有很多的教程,这里我后面会写更复杂的功能的,这里先调通再说。所以就选择的了最简单的方式,google play下载了一个现成的————可以直接用。

image.png 下载,安装,打开。 然后点设置里,可以设置一下波特率什么的:

image.png 然后点device,就自动连接上了。

PC端

PC端有垃圾的方案和优秀的方案

PC端垃圾方案

发送很简单可以进行测试: 可以使用mode命令查看当前可用的端口啥的:

image.png 其实串口就是映射的文件,所以直接写入就可以了: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命令执行即可。会依次让你输入串口号和波特率:

image.png 然后就大功告成了,效果见文章开头的图。