树莓派开机自启Qt程序

转载文章:
https://blog.youkuaiyun.com/qq_20304723/article/details/82460992

2018.9.6

由于实验室项目需要处理数据并用串口进行发送,最后还要开机自启,专门鼓捣了一番。由于网上的方案随着树莓派本身版本变化而不适应,因此调试过程中也实在耗费了不少功夫。最有价值的调试方案还是官方的英文教程:Raspberry Pi 3 UART Boot Overlay Part Two,本文也是主要参照英文教程的方法进行调试,顺便附加了网上的一些其他经验。

本文分为两部分:1.树莓派串口数据发送配置(包括QT测试),2.树莓派用户程序开机自启(QT release的用户程序)


环境:

树莓派3B+ Version 2018 June(理论上Raspbian Jessie releases 2016年3月18日后的版本均适用)

Qt Creator 4.2.0 Based on Qt 5.7.1 (GCC 6.2.1 20161124, 32 bit)


串口发送数据:

首先先解释一下为什么树莓派3B+使用串口收发数据这么麻烦。树莓派内部有两个串口,

1. 硬件串口:官方称为PL011 UART,对应软件上的serials1,默认使用ttyS0,默认分配给蓝牙

2. 迷你串口:官方称为mini-uart,对应软件上的serials0,默认使用ttyAMA0,没有时钟源,必须由内核提供时钟参考源,这样以来由于内核的频率本身是变化的,就会导致“迷你串口”的速率不稳定。

因此我们希望能够稳定地使用硬件串口进行数据收发,解决思路是:使能串口,更换映射关系令serials1对应ttyAMA0,关闭硬件串口控制的蓝牙功能,将硬件串口重新恢复给GPIO的串口使用。

 

具体调试与实现步骤:

1. 串口线连接

注意引脚与图中接线,树莓派与串口连接线的RXD与TXD相互反接,树莓派GPIO中串口的管脚在p6、p8和p10(注意图中的白线和灰线)。

 

2. 开启串口功能

sudo raspi-config
   
   

 

3. 恢复串口使用并设置为通用串口

sudo nano /boot/config.txt
   
   

末尾添加

dtoverlay=pi3-miniuart-bt
   
   

 

4. 关闭串口控制台

sudo nano /boot/cmdline.txt
   
   

替换配置文件内容为

dwc_otg.lpm_enable=0  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4  elevator=deadline fsck.repair=yes   rootwait
   
   

 

5. 关闭蓝牙功能与禁用串口控制台功能

关闭蓝牙

sudo systemctl disable hciuart
   
   

禁用串口控制台(由于已经有上述步骤4,此步非必须)


   
   
  1. sudo systemctl stop serial-getty@ttyAMA0.service
  2. sudo systemctl disable serial-getty@ttyAMA0.service

 

6. 下载串口测试工具minicom

sudo apt-get install minicom
   
   

进入root模式(密码自定)

su root
   
   

对minicom串口默认启动状态进行设置

minicom –s
   
   

 

7. 查看系统串口设备状态

ls -l /dev
   
   

查看hciuart.service(有很多老版本的教程需要对此处进行修改,但是新版本其实没必要,保持默认即可,参考下图)

sudo nano /lib/systemd/system/hciuart.service
   
   

 

8. 更新和重启


   
   
  1. sudo apt-get update
  2. sudo apt- get upgrade
  3. sudo reboot

 

9. 打开minicom测试

sudo minicom -D /dev/ttyAMA0 -b115200
   
   

或者直接

sudo minicom
   
   

串口发送测试成功,接下来上QT测试。

#如果你也测试成功,感谢你的点赞或留言;如果你遇到了问题,欢迎留言与我交流探讨#

 

10. QT测试串口输出

创建新工程,Pro文件添加Pi自带的库,末尾添加

LIBS += -lwiringPi
   
   

串口发送测试代码(在mainwindow.cpp里添加即可)


   
   
  1. #include <wiringPi.h>
  2. #include <wiringSerial.h>
  3. int serialfd;
  4. if((serialfd = serialOpen( "/dev/ttyAMA0", 115200)) < 0)
  5. {
  6. fprintf( stderr, "Unable to open serial device: %s\n", strerror(errno));
  7. }
  8. serialPuts(serialfd, "Hello ChopinXBP");

测试成功!

#如果你也测试成功,感谢你的点赞或留言;如果你遇到了问题,欢迎留言与我交流探讨#


QT程序自启动:

网上很多改脚本的方法实际上不太适用,因为QT的启动过程是:自动登录->自动启动窗口->自动运行用户程序。

脚本程序可以在自动启动窗口这一步之前运行,但是用户程序是不行。

 

具体调试与实现步骤:

1. Qt先release出一个可执行文件,一般在原工程目录下。

 

2. 创建与打开自启文件夹


   
   
  1. cd ~/. config
  2. or
  3. cd /home/ pi/. config

创建一个自启文件夹,如果已经存在直接打开


   
   
  1. mkdir autostart
  2. cd autostart

 

3. 生成一个*.desktop文件(比如:my.desktop)

sudo nano my.desktop
   
   

每次开机都会自动检查该文件夹下每一个*.desktop文件,启动需要的用户程序

 

4. 添加自启文件内容


   
   
  1. [Desktop Entry]
  2. Type=Application
  3. Exec=/home/lepton/copyLeptonModule-master_v1/software/raspberrypi_video/raspberrypi_video

Exec=后填入可执行程序的绝对路径,为了免除缺乏支持dll文件的困扰,我直接选在了QT工程的文件夹

 

5. 重启测试

sudo reboot
   
   

测试成功!

#如果你也测试成功,感谢你的点赞或留言;如果你遇到了问题,欢迎留言与我交流探讨#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值