开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决

这篇具有很好参考价值的文章主要介绍了开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

  最近在开始接触树莓派,想要完成的功能是在树莓派上跑一个Python程序获取树莓派串口的数据,然后将Python程序配置为开机自启,让其上电之后就自动开始获取串口数据并上传数据到云端(我用的是MQTT服务器,如果有需要了解这部分内容小伙伴留言,我再抽时间把这部分的补充一篇分享~)


一、遇到的问题

1、首次编写程序的时候手动开启没有问题,非常顺利的取到串口数据
2、配置为开机自启之后,树莓派重新上电,出现问题:
(1)自启动的Python文件并没有正常上传数据到云端;
(2)自启动上传数据失败后,我手动启动Python程序发现重启设备之前还能正常采集串口数据的程序不能正常工作了,出现了丢包和报错的情况,如下图所示:

开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决

接下来一个问题一个问题地解决!

二、问题解决

0.先介绍一个我用的自启方法

  我是要自启一个Python脚本,找了很多自启的方法,最后选用了操作最简单的(因为我就一个Python脚本也很简单,生活本简单,何必搞那么复杂是吧~)
  这个方法就是在rc.local文件中进行操作,所以我们称它为rclocal方法吧,方法很简单:

(1)终端敲入命令:sudo gedit /etc/rc.local (gedit没有装的话需要装一下,sudo apt-get install gedit 就可以)

(2)敲完命令之后,会进入rc.local文件,然后做些修改即可(这个我也查了好多,下面这个是比较好使的一种方法)

开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决
关键两个位置都框出来了,文本我写在下面方便大家ctrl c、ctrl v
#!/bin/bash
su pi -c "python3 换上你自己的文件路径 &"
注: &表示该程序后台运行,②这句话一定要放到exit 0之前

(3)重启树莓派即可
  

1.Python程序自启后没有数据上传到云端

  从后台上是可以看到Python程序已经自启了(可以用指令 sudo systemctl status rc-local 查看,如果程序自启失败,会在里面提示错误信息,如下图所示)
开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决

  但是确实没有数据上传,考虑到我的程序需要联网上传数据,我估计是树莓派刚启动连接网络需要时间,而程序在网络还没有建立的时候已经开始运行,所以导致程序连接云端失败,但是程序确实是开始跑了,而且已经开始采集串口数据了。
  然后我在程序连接云端前面加了十秒的延迟,果然重新上电之后数据在十秒之后成功上传到了云端,自启的问题解决了!

import time 
time.sleep(10)

2.解决串口数据丢包和报错的异常

  这个问题是一个很坑的问题,我为找这个问题找了三天,尝试了各种方法,把树莓派上两个串口和USB口都用了个遍,尝试了十几种排错的方法,都是不行,始终都是更换串口数据就正常了,但是重启后我再手动启动串口就又丢包报错,我一度以为是我自己串口配置的有问题,导致树莓派重启之后串口缓存堵塞之类的。结果终于想到在1、中我做了一个自启程序,然后我又手动启动了该自启程序调试,相当于有两个脚本在同时获取一个串口的数据,自然会丢数据了,我简直…
  可以在终端查看当前后台运行的程序,如果想要终止自启程序,然后手动启动程序调试的话,可以在终端使用命令htop进入查看CPU占用情况,选中想要结束的任务,按下 F9 然后 回车 即可终止该任务,如下图所示,将自启的程序终止掉后,此时手动启动该脚本就不会出现丢数据和read failed的问题了
开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决
注:如果还是存在丢数据的问题,可以参考我分享的另一篇:解决Python获取串口数据只能获取一部分的问题

3.Python读取串口数据依然存在的问题

  python读取到的数据可能一次性读不到完整一帧数据,比如我用stm32的串口给树莓派的串口发送一个长为70字节的数据帧,每隔三秒发送一次。树莓派可以每隔三秒读到数据,但是它有时候会把一帧打断成了三次接收,所以我们还需要写代码控制程序将这三段数据拼接到一起才行,当然这个拼接需要stm32发送的数据有帧头帧尾之类的作为拼接的依据,不然容易出现错误拼接。

最后-爬坑小能手

  这篇文章可以说是由于我自己傻而写的,自己给自己挖了个坑,跳进去,用了三天爬出来,但是好在是在爬出来的过程中也看到了很多坑外不会想到的内容,这样想的话坑就不算坑了吧哈哈哈~
  把这篇内容分享给大家,希望大家能避开这个很哭笑不得的问题也希望大家在踩到坑的时候欣然接受并从爬坑的过程中掌握重要的经验逐渐成长!

树莓派是最近刚开始接触的,感觉非常好玩儿,重点是它体积小但是功能上来说简直就是个电脑,那就可以做非常非常多的应用啊!如果可以自己画个板子把树莓派的功能裁剪到只满足自己的开发需要,那简直太完美了!!!后面如果我可以继续探索这方面的内容,我也尽量抽时间把学到的内容分享给读者大大们!文章来源地址https://www.toymoban.com/news/detail-426000.html

到了这里,关于开机自启失败读串口失败 read failed: device reports readiness to read but returned no data解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux 服务开机自启

    Centos有两种方式,一是修改/etc/rc.local文件,二是使用chkconfig来管理开机自启(chkconfig无法自启动源码包) 等级 等级0:关机 等级1:单用户模式 等级2:无网络连接的多用户命令行模式 等级3:有网络连接的多用户命令行模式 等级4:不可用 等级5:带图形界面的多用户模式 等级

    2024年02月13日
    浏览(28)
  • Elasticsearch开机自启

    系统: CentOs 在 /etc/systemd/system 下创建一个名为 elasticsearch.service 的文件 将一下配置粘贴进入 elasticsearch.service 文件 LimitNOFILE , LimitMEMLOCK 这两参数等同于我们设置的(必须添加) 保存 elasticsearch.service 后重新加载系统后台启动项 此时我们便可以通过 systemctl start elasticsearch 等

    2024年01月16日
    浏览(24)
  • C#程序开机自启

    第一种方式 修改注册表 第二种添加快捷方式到启动菜单中 添加引用,在 Com 中搜索 Windows Script Host Object Mod

    2024年02月03日
    浏览(33)
  • kibana启动失败:server is not ready yet

    这篇文章主要是解决黑马项目《学成在线》的p106中的kibana无法正常启动 首先我们在虚拟机上查看kibana启动日志 发现报错总是在重试某个已经创建好的es中的索引.kibana_task_manager 所以我们可以去es中看一下这里的索引是否正常 可以发现索引名为.kibana_task_manager …的索引是red(非

    2024年02月12日
    浏览(33)
  • Docker实现容器开机自启

    有时候想启动docker的时候,同时也把docker里面的容器也设置成自动启动。 创建容器时,设置自动启动容器,  添加--restart=always 如果创建时未指定 --restart=always ,可通过update 命令设置 服务器停机后,再次启动容器

    2024年02月06日
    浏览(30)
  • Elasticsearch开机自启脚本

    su elk! 切换为 elk 用户执行下面的命令,! 相当于EOF 注意: 以上脚本的用户为 elk,如果你的用户不是,则需要替换 以上脚本的 JAVA_HOME 以及 elasticsearch_home 如果不同请替换 [root@weiyi ~]# chmod +x /etc/init.d/elasticsearch  [root@weiyi ~]# chkconfig --add /etc/init.d/elasticsearch #添加开机自启动

    2024年02月15日
    浏览(33)
  • Android如何实现开机自启

    开机自启有很多种办法,下面用广播的方式实现。 1、首先先创建广播,开机代码 2、在清单文件里面注册,同时添加权限 完成

    2024年02月14日
    浏览(28)
  • Ubuntu系统设置开机自启

    在测试国产操作系统:银河麒麟、UOS统信机器的过程中,发现开机不自启,总结以下几种方式实现自启 rc.local脚本是一个Ubuntu开机后自动执行的脚本,可以在脚本内添加行指令,该脚本位于/etc/路径下,需要root权限才能修改,若/etc/rc.d/下也存在rc.local,通常会创建软连接到/e

    2024年02月13日
    浏览(32)
  • 创建开机自启的脚本

    在启动许多ros节点时有多种方式,我推荐使用launch来启动所有的节点,这也是一种规范的方式。以后会慢慢向这个方向靠。 除此之外还可以通过创建的脚本来启动: 脚本位置不限,只需要: 在里面添加相应的内容: 然后添加权限: sudo chmod 777 -R xxx.sh 这样脚本就创建完了,

    2024年02月09日
    浏览(31)
  • Linux下mysql开机自启

    #1、mysql的安装目录的权限给mysql用户以及用户组mysql57 #chown(英文全拼:change owner)命令用于设置文件所有者和所属组的命令。 #chown 需要超级用户root的权限才能执行此命令 #-R(注意大写)选项表示连同子目录中的所有文件,都更改 chown -R mysql57:mysql57 /mnt/mysql/mysql57 #2、添加

    2024年01月23日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包