前言
最近在开始接触树莓派,想要完成的功能是在树莓派上跑一个Python程序获取树莓派串口的数据,然后将Python程序配置为开机自启,让其上电之后就自动开始获取串口数据并上传数据到云端(我用的是MQTT服务器,如果有需要了解这部分内容小伙伴留言,我再抽时间把这部分的补充一篇分享~)
一、遇到的问题
1、首次编写程序的时候手动开启没有问题,非常顺利的取到串口数据
2、配置为开机自启之后,树莓派重新上电,出现问题:
(1)自启动的Python文件并没有正常上传数据到云端;
(2)自启动上传数据失败后,我手动启动Python程序发现重启设备之前还能正常采集串口数据的程序不能正常工作了,出现了丢包和报错的情况,如下图所示:
接下来一个问题一个问题地解决!
二、问题解决
0.先介绍一个我用的自启方法
我是要自启一个Python脚本,找了很多自启的方法,最后选用了操作最简单的(因为我就一个Python脚本也很简单,生活本简单,何必搞那么复杂是吧~)
这个方法就是在rc.local文件中进行操作,所以我们称它为rclocal方法吧,方法很简单:
(1)终端敲入命令:sudo gedit /etc/rc.local
(gedit没有装的话需要装一下,sudo apt-get install gedit
就可以)
(2)敲完命令之后,会进入rc.local文件,然后做些修改即可(这个我也查了好多,下面这个是比较好使的一种方法)
关键两个位置都框出来了,文本我写在下面方便大家ctrl c、ctrl v
① #!/bin/bash
② su pi -c "python3 换上你自己的文件路径 &"
注: &
表示该程序后台运行,②这句话一定要放到exit 0
之前
(3)重启树莓派即可
1.Python程序自启后没有数据上传到云端
从后台上是可以看到Python程序已经自启了(可以用指令 sudo systemctl status rc-local
查看,如果程序自启失败,会在里面提示错误信息,如下图所示)
但是确实没有数据上传,考虑到我的程序需要联网上传数据,我估计是树莓派刚启动连接网络需要时间,而程序在网络还没有建立的时候已经开始运行,所以导致程序连接云端失败,但是程序确实是开始跑了,而且已经开始采集串口数据了。
然后我在程序连接云端前面加了十秒的延迟,果然重新上电之后数据在十秒之后成功上传到了云端,自启的问题解决了!
import time
time.sleep(10)
2.解决串口数据丢包和报错的异常
这个问题是一个很坑的问题,我为找这个问题找了三天,尝试了各种方法,把树莓派上两个串口和USB口都用了个遍,尝试了十几种排错的方法,都是不行,始终都是更换串口数据就正常了,但是重启后我再手动启动串口就又丢包报错,我一度以为是我自己串口配置的有问题,导致树莓派重启之后串口缓存堵塞之类的。结果终于想到在1、中我做了一个自启程序,然后我又手动启动了该自启程序调试,相当于有两个脚本在同时获取一个串口的数据,自然会丢数据了,我简直…
可以在终端查看当前后台运行的程序,如果想要终止自启程序,然后手动启动程序调试的话,可以在终端使用命令htop
进入查看CPU占用情况,选中想要结束的任务,按下 F9 然后 回车 即可终止该任务,如下图所示,将自启的程序终止掉后,此时手动启动该脚本就不会出现丢数据和read failed的问题了
注:如果还是存在丢数据的问题,可以参考我分享的另一篇:解决Python获取串口数据只能获取一部分的问题
3.Python读取串口数据依然存在的问题
python读取到的数据可能一次性读不到完整一帧数据,比如我用stm32的串口给树莓派的串口发送一个长为70字节的数据帧,每隔三秒发送一次。树莓派可以每隔三秒读到数据,但是它有时候会把一帧打断成了三次接收,所以我们还需要写代码控制程序将这三段数据拼接到一起才行,当然这个拼接需要stm32发送的数据有帧头帧尾之类的作为拼接的依据,不然容易出现错误拼接。
最后-爬坑小能手
这篇文章可以说是由于我自己傻而写的,自己给自己挖了个坑,跳进去,用了三天爬出来,但是好在是在爬出来的过程中也看到了很多坑外不会想到的内容,这样想的话坑就不算坑了吧哈哈哈~
把这篇内容分享给大家,希望大家能避开这个很哭笑不得的问题也希望大家在踩到坑的时候欣然接受并从爬坑的过程中掌握重要的经验逐渐成长!文章来源:https://www.toymoban.com/news/detail-426000.html
树莓派是最近刚开始接触的,感觉非常好玩儿,重点是它体积小但是功能上来说简直就是个电脑,那就可以做非常非常多的应用啊!如果可以自己画个板子把树莓派的功能裁剪到只满足自己的开发需要,那简直太完美了!!!后面如果我可以继续探索这方面的内容,我也尽量抽时间把学到的内容分享给读者大大们!文章来源地址https://www.toymoban.com/news/detail-426000.html
到了这里,关于开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!