揭秘树莓派串口收发数据全攻略,轻松实现设备间智能互联

2026-07-01 0 阅读

树莓派因其强大的性能和低廉的价格,成为了众多DIY爱好者和开发者的宠儿。在智能硬件领域,树莓派的应用更是无处不在。而串口通信,作为设备间数据传输的一种方式,也在树莓派项目中扮演着重要角色。本文将为你详细解析树莓派串口收发数据的方法,让你轻松实现设备间的智能互联。

一、树莓派串口通信基础

1.1 串口概述

串口,即串行通信接口,是一种用于设备间数据传输的通信方式。在树莓派中,串口通信主要通过GPIO(通用输入输出)引脚实现。

1.2 树莓派串口引脚

树莓派3B+和树莓派4B的串口引脚如下:

  • 树莓派3B+:GPIO14(TXD)、GPIO15(RXD)
  • 树莓派4B:GPIO14(TXD)、GPIO15(RXD)

二、树莓派串口通信配置

2.1 设置串口模式

在树莓派上,我们需要将GPIO引脚设置为串口模式。以下是在Linux环境下设置GPIO引脚为串口模式的命令:

sudo echo "GPIO14" > /sys/class/gpio/export
sudo echo "GPIO15" > /sys/class/gpio/export
sudo echo "in" > /sys/class/gpio/gpio14/direction
sudo echo "in" > /sys/class/gpio/gpio15/direction

2.2 安装串口驱动

树莓派默认的Linux内核已经包含了串口驱动,无需额外安装。但在某些情况下,你可能需要手动安装串口驱动。以下是在Linux环境下安装串口驱动的命令:

sudo apt-get install minicom

三、树莓派串口通信编程

3.1 Python编程

在Python中,我们可以使用pyserial库实现树莓派串口通信。以下是一个简单的示例代码:

import serial

# 创建串口对象
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)

# 发送数据
ser.write(b'Hello, world!')

# 接收数据
data = ser.read(10)
print(data.decode())

# 关闭串口
ser.close()

3.2 C/C++编程

在C/C++中,我们可以使用termios库实现树莓派串口通信。以下是一个简单的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    int serial_port = open("/dev/ttyAMA0", O_RDWR);

    if (serial_port < 0) {
        perror("open");
        exit(1);
    }

    struct termios tty;

    if(tcgetattr(serial_port, &tty) != 0) {
        perror("tcgetattr");
        exit(1);
    }

    tty.c_cflag &= ~PARENB; // Clear parity bit, disabling parity (most common)
    tty.c_cflag &= ~CSTOPB; // Clear stop field, only one stop bit used in communication (most common)
    tty.c_cflag &= ~CSIZE; // Clear all the size bits, then use one of the statements below
    tty.c_cflag |= CS8; // 8 bits per byte (most common)
    tty.c_cflag &= ~CRTSCTS; // Disable RTS/CTS hardware flow control (most common)
    tty.c_cflag |= CREAD | CLOCAL; // Turn on READ & ignore ctrl lines (CLOCAL = 1)

    tty.c_lflag &= ~ICANON; // Disable canonical mode
    tty.c_lflag &= ~ECHO; // Disable echo
    tty.c_lflag &= ~ECHOE; // Disable erasure
    tty.c_lflag &= ~ECHONL; // Disable new-line echo
    tty.c_lflag &= ~ISIG; // Disable interpretation of INTR, QUIT and SUSP

    tty.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl
    tty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL); // Disable any special handling of received bytes

    tty.c_oflag &= ~OPOST; // Prevent special interpretation of output bytes (e.g. newline chars)
    tty.c_oflag &= ~ONLCR; // Prevent conversion of newline to carriage return/line feed

    tty.c_cc[VTIME]    = 10;    // Wait for up to 1s (10 deciseconds), returning as soon as any data is received.
    tty.c_cc[VMIN]     = 0;

    if (tcsetattr(serial_port, TCSANOW, &tty) != 0) {
        perror("tcsetattr");
        exit(1);
    }

    char buffer[256];
    int n = read(serial_port, buffer, 256);

    if (n > 0) {
        printf("Read %d bytes: %s\n", n, buffer);
    }

    close(serial_port);
    return 0;
}

四、树莓派串口通信应用实例

4.1 远程控制舵机

通过树莓派串口通信,我们可以实现远程控制舵机。以下是一个简单的示例:

  1. 将舵机连接到树莓派的GPIO引脚;
  2. 编写Python代码,通过串口发送舵机控制指令;
  3. 在另一台计算机上运行舵机控制软件,接收树莓派发送的指令并控制舵机动作。

4.2 数据采集与传输

通过树莓派串口通信,我们可以实现数据采集与传输。以下是一个简单的示例:

  1. 将传感器连接到树莓派的GPIO引脚;
  2. 编写Python代码,通过串口读取传感器数据;
  3. 将传感器数据发送到远程服务器或设备。

五、总结

本文详细介绍了树莓派串口通信的原理、配置和编程方法,并通过实例展示了树莓派串口通信的应用。希望本文能帮助你轻松实现设备间的智能互联。

分享到: