新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于SIM800C的GPRS數據傳輸系統設計*

        基于SIM800C的GPRS數據傳輸系統設計*

        作者:韓進 馬雙 時間:2016-10-27 來源:電子產品世界 收藏
        編者按:本文設計了一種以GPRS為傳輸方式的無線數據傳輸系統。該系統以STM32F207VC為主控芯片,采用最新的SIM800C模塊,以串口通訊方式實現與主控芯片的通訊,將采集到的數據傳輸至服務器端,軟件方面包括異常處理、心跳包機制的設計,大幅提高了GPRS的傳輸穩定性。經過長時間測試發現,客戶端以TCP/IP協議與服務端保持良好連接狀態。該設計可廣泛應用于各類單片機控制系統中,為無線數據傳輸提供了一種新的穩定的解決方案。

          2.1 模塊AT命令

        本文引用地址:http://www.104case.com/article/201610/311927.htm

          SIM800系列通訊模塊的主要AT指令同SIMCom公司其他型號的物聯網通訊模塊的指令大部分相同,可用以兼容各個不同的硬件版本,用來建立TCP連接的相關命令及其作用如表1。

          利用STM32的標準庫函數可以快速對芯片的USART進行初始化,在STM32的main函數中,上電后主要完成相應的時鐘以及GPIO,使能芯片的USART接口、初始化波特率等。并配置中斷向量,編寫相關的串口中斷處理程序,作為返回值接收處理函數的基礎。為測試系統傳輸數據的準確性,通過STM32的485接口,應用Modbus協議每隔1秒采集一款485型溫濕度傳感器及其他傳感器的數據進行傳輸,每隔30秒進行一次傳輸,并將數據保存在DeviceRunStatus_Struct結構體中。

          針對操作需要初始化STM32的串口,配置運行模式,其中,網絡域名的參數保存在DNSPara_Struct結構體中,例如,域名地址、DNS服務器地址1和DNS服務器地址2。ProtocolPara_Struct結構體中主要存放與IP相關的參數,例如本地TCP端口m_LocalTcpPort、服務器Tcp地址m_ServerTcpPort和服務器地址m_ServerIPAddr。在利用進行TCP連接的AT命令時,直接調用這兩個結構體內的參數進行連接即可。根據AT命令執行后的返回值判斷連接是否成功,此時令m_RunPara.m_DeviceRunStatus.m_nGprs = 1,置位連接狀態標志。

          2.2 異常處理

          在日常測試中發現,可能會由于信號或環境的影響導致SIM800C模塊出現異常,模塊串口報錯TCP CLOSED導致連接中斷。軟件設計中,在處理此類型問題時,利用_Check_Periodic_Handle()函數每隔30秒檢查一次連接狀態,若內存中的變量m_RunPara.m_DeviceRunStatus.m_nGprs值為0,即連接失敗時,對SIM800C模塊進行重新上電操作,將模塊遠程自動重啟,重新執行開機、配置、連接TCP等一系列動作以恢復模塊的正常運行。并在程序中設定域名最大連接次數為3次,即在3次域名連接仍未成功則使用IP地址方式進行連接,保證域名及IP連接均可正常使用。

          2.2 心跳包機制

          在模塊與服務器建立TCP連接后,由于網絡運營商的設置,若在某一時間段內客戶端與服務端沒有任何數據交換,會將網絡斷開,導致連接中斷,數據無法正常傳輸,為解決這一問題,在TCP通訊協議內加入心跳包機制,用于長連接的保持和斷線處理。CMD_HeartTime命令號,在第一次建立連接后,客戶端發送當前設備時鐘,服務端開啟Timer定時器每隔30秒鐘根據命令號進入心跳包處理的case語句中執行,進行雙向對時操作,這樣既可以保持雙向穩定連接,又可以對物聯網設備進行RTC更新時間操作,保證了設備運行的穩定性。下位機軟件代碼如下:

          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函數用于更新設備的RTC時鐘,并置TCP數據包的頭部m_Header中的.m_nOperation為1,在最后打包結構體數據通過TCP協議發送給服務器端。

          將未加入異常處理與心跳包機制的1號設備與經過優化的2號設備運行一上午的時間進行對比,具體連接情況對比如表2與表3所示。

          測試發現,1號設備會因網絡問題超時而斷開連接,只能靠人工手動進行復位重連;2號設備在上線后僅因服務器原因斷開連接,隨后便立即自動重連并保持連接至測試結束。說明異常處理、心跳包機制與斷線重連起到了提高設備傳輸穩定性的作用。將2號設備接入獨立IP的云服務器,通過網頁查看觀測24小時,發現無異常掉線問題,數據正確穩定傳輸。服務器端部分接收情況如圖6所示。

        3 結論

          論文以STM32F207VCT6為主控芯片,以最新的GPRS模塊SIM800C為物聯網通訊模塊進行無線數據傳輸,長時間設備運行測試未發現掉線及傳輸錯誤情況,傳輸情況穩定,基于C語言編寫的嵌入式程序代碼可方便地移植到其他類型的單片機中,方便進行二次開發,為物聯網設備數據的傳輸提供了一種新的穩定的解決方案。

        參考文獻:

          [1]劉火良.STM32庫開發實戰指南[M].北京:機械工業出版社,2013.

          [2]李濤,馬殷元,楊東. 基于STM32的GPRS遠程檢測終端設計[J]. 電子世界,2012.

          [3]張逢雪,王香婷,王通生. 基于STM32單片機的無線智能家居控制系統[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.


        本文來源于中國科技期刊《電子產品世界》2016年第10期第39頁,歡迎您寫論文時引用,并注明出處。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 额敏县| 会同县| 罗定市| 阳山县| 嘉义县| 内江市| 鄂托克旗| 九龙城区| 常山县| 资源县| 武山县| 繁峙县| 新巴尔虎右旗| 三门峡市| 双峰县| 巴马| 革吉县| 邮箱| 商南县| 水城县| 梧州市| 凤阳县| 赣榆县| 平顺县| 米泉市| 鹤壁市| 界首市| 黎城县| 惠水县| 怀远县| 井陉县| 华坪县| 沛县| 改则县| 伊春市| 张家港市| 随州市| 丘北县| 叶城县| 阳泉市| 故城县|