《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于FreeRTOS和MQTT的海洋監測網絡框架
基于FreeRTOS和MQTT的海洋監測網絡框架
2018年電子技術應用第1期
朱明輝1,2,趙信廣1,2,尤星懿1
1.山東科技大學 電氣與自動化工程學院,山東 青島266590;2.山東省科學院 海洋儀器儀表研究所,山東 青島266100
摘要: 設計基于實時操作系統的海洋監測網絡框架,用于實時監測海洋信息,保護海洋環境。采用STM32單片機應用實時操作系統FreeRTOS實現,通過各種傳感器在海下采集數據,并使用MQTT協議(消息隊列遙測傳輸)進行數據傳輸,實時監測海洋環境。通過在FreeRTOS操作系統上進行任務設計,并對海流計、水深計采集的數據進行傳輸,最終實現海洋環境實時監測。
中圖分類號: TN929.5;TP274
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.172451
中文引用格式: 朱明輝,趙信廣,尤星懿. 基于FreeRTOS和MQTT的海洋監測網絡框架[J].電子技術應用,2018,44(1):41-44.
英文引用格式: Zhu Minghui,Zhao Xinguang,You Xingyi. Marine monitoring network framework based on FreeRTOS and MQTT[J]. Application of Electronic Technique,2018,44(1):41-44.

Marine monitoring network framework based on FreeRTOS and MQTT
Zhu Minghui1,2,Zhao Xinguang1,2,You Xingyi1
1.School of Electrical Engineering and Automation,Shandong University of Science and Technology,Qingdao 266590,China; 2.Institute of Oceanographic Instrumentation,Shandong Academy of Sciences,Qingdao 266100,China
Abstract: The framework of marine monitoring network based on real-time operating system is designed to monitor marine information in real-time and protect the marine environment. The design uses STM32 microcontroller application Free Real-Time Operating System(FreeRTOS),through a variety of sensors to collect data in the sea. And the FreeRTOS applies the MQTT to transmit data,to achieve real-time monitoring of the marine environment. Through the task design on FreeRTOS, the data collected by current meter and bathymeter are transmitted. Finally, the marine environment is monitored in real time.
Key words : microcontrollers;FreeRTOS;sensor;MQTT

0 引言

    隨著海洋的不斷開發、探索,以及生活垃圾等污染物的排放,海洋環境遭到嚴重破壞,因此保護海洋環境刻不容緩。為了加強海洋環境的保護,提高對海洋環境的合理開發利用,人們迫切地需要提高海洋監測技術,實現對海洋信息實時監測,更好地實現災害預警、資源利用、環境保護以及各種軍事活動。海洋監測基于傳感器網絡實現,通過多個傳感器構成傳感器網絡采集數據并上傳到控制中心實現。傳統的單片機進行傳感器數據的采集與傳輸,只能進行單任務,在較復雜的數據采集傳輸中就顯得力不從心。而實時操作系統可以設置多個任務,每個任務執行的周期是可靠的,可以優先快速地執行對實時性要求高的事件,并且程序的設計相對簡單,功能的拓展也比較容易。在數據傳輸上,消息隊列遙測傳輸(Message Queuing Telemetry Transport,MQTT)協議設計之初充分考慮了網絡的不確定性,協議代碼量少,報文精簡,可以適應不理想的網絡條件,提供實時可靠的消息服務。因此對于海洋監測網絡來說,在實時操作系統上利用傳感器網絡采集數據并通過MQTT協議進行交互成為一種可靠的選擇。

1 FreeRTOS簡介

    FreeRTOS操作系統內核占用空間小,實時性高,源碼公開、可移植,可以在資源有限的微控制器中運行。FreeRTOS在任務調度上支持搶占式、合作式和時間片式,任務數量沒有限制,不同任務可以設置不同的優先級,優先級隨數值的增大而提高,同一優先級也可以設置不同任務[1]。與其他嵌入式操作系統相比,FreeRTOS比較簡單,上手容易,商業上免費,而且社會占有量高。

2 MQTT協議

2.1 MQTT簡介

    MQTT是一款發布/訂閱(publish/subscribe)模式的消息傳輸協議。該協議構建于TCP/IP協議上,并且具有簡單、規范、開銷低、易于實現的特點。這些特點使得它對于一些要求低功耗、低帶寬等受限的環境來說是很好的選擇,因此MQTT協議被廣泛應用在物-物通信以及物聯網中。

2.2 MQTT特點

    (1)MQTT可以實現消息一對多分發;

    (2)對負載內容屏蔽;

    (3)傳輸消息提供3種服務質量,用戶可根據實際應用權衡效率與服務質量;

    (4)協議報文的精簡,減少對網絡質量的依賴;

    (5)客戶端異常中斷的通知機制。

2.3 MQTT結構

    MQTT協議中有發布者、代理服務器、訂閱者3種身份。客戶端和代理服務器首先需要通過交互連接請求報文來建立連接,之后客戶端向代理服務器發布消息,而訂閱者可以向消息代理服務器訂閱消息。在此協議模型中代理服務器相當于一個轉發者,轉發的消息通過主題來區分。協議模型如圖1所示。MQTT協議通過這種消息模式,可以實現多對多的通信,靈活性高,并且發送設備和接收設備不直接相連,實現了發布者與訂閱者解耦[1]

qrs3-t1.gif

2.4 MQTT數據包

    MQTT數據包整體上可以分為固定頭、可變頭、有效載荷,其中固定頭在所有報文中都存在,而可變頭和有效載荷是否存在則取決于報文類型。

    (1)固定頭(Fixed header)

    固定頭在MQTT所有報文中都存在,大小為2~5 B,第一字節用來表示報文類型和標志字段,第二字節開始是剩余長度字段。固定頭格式如表1。

qrs3-b1.gif

    表1中,Message Type用4個位表示14種消息類型;QoS level代表服務質量:QoS0、QoS1、QoS2,等級越高對系統的要求越高,而效率越低;Remaining Length表示剩余長度,最大4 B。

    (2)可變頭(Variable header)

    固定報頭之后是可變頭,不同報文的可變頭是不同的。可變報頭的報文標識符字段并不是所有報文都存在,在客戶端發送的報文中,如果帶報文標識符,則報文標識符必須是當前未使用的。

    (3)有效載荷(Payload)

    有效載荷是緊跟可變頭的MQTT數據包的最后一部分,存在于CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE、PUBLISH 5種報文消息中,其中PUBLISH中是要傳輸的數據,可根據需要選擇是否帶有效載荷。

3 MQTT在FreeRTOS上的應用

3.1 硬件結構

3.1.1 應用條件

    首先在STM32上移植FreeRTOS,其次要支持TCP/IP協議。對于嵌入式系統來說,實現TCP/IP協議分為軟件方法和硬件方法,軟件上可以通過移植uIP、LwIP等協議棧實現;硬件上可以選擇STM32互聯型產品,或者STM32連接以太網收發芯片、WiFi模塊等來實現。

3.1.2 硬件電路設計

    本文采用STM32連接W5500芯片的方案,與其他方法相比更加快捷、簡便。W5500芯片集成了TCP/IP協議棧,提供了SPI外設接口,方便了與MCU相連,使用全新的SPI協議,速率能達到80 MHz。利用W5500提供的官方驅動庫函數與SPI接口的驅動函數,進行必要的初始化參數配置,就可以實現以太網通信。W5500的兩種工作模式中,選用了可以與其他設備共享SPI接口的可變數據長度模式(VDM),由SCSn控制數據段長度,可以選擇1 B~N B的任意數據段長度。硬件電路連接如圖2所示。

qrs3-t2.gif

    W5500通過SPI接口連接MCU,其中PC5用于初始化以太網芯片,如果連接斷開可以通過PC5及時控制W5500,PA4~PA5用于SPI通信,PB0控制W5500的中斷生效。W5500的差分信號傳輸TXP/TXN和差分信號接收RXP/RXN,分別與網絡接口RJ45中的網絡變壓器相連,并且連接活動狀態和網絡連接指示燈。選擇HR911105A作為網絡接口,它本身自帶網絡變壓器,可以增強信號,保證了通信距離,同時使W5500與外部隔離,提高了抗干擾能力。整個電路設計簡單,同時也保證了數據傳輸速度和可靠性。

3.2 報文時序

    以傳輸服務質量QoS2為例,MQTT的報文時序如圖3所示。

qrs3-t3.gif

    (1)訂閱者客戶端向代理服務器發送CONNECT報文請求連接,代理服務器返回CONNACK確認連接,訂閱者客戶端與代理服務器建立了網絡連接;

    (2)訂閱者客戶端向代理服務器發布SUBSCRIBE報文訂閱主題,代理服務器返回SUBACK確認訂閱;

    (3)發布者客戶端向代理服務器發送CONNECT報文請求連接,代理服務器返回CONNACK確認連接,發布者客戶端與代理服務器建立了網絡連接;之后發布者通過PUBLISH發布消息。如果傳輸消息的服務質量為QoS2,代理服務器和發布者之間會通過三步報文PUBREC、PUBREL、PUBCOMP來確定PUBLISH消息精確收到;

    (4)訂閱者客戶端通過發送PINGREQ報文進行心跳連接表示自己還連接著,代理服務器回復PINGRESP報文響應心跳,確認客戶端還在連接;

    (5)代理服務器把從發布者客戶端接收到的特定主題的信息,轉發給訂閱此主題的客戶端;

    (6)訂閱者客戶端向代理服務器發布取消訂閱主題報文UNSUBSCRIBE,代理服務器發布UNSUBACK報文,確認收到了對方的取消訂閱報文;

    (7)客戶端發送給代理服務器的最后一個控制報文,表示客戶端正常斷開連接[1]

3.3 任務設計以及優先級

    FreeRTOS的每個任務都可以分配一個0~(configMAX_PRIORITIES-1)的優先級,0的優先級最低。FreeRTOS搶占式任務調度器總是保證處于就緒態或者運行態的最高優先級的任務運行,而時間片輪轉調度器則是保證處于相同優先級的任務輪轉運行時間片的長度,當時間片用完或者調用阻塞式API函數時,任務切換。時間片的長度可以自己設置,時間片太短任務會頻繁地切換,降低了CPU的效率;而時間片太長又會造成實時響應變差,一般選擇100 ms[1]。FreeRTOS上的MQTT應用包含的任務以及優先級設計如圖4所示。

qrs3-t4.gif

3.4 應用

    在海下通過海流計和水深計收集數據,并經過水密網線傳輸到浮標上的服務器,代理服務器選擇mosquitto軟件。首先通過W5500的Socket編程實現系統的網絡通信功能,在此基礎上進行MQTT的任務設計。在任務編寫過程中為了簡潔將W5500數據發送和接收封裝到MQTT函數Mqtt_SendPkt、Mqtt_RecvPkt中。

    (1)Receive_task:優先級設為9。調用Mqtt_InitContext函數,初始化MqttContext即MQTT運行上下文,并將設置MqttContext中的回調函數及關聯參數;調用Mqtt_RecvPkt函數接收服務器消息,函數內封裝了W5500的接收函數,當接收到數據會進入中斷,調用函數讀取。在Mqtt_RecvPkt函數中對接收到的數據進行解析,低于2 B的數據標記錯誤。調用Mqtt_Dispatch函數對收到的數據的第一個字節高4位控制報文類型進行解析,根據報文類型回調響應函數或者設置標志位。例如收到的是PUBREC控制報文,則調用響應函數發布PUBREL報文。任務流程如圖5所示。

qrs3-t5.gif

    (2)Heart_task:優先級設為8。在網絡連接的情況下通過Mqtt_PackPingReqPkt封裝數據包,PINGREQ報文固定頭部第一字節高4位設為12,即報文類型為心跳請求,低4位為0,剩余長度字節為0,即沒有可變報頭和有效載荷,通過Mqtt_SendPkt發送后掛起任務,等待響應。當接收任務收到了消息并解析為PINGRESP報文,標記收到心跳響應;若超過檢測次數還沒有收到心跳響應,則調用getSn_SR函數,獲取Socket連接狀態;如果連接失敗,標記設備錯誤,否則標記協議錯誤,之后掛起任務2 min15 s。在CONNECT報文的可變報頭中設置心跳時間Keep Alive,單位是s,這里設置為180。任務流程如圖6所示。

qrs3-t6.gif

    (3)Fault_task:優先級為7。根據標志位,如果協議出錯,則發送DISCONNECT報文,然后發送CONNECT報文進行重新連接;如果設備出錯,則發送DISCONNECT報文,斷開網絡連接,進行W5500芯片的初始化,最后進行MQTT重新連接。

    (4)Sensor_task:優先級為6。檢測海流計和水深計的存在,并讀取海流計或水深計的數據。

    (5)Send_task:優先級為5。在網絡連接的情況下,調用Mqtt_PackPublishPkt封裝數據,設置報文格式為PUBLISH,服務質量為至少分發一次,retain設置為1。在水深計中報文設置如表2,設置固定報頭剩余長度為13、可變報頭主題名為depth、有效載荷為4 B的水深計數據;在海流計中設置固定報頭剩余長度為59、可變報頭主題名為current、有效載荷是海流計的數據,其中第5~8個字節為溫度,第29~32字節是方位,第33~36字節是流速,第45~48字節是電壓。例如:海流計數據pval,9.381,-0.311,-0.993,-0.221,0.340,0.439,197.586,

164.580,-0.423,0.117,12.132。調用Mqtt_SendPkt發送數據。最后掛起任務2 min。數據封裝和發送在臨界段內執行,防止被中斷打斷。

qrs3-b2.gif

    (6)Key_task:優先級為4。掃描按鍵,不同按鍵分別代表訂閱消息、取消訂閱和發布消息。

    (7)Net _task:優先級設為3。首先初始化W5500以太網芯片,進行網絡連接,然后Mqtt_PackConnectPkt封裝連接包。固定頭中報文類型設為CONNECT,在可變頭中設置協議名為MQTT,協議級別的值為4,即3.1.1版本。本文不支持遺囑,故連接標志字節設為0xC6,設置Keep_alive為180 s,根據連接標志字節的設置,在有效載荷中按順序設置客戶端標識符、用戶名、密碼。由Mqtt_SendPkt發送連接包,如果接收任務收到了服務器發來的CONNACK,蜂鳴器短鳴5次,提示成功;如果超時還沒連接成功,蜂鳴器長叫,提示失敗,并標記為硬件錯誤,然后初始化W5500,重新進行網絡連接。任務流程如圖7所示。

qrs3-t7.gif

    (8)Date_task:優先級設為2。根據按鍵任務設置的不同標志位執行不同的命令函數,上傳數據函數、發布消息函數、訂閱消息函數以及取消訂閱函數。其中海流計中訂閱消息函數在有效載荷中設置主題名為depth,獲取水深計數據;水深計中訂閱消息函數在有效載荷中設置主題名為current,獲取海流計數據,設置服務質量QoS為1。

4 結論

    本文應用了海流計和水深計收集數據,在此基礎上可以加入更多傳感器收集數據,形成海洋監測網絡,實現物物相連。通過對服務器獲取的信息進行分析就能獲取當前海洋的信息數據,實現了對海洋的實時監測。

參考文獻

[1] 劉濱.嵌入式操作系統FreeRTOS的原理與實現[J].單片機與嵌入式系統,2005(7):8-11.

[2] 馬躍,孫翱,賈軍營.MQTT協議在移動互聯網即時通信中的應用[J].計算機系統應用,2016(3):170-176.

[3] 姚丹,謝雪松.基于MQTT協議的物聯網通信系統的研究與實現[J].信息通信,2016(3):33-35.

[4] 王慧明.FreeRTOS在coldfire上的實現和應用[J].微計算機信息,2016(7):74-76.


作者信息:

朱明輝1,2,趙信廣1,2,尤星懿1

1.山東科技大學 電氣與自動化工程學院,山東 青島266590;2.山東省科學院 海洋儀器儀表研究所,山東 青島266100

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 久久成年片色大黄全免费网站 | 国产激情自拍 | 亚洲天堂视频在线观看免费 | 视频在线观看一区 | 亚洲精品国产福利一区二区三区 | 又刺激又黄的一级毛片 | 暖暖在线精品日本中文 | 日本免费特黄aa毛片 | 国产精品女在线观看 | 高清成人爽a毛片免费网站 高清大学生毛片一级 | 偷偷操不一样的久久 | 国产男女 爽爽爽爽视频 | 日产乱码精品一二三区 | 婷婷丁香花麻豆 | 欧美在线一级毛片观看 | 国产一区二区三区视频 | 亚洲综合色一区二区三区小说 | 亚洲成在人线中文字幕 | 国产自制一区 | 一男一女搞黄 | 亚洲成人影院在线观看 | 国产成人精品高清在线观看99 | 九九草在线观看 | jyzzjyzz国产免费观看 | 国产一区二区福利久久 | 九色福利 | 精品国产一二三区 | 综合另类 | 伊人青| 日韩国产午夜一区二区三区 | 一级毛片中文字幕 | 99精品国产免费久久国语 | 亚洲精品一区二区三区四 | 日韩加勒比在线 | 久久成人网18网站 | 福利社在线 | 国产农村乱子伦精品视频 | 男女牲高爱潮免费视频男女 | 亚洲免费网址 | 韩国毛片在线观看 | 亚洲精品不卡视频 |