H743发送串口程序

首先pixhawk 4上面有四个串口,一个给了GPS,一个是TELEM1 一个是TELEM2 ,根据PX4用户指南,一般TELEM1插wifi数传,TELEM2插板载计算机。

插wifi数传和插板载计算机所用的串口实际都是传mavlink消息,所以telem1口和telem2口都是设置的MAV参数

添加串口传感器,比如tfmini这种串口的传感器,就只剩下UART&I2C B(飞控板上打印的是这个)这个串口了,也叫TELEM4

查看H743板上串口说明:

与GPS连线:+5V,GND,R2,T2

与罗盘连线:SCL CL1,SDA DA1

与数传连线:+5V,GND,RX6,TX6

禁用串口1(USART1)

通过QGC验证串口的有效发送PC(ttyS3)

打印Hello,UART!

RDX X5发送串口程序

通过USBA进行串口转接

  • 运行 python3 /app/40pin_samples/test_serial.py
  • 从打印的串口设备(其中 /dev/ttyS0 是系统调试口,不建议对它进行测试,除非你完全明白它的作用)中选择总线号和片选号作为输入选项,例如 RDK X3 选择测试 /dev/ttyS3,RDK X5 选择测试 /dev/ttyS1,RDK Ultra 选择测试 /dev/ttyS2 按回车键确认,并输入波特率参数:(新建的ttyUSB*)

通信

RDK5未插入USB前:

RDK5插入USB串口后:

编写USB0发送代码程序,波特率为57600,并设置为开机自启。

RDK5发送程序:

\#!/usr/bin/env python3

import sys

import signal

import os

import time

import serial

def signal_handler(signal, frame):

sys.exit(0)

def serialTest():

uart_dev = '/dev/ttyUSB0' # 硬编码为串口设备 /dev/ttyUSB0

baudrate = 57600 # 硬编码波特率为57600

print(f"Attempting to open serial port {uart_dev} with baud rate {baudrate}")

try:

​ ser = serial.Serial(uart_dev, baudrate, timeout=1) # 1秒超时

except serial.SerialException as e:

print(f"Failed to open serial port {uart_dev}: {e}")

return -1 # 打开串口失败

print(f"Serial port {uart_dev} opened successfully")

print("Starting demo now! Press CTRL+C to exit")

while True:

​ test_data = "AA55" # 要发送的数据

try:

​ write_num = ser.write(test_data.encode('UTF-8')) # 发送数据

print("Send:", test_data)

​ \# 读取返回的数据

​ received_data = ser.read(write_num).decode('UTF-8')

print("Recv:", received_data)

except serial.SerialException as e:

print(f"Serial communication error: {e}")

break

​ time.sleep(1) # 每隔1秒发送一次

ser.close() # 关闭串口

return 0

if __name__ == '__main__':

signal.signal(signal.SIGINT, signal_handler) # 设置Ctrl+C退出时的处理函数

if serialTest() != 0:

print("Serial test failed!")

else:

print("Serial test success!")

开机自启动设置:

步骤 1:安装 cron

  1. 更新包列表:

    sudo apt update
  2. 安装 cron 包:

    sudo apt install cron

步骤 2:启动 cron 服务

安装完 cron 后,您需要确保 cron 服务正在运行:

  1. 启动并启用 cron 服务:

    sudo systemctl start cron
    sudo systemctl enable cron
  2. 检查 cron 服务状态:

    sudo systemctl status cron

    如果服务启动正常,您应该看到类似以下的输出:

    ● cron.service - Regular background program processing daemon
    Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
    Active: active (running) since ...
    ...

步骤 3:再次编辑 crontab

现在,您应该能够使用 crontab 命令了:

  1. 以 root 用户身份编辑 crontab:

    sudo crontab -e
  2. 然后按照之前的步骤,在 crontab 文件中添加:

    @reboot /usr/bin/python3 /app/40pin_samples/my_serial.py
  3. 保存并退出编辑器。

步骤 4:验证是否生效

重新启动您的机器:

sudo reboot

在系统重新启动后,您的脚本应该会自动运行。如果需要查看 cron 的执行日志,可以检查系统日志:

sudo journalctl -u cron

这样,您的脚本就应该会在系统启动时自动执行了。

步骤 1:确认脚本是否在 cron 作业中执行

首先,确认 cron 作业是否确实执行了您的脚本,您可以在 cron 作业中添加调试输出,帮助确认是否进入了执行阶段。

  1. 修改 cron 作业,添加调试信息:

    打开 crontab 编辑器并修改您的作业,在日志文件中添加更多的调试信息:

    bash

    sudo crontab -e

    @reboot 作业修改为以下内容:

    bash
    @reboot echo "Cron job started at $(date)" >> /var/log/my_serial.log
    @reboot /usr/bin/python3 /app/40pin_samples/my_serial.py >> /var/log/my_serial.log 2>&1

    这会在每次重启后将当前时间(通过 $(date) 获取)添加到日志文件中,帮助您确认是否执行了 cron 作业。

  2. 保存并退出 crontab 编辑器

  3. 重新启动系统

    执行以下命令重启系统并触发 @reboot 作业:

    bash
    sudo reboot
  4. 查看日志文件

    bash
    sudo cat /var/log/my_serial.log

    如果 cron 作业执行了,您应该能看到类似以下的内容:

    text
    Cron job started at Wed Jan 9 17:17:01 UTC 2025