前言
??最近在開始接觸樹莓派,想要完成的功能是在樹莓派上跑一個Python程序獲取樹莓派串口的數(shù)據(jù),然后將Python程序配置為開機自啟,讓其上電之后就自動開始獲取串口數(shù)據(jù)并上傳數(shù)據(jù)到云端(我用的是MQTT服務(wù)器,如果有需要了解這部分內(nèi)容小伙伴留言,我再抽時間把這部分的補充一篇分享~)
一、遇到的問題
1、首次編寫程序的時候手動開啟沒有問題,非常順利的取到串口數(shù)據(jù)
2、配置為開機自啟之后,樹莓派重新上電,出現(xiàn)問題:
(1)自啟動的Python文件并沒有正常上傳數(shù)據(jù)到云端;
(2)自啟動上傳數(shù)據(jù)失敗后,我手動啟動Python程序發(fā)現(xiàn)重啟設(shè)備之前還能正常采集串口數(shù)據(jù)的程序不能正常工作了,出現(xiàn)了丟包和報錯的情況,如下圖所示:
接下來一個問題一個問題地解決!
二、問題解決
0.先介紹一個我用的自啟方法
??我是要自啟一個Python腳本,找了很多自啟的方法,最后選用了操作最簡單的(因為我就一個Python腳本也很簡單,生活本簡單,何必搞那么復(fù)雜是吧~)
??這個方法就是在rc.local文件中進行操作,所以我們稱它為rclocal方法吧,方法很簡單:
(1)終端敲入命令:sudo gedit /etc/rc.local
(gedit沒有裝的話需要裝一下,sudo apt-get install gedit
就可以)
(2)敲完命令之后,會進入rc.local文件,然后做些修改即可(這個我也查了好多,下面這個是比較好使的一種方法)
關(guān)鍵兩個位置都框出來了,文本我寫在下面方便大家ctrl c、ctrl v
① #!/bin/bash
② su pi -c "python3 換上你自己的文件路徑 &"
注: &
表示該程序后臺運行,②這句話一定要放到exit 0
之前
(3)重啟樹莓派即可
??
1.Python程序自啟后沒有數(shù)據(jù)上傳到云端
??從后臺上是可以看到Python程序已經(jīng)自啟了(可以用指令 sudo systemctl status rc-local
查看,如果程序自啟失敗,會在里面提示錯誤信息,如下圖所示)
??但是確實沒有數(shù)據(jù)上傳,考慮到我的程序需要聯(lián)網(wǎng)上傳數(shù)據(jù),我估計是樹莓派剛啟動連接網(wǎng)絡(luò)需要時間,而程序在網(wǎng)絡(luò)還沒有建立的時候已經(jīng)開始運行,所以導(dǎo)致程序連接云端失敗,但是程序確實是開始跑了,而且已經(jīng)開始采集串口數(shù)據(jù)了。
??然后我在程序連接云端前面加了十秒的延遲,果然重新上電之后數(shù)據(jù)在十秒之后成功上傳到了云端,自啟的問題解決了!
import time
time.sleep(10)
2.解決串口數(shù)據(jù)丟包和報錯的異常
??這個問題是一個很坑的問題,我為找這個問題找了三天,嘗試了各種方法,把樹莓派上兩個串口和USB口都用了個遍,嘗試了十幾種排錯的方法,都是不行,始終都是更換串口數(shù)據(jù)就正常了,但是重啟后我再手動啟動串口就又丟包報錯,我一度以為是我自己串口配置的有問題,導(dǎo)致樹莓派重啟之后串口緩存堵塞之類的。結(jié)果終于想到在1、中我做了一個自啟程序,然后我又手動啟動了該自啟程序調(diào)試,相當于有兩個腳本在同時獲取一個串口的數(shù)據(jù),自然會丟數(shù)據(jù)了,我簡直…
??可以在終端查看當前后臺運行的程序,如果想要終止自啟程序,然后手動啟動程序調(diào)試的話,可以在終端使用命令htop
進入查看CPU占用情況,選中想要結(jié)束的任務(wù),按下 F9 然后 回車 即可終止該任務(wù),如下圖所示,將自啟的程序終止掉后,此時手動啟動該腳本就不會出現(xiàn)丟數(shù)據(jù)和read failed的問題了
注:如果還是存在丟數(shù)據(jù)的問題,可以參考我分享的另一篇:解決Python獲取串口數(shù)據(jù)只能獲取一部分的問題
3.Python讀取串口數(shù)據(jù)依然存在的問題
??python讀取到的數(shù)據(jù)可能一次性讀不到完整一幀數(shù)據(jù),比如我用stm32的串口給樹莓派的串口發(fā)送一個長為70字節(jié)的數(shù)據(jù)幀,每隔三秒發(fā)送一次。樹莓派可以每隔三秒讀到數(shù)據(jù),但是它有時候會把一幀打斷成了三次接收,所以我們還需要寫代碼控制程序?qū)⑦@三段數(shù)據(jù)拼接到一起才行,當然這個拼接需要stm32發(fā)送的數(shù)據(jù)有幀頭幀尾之類的作為拼接的依據(jù),不然容易出現(xiàn)錯誤拼接。
最后-爬坑小能手
??這篇文章可以說是由于我自己傻而寫的,自己給自己挖了個坑,跳進去,用了三天爬出來,但是好在是在爬出來的過程中也看到了很多坑外不會想到的內(nèi)容,這樣想的話坑就不算坑了吧哈哈哈~
??把這篇內(nèi)容分享給大家,希望大家能避開這個很哭笑不得的問題也希望大家在踩到坑的時候欣然接受并從爬坑的過程中掌握重要的經(jīng)驗逐漸成長!文章來源:http://www.zghlxwxcb.cn/news/detail-426000.html
樹莓派是最近剛開始接觸的,感覺非常好玩兒,重點是它體積小但是功能上來說簡直就是個電腦,那就可以做非常非常多的應(yīng)用??!如果可以自己畫個板子把樹莓派的功能裁剪到只滿足自己的開發(fā)需要,那簡直太完美了?。?!后面如果我可以繼續(xù)探索這方面的內(nèi)容,我也盡量抽時間把學(xué)到的內(nèi)容分享給讀者大大們!文章來源地址http://www.zghlxwxcb.cn/news/detail-426000.html
到了這里,關(guān)于開機自啟失敗讀串口失敗 read failed: device reports readiness to read but returned no data解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!