基于SIM800C的GPRS數(shù)據(jù)傳輸系統(tǒng)設計*
2.1 模塊AT命令
本文引用地址:http://www.ljygm.com/article/201610/311927.htmSIM800系列通訊模塊的主要AT指令同SIMCom公司其他型號的物聯(lián)網(wǎng)通訊模塊的指令大部分相同,可用以兼容各個不同的硬件版本,用來建立TCP連接的相關命令及其作用如表1。
利用STM32的標準庫函數(shù)可以快速對芯片的USART進行初始化,在STM32的main函數(shù)中,上電后主要完成相應的時鐘以及GPIO,使能芯片的USART接口、初始化波特率等。并配置中斷向量,編寫相關的串口中斷處理程序,作為返回值接收處理函數(shù)的基礎。為測試系統(tǒng)傳輸數(shù)據(jù)的準確性,通過STM32的485接口,應用Modbus協(xié)議每隔1秒采集一款485型溫濕度傳感器及其他傳感器的數(shù)據(jù)進行傳輸,每隔30秒進行一次GPRS傳輸,并將數(shù)據(jù)保存在DeviceRunStatus_Struct結構體中。
針對SIM800C操作需要初始化STM32的串口,配置SIM800C運行模式,其中,網(wǎng)絡域名的參數(shù)保存在DNSPara_Struct結構體中,例如,域名地址、DNS服務器地址1和DNS服務器地址2。ProtocolPara_Struct結構體中主要存放與IP相關的參數(shù),例如本地TCP端口m_LocalTcpPort、服務器Tcp地址m_ServerTcpPort和服務器地址m_ServerIPAddr。在利用SIM800C進行TCP連接的AT命令時,直接調用這兩個結構體內的參數(shù)進行連接即可。根據(jù)AT命令執(zhí)行后的返回值判斷連接是否成功,此時令m_RunPara.m_DeviceRunStatus.m_nGprs = 1,置位連接狀態(tài)標志。
2.2 異常處理
在日常測試中發(fā)現(xiàn),可能會由于信號或環(huán)境的影響導致SIM800C模塊出現(xiàn)異常,模塊串口報錯TCP CLOSED導致連接中斷。軟件設計中,在處理此類型問題時,利用GPRS_Check_Periodic_Handle()函數(shù)每隔30秒檢查一次連接狀態(tài),若內存中的變量m_RunPara.m_DeviceRunStatus.m_nGprs值為0,即連接失敗時,對SIM800C模塊進行重新上電操作,將模塊遠程自動重啟,重新執(zhí)行開機、配置、連接TCP等一系列動作以恢復模塊的正常運行。并在程序中設定域名最大連接次數(shù)為3次,即在3次域名連接仍未成功則使用IP地址方式進行連接,保證域名及IP連接均可正常使用。
2.2 心跳包機制
在模塊與服務器建立TCP連接后,由于GPRS網(wǎng)絡運營商的設置,若在某一時間段內客戶端與服務端沒有任何數(shù)據(jù)交換,會將網(wǎng)絡斷開,導致連接中斷,數(shù)據(jù)無法正常傳輸,為解決這一問題,在TCP通訊協(xié)議內加入心跳包機制,用于長連接的保持和斷線處理。CMD_HeartTime命令號,在第一次建立連接后,客戶端發(fā)送當前設備時鐘,服務端開啟Timer定時器每隔30秒鐘根據(jù)命令號進入心跳包處理的case語句中執(zhí)行,進行雙向對時操作,這樣既可以保持雙向穩(wěn)定連接,又可以對物聯(lián)網(wǎng)設備進行RTC更新時間操作,保證了設備運行的穩(wěn)定性。下位機軟件代碼如下:
case CMD_HeartTime:
if(pNetComm->m_Header.m_nOperation == 0)
{
UpdateTimer(pNetComm->unoin.m_TimerPara.m_TimestampL);
pNetComm->m_Header.m_nOperation = 1;
chRet = 1;
}
break;
在下位機收到CMD_HeartTime命令號時,進入該case語句內,UpdateTimer函數(shù)用于更新設備的RTC時鐘,并置TCP數(shù)據(jù)包的頭部m_Header中的.m_nOperation為1,在最后打包結構體數(shù)據(jù)通過TCP協(xié)議發(fā)送給服務器端。
將未加入異常處理與心跳包機制的1號設備與經(jīng)過優(yōu)化的2號設備運行一上午的時間進行對比,具體連接情況對比如表2與表3所示。
測試發(fā)現(xiàn),1號設備會因網(wǎng)絡問題超時而斷開連接,只能靠人工手動進行復位重連;2號設備在上線后僅因服務器原因斷開連接,隨后便立即自動重連并保持連接至測試結束。說明異常處理、心跳包機制與斷線重連起到了提高設備傳輸穩(wěn)定性的作用。將2號設備接入獨立IP的云服務器,通過網(wǎng)頁查看觀測24小時,發(fā)現(xiàn)無異常掉線問題,數(shù)據(jù)正確穩(wěn)定傳輸。服務器端部分接收情況如圖6所示。
3 結論
論文以STM32F207VCT6為主控芯片,以最新的GPRS模塊SIM800C為物聯(lián)網(wǎng)通訊模塊進行無線數(shù)據(jù)傳輸,長時間設備運行測試未發(fā)現(xiàn)掉線及傳輸錯誤情況,傳輸情況穩(wěn)定,基于C語言編寫的嵌入式程序代碼可方便地移植到其他類型的單片機中,方便進行二次開發(fā),為物聯(lián)網(wǎng)設備數(shù)據(jù)的傳輸提供了一種新的穩(wěn)定的解決方案。
參考文獻:
[1]劉火良.STM32庫開發(fā)實戰(zhàn)指南[M].北京:機械工業(yè)出版社,2013.
[2]李濤,馬殷元,楊東. 基于STM32的GPRS遠程檢測終端設計[J]. 電子世界,2012.
[3]張逢雪,王香婷,王通生. 基于STM32單片機的無線智能家居控制系統(tǒng)[J]. 自動化技術與應用,2011.
[4]Simcom. SIMCOM800C硬件設計手冊.pdf[EB/OL]. http://simcomm2m.com/UploadFile/TechnicalFile/SIM800C_硬件設計手冊_V1.01.pdf.
[5]Simcom. SIM800Series AT Command ManualV1.09.pdf[EB/OL].
http://simcomm2m.com/UploadFile/TechnicalFile/SIM800Series_ATCommandManual_V1.09.pdf.
[6]Simcom. SIM80系列TCPIP應用文檔V1.01.pdf[EB/OL].http://simcomm2m.com/UploadFile/TechnicalFile/SIM800系列_TCPIP_應用文檔_V1.01.pdf.
本文來源于中國科技期刊《電子產(chǎn)品世界》2016年第10期第39頁,歡迎您寫論文時引用,并注明出處。
評論