亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

树莓派 4 与 HiFive1 建立 UART 通信实验指南

本实验将建立树莓派 4 与 HiFive1 间可靠 UART 连接,编程 HiFive1 回显接收数据,并编写树莓派 Python 脚本转发转向角度至开发板。

第 0 部分:在树莓派 4 上启用 UART

树莓派 4 内置四个 UART 控制器。本实验使用 uart2 与 uart3。向 /boot/config.txt 添加以下行并重启:

dtoverlay=uart2,115200
dtoverlay=uart3,115200

重启后,设备节点 /dev/ttyAMA1 (uart2) 与 /dev/ttyAMA2 (uart3) 将可用。

按以下方式连接两板:

树莓派端通过 /dev/ttyAMA1 发送至 HiFive1,通过 /dev/ttyAMA2 接收 HiFive1 控制台输出。

第 1 部分:编程 HiFive1

在 PC (非树莓派) 下载骨架项目:

$ cd ~/Documents/PlatformIO
$ wget https://ittc.ku.edu/~heechul/courses/eecs388/l10-comm.tar.gz
$ tar zxvf l10-comm.tar.gz

将 l10-interrupt 文件夹加入 VSCode 工作区。目标:从 UART1 读数据、在 UART0 回显、并打印至控制台。

简明算法:

while (1) {
    if (ser_isready(1)) {
        char data = ser_read(1);
        ser_write(0, data);
        ser_printline(0, "Received: ");
        /* 按需调整格式 */
    }
}

串口 API 定义于 eecs388_lib.h/c:

void ser_setup(int devid);
int ser_isready(int devid);
void ser_write(int devid, char c);
void ser_printline(int devid, char *str);
char ser_read(int devid);
int ser_readline(int devid, int n, char *str);

注意 devid = 0 选 UART0,devid = 1 选 UART1。ser_isready 检查 UART IP 寄存器是否有待读数据:

int ser_isready(int devid) {
    uint32_t regval = *(volatile uint32_t *)(UART_ADDR(devid) + UART_IP);
    return regval;
}

编译烧录后,切换至树莓派打开两个终端:

在发送端终端输入任意字符串;调试终端应显示相同字符串,确认通信正常。

第 2 部分:树莓派 4 Python 脚本

替代手动终端,编写 Python 程序:

使用 pySerial 的骨架示例:

import serial
import time
import cv2  # 或您的摄像头接口
# 打开串口
ser1 = serial.Serial('/dev/ttyAMA1', 115200, timeout=1)
ser2 = serial.Serial('/dev/ttyAMA2', 115200, timeout=1)
while True:
    # 捕获帧
    frame = cv2.imread('frame.jpg')  # 替换为实际摄像头读取
    # DNN 推理
    angle = dnn_inference(frame)  # float32
    # float 转 4 字节
    angle_bytes = angle.to_bytes(4, byteorder='little', signed=True)
    ser1.write(angle_bytes)
    # 可选:读取调试输出
    debug = ser2.readline().decode().strip()
    if debug:
        print('HiFive1:', debug)
    # 定时控制 (如 30 fps)
    time.sleep(1/30)
# 清理
ser1.close()
ser2.close()

注意:发送前将 float 转字节,HiFive1 解析时用相同字节序。

附录:树莓派 4 GPIO 与外设概览

树莓派 4 扩展了 I²C、SPI 与 UART 接口。用 pinout 命令查看所有引脚:

pinout

关键外设:

详细配置请参阅官方树莓派文档:Config-txt 指南。

制造工艺

  1. NodeMCU DHT22接入树莓派3B+ MQTT Broker:无缝物联网集成指南
  2. 树莓派传感器数据融合实战:GPS 与 MPU‑9150 IMU 的 I²C 与 UART 接入
  3. Arduino 与树莓派 2 I2C 通信集成:打造物联网传感器项目的最佳搭档
  4. M2M(机器对机器)通信:定义、原理与价值
  5. 数字通信基础:从理论到实际实现
  6. 理解数据流:从单工到全双工通信
  7. 光数据通信:利用光实现高带宽、无干扰传输
  8. 确定性与容错性:工业控制网络的核心设计原则
  9. 超宽带(UWB)技术:面向高速、安全短距连接的现代无线标准
  10. 精通 UART:通用异步收发器详解
  11. 革命性紧凑光放大器:无噪声太空与光纤通信新希望
  12. 掌握无线通信距离:功率、速率与干扰如何塑造连接能力