概述
想用樹莓派的“麻雀雖小五臟俱全”特點做些好玩有趣的東西,歡迎大家一起來探討,如有好建議更是歡迎關注私信指正。我會用一個系列文章寫寫用樹莓派實現跟手機有關係的功能,如自動收發短信、接電話、打電話等。接下來分篇進行這些功能的試驗和進階, 希望在文章和大家一起學習和進步。
上一篇文章《 》中我們已經能利用控制檯輸入,來進行AT指令輸入並獲取SIM868響應結果。在此基礎上, 我們來做一些自動化的改良, 並讓程序一直運行下去,以獲得程序自動工作幫忙接收短信的工作。想深入理解的話就千萬不要做佛系讀者咯~
一、本篇能學到什麼
- 如何進入監聽短信模式
- 如何發送短信
二、需要的基礎知識
- 知道怎麼燒錄和配置樹莓派初始環境(官方的ROM),有需要的可以找我要資料
- 具備Java知識,本文以Java為例進行開發
- 需要源碼的話要會一點Git(相關文章請查閱《 》)
- 需要閱讀過《 》
三、實現過程
1.關鍵知識點
(1) 增加功能菜單
在上一篇的基礎上, 我們添加一個前置功能菜單,讓用戶可以選擇是繼續使用“指令交互模式”, 還是進入“短信監聽模式”
然後運行試試效果
輸入AT指令回車,能看到OK說明SIM868模塊工作正常,並且能響應指令
輸入AT+CSQ查看信號強度也成功。
(2)利用while+Thread.sleep()模擬監聽效果
為了防止程序按順序運行一次就結束,我們需要借用while來讓它不停地運行;
同時需要防止死循環帶來CPU100%負荷運行,所以加一個睡眠指令,讓CPU稍微休息一下
(3)初始化模塊使之進入工作狀態
添加初始化SIM868模塊使之準備進入工作的代碼(詳細實現代碼在文末的Github有下載地址
試試效果,Good,一切正常。
(4)解析監聽到的指令反饋,獲取短信內容並及時清理緩存
這塊重點要了解當有短信來時,SIM868會輸出像下面這樣的內容
+CMTI: "SM",7
這個內容重點在於要解析出"SM"後面的數字7, 它代表了剛收到的短信在SIM卡的什麼索引位置上
根據上面獲得的索引位置,就可以調用相應的讀短信AT指令來讀取真正的短信內容
讀短信指令:AT+CMGR=[index]
讀取成功後獲得反饋,以"+CMGR"帶頭的字符串,分析它可以得到最終我們需要的東西,代碼參考如下
來個完整的演示過程:
我們先在手機上發送短信"first test msg"
然後在樹莓派上運行的短信監聽程序上看到結果
(5)發送短信模式
在此模式下,可以輸入手機號+短信內容,然後程序把短信發送出去
程序運行起來,輸入手機號和內容試一試
看看目標手機上是否收到剛發出來的短信
成功!
2. 發佈你的代碼
把寫好的代碼編譯成class, 並把相關的依賴都放上樹莓派的link目錄中
附上源碼地址: [email protected]:visionsl/raspi_mysms.git
3. 運行編譯好的程序
cd /hompe/pi/link
java -classpath .:classes:/opt/pi4j/lib/* com.main.Main
四、小結與預告
如果你的代碼運行起來了, 恭喜你!
如果碰到問題,比如發短信失敗,或接收不到短信,有可能是模塊接觸不好,你可以試試用ATD撥打電話的指令來檢查模塊是否能正常工作
如果模塊反饋是[NO CARRIER],那麼你要檢查一下SIM卡是否沒接觸好,或是調教一下天線位置看是否無信號引起,最後重新上電再重試
五、下篇預告
下一篇我們要進階學習, 看怎麼把收到的短信轉發到指定的服務器上。
閱讀更多 物聯創客 的文章