当前位置:首页 > 问答 > 正文

串口通信 Linux系统 ubuntu串口,Ubuntu串口通信:实现简单高效的数据交互

Ubuntu串口通信:实现简单高效的数据交互

场景引入:当硬件遇上Linux

想象一下,你正在捣鼓一个树莓派项目,需要通过串口连接传感器或单片机,或者你在调试一台嵌入式设备,得用串口查看日志,这时候,Ubuntu系统下的串口通信就成了关键技能,别担心,今天我们就来聊聊如何在Ubuntu上玩转串口通信,从基础配置到代码实现,一步步搞定!


串口通信基础

什么是串口?

串口(Serial Port)是一种古老但依然广泛使用的通信接口,通过RX(接收)TX(发送)两根线实现设备间的数据传输,虽然速度比不上USB或网络,但胜在简单可靠,尤其在嵌入式开发、工业控制等领域不可或缺。

常见的串口类型:

  • UART:最基础的异步串口,比如树莓派的GPIO串口。
  • RS-232:老式电脑的9针串口(现在很少见)。
  • USB转串口:通过USB模拟串口(比如CH340、CP2102芯片)。

Ubuntu下的串口配置

1 检查串口设备

插上USB转串口模块后,在终端输入:

ls /dev/tty*

你会看到类似/dev/ttyUSB0/dev/ttyACM0的设备文件,这就是你的串口。

串口通信 Linux系统 ubuntu串口,Ubuntu串口通信:实现简单高效的数据交互

2 设置权限

默认情况下,普通用户可能无法直接访问串口,需要添加权限:

sudo chmod 666 /dev/ttyUSB0  # 临时生效

或者将用户加入dialout组(永久生效):

sudo usermod -aG dialout $USER

记得注销重新登录!

3 安装调试工具

推荐用minicomscreen快速测试串口:

串口通信 Linux系统 ubuntu串口,Ubuntu串口通信:实现简单高效的数据交互

sudo apt install minicom
minicom -D /dev/ttyUSB0 -b 9600  # 波特率按需调整

Ctrl+A,再按X退出。


Python实现串口通信

Python的pyserial库是串口通信的神器,先安装:

pip install pyserial

示例1:发送数据

import serial
# 打开串口
ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, timeout=1)
# 发送字符串
ser.write(b"Hello, Serial!\n")
# 关闭串口
ser.close()

示例2:接收数据

import serial
ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, timeout=1)
while True:
    if ser.in_waiting > 0:
        data = ser.readline().decode('utf-8').strip()
        print(f"Received: {data}")
ser.close()

C语言实现(可选)

如果你更习惯C,可以用termios库:

#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
int main() {
    int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);
    struct termios options;
    tcgetattr(fd, &options);
    cfsetispeed(&options, B9600);  // 输入波特率
    cfsetospeed(&options, B9600);  // 输出波特率
    options.c_cflag |= (CLOCAL | CREAD);
    tcsetattr(fd, TCSANOW, &options);
    write(fd, "Hello from C!\n", 14);
    close(fd);
    return 0;
}

编译运行:

串口通信 Linux系统 ubuntu串口,Ubuntu串口通信:实现简单高效的数据交互

gcc serial_example.c -o serial
./serial

常见问题排查

Q1:找不到/dev/ttyUSB0

  • 确认设备已连接,尝试dmesg | grep tty查看内核日志。
  • 检查驱动是否安装(如CH340驱动:sudo apt install ch340)。

Q2:数据乱码?

  • 检查波特率、数据位、停止位是否匹配(常用8N1:8数据位、无校验、1停止位)。
  • 确保接地稳定,避免信号干扰。

Q3:权限反复丢失?

  • 创建udev规则,参考【2025-07】社区建议:
    echo 'KERNEL=="ttyUSB*", MODE="0666"' | sudo tee /etc/udev/rules.d/50-serial.rules
    sudo udevadm control --reload

串口通信在Linux下并不复杂,关键是设备权限参数配置稳定的连接,无论是用Python快速原型开发,还是C语言追求性能,Ubuntu都能完美胜任,下次遇到硬件调试,不妨试试这些方法吧!

发表评论