《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于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網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久一区二区三区超碰国产精品| 欧美日韩在线播放一区二区| 一区二区三区.www| 亚洲激情视频网站| 久久国产日韩| 欧美一站二站| 亚洲欧美日本日韩| 亚洲在线一区二区三区| 亚洲无线视频| 在线性视频日韩欧美| 亚洲免费观看| 亚洲精品综合精品自拍| 亚洲片区在线| 亚洲欧洲日产国产网站| 亚洲激情成人| 亚洲精品久久久久久一区二区| 亚洲电影网站| 亚洲激情第一区| 亚洲免费高清视频| 一区二区三区四区五区视频 | 亚洲经典一区| 亚洲人成人99网站| 亚洲精品国产日韩| 日韩小视频在线观看| 一本色道久久综合亚洲精品不| 亚洲区国产区| 一区二区三区 在线观看视| 一本久道久久综合婷婷鲸鱼| 中文精品一区二区三区| 亚洲影视在线播放| 久久aⅴ乱码一区二区三区| 欧美中文字幕精品| 亚洲国产精品第一区二区三区| 亚洲欧洲日本mm| 一区二区三区.www| 午夜精品福利在线| 久久久精品久久久久| 免费国产自线拍一欧美视频| 欧美精品乱人伦久久久久久| 欧美三日本三级少妇三2023| 国产精品久久久久久久久久久久| 国产女主播一区二区三区| 国内精品伊人久久久久av影院 | 国产精品99久久久久久久女警| 亚洲一区网站| 久久精品中文| 欧美精品一区二区三区蜜臀| 国产精品久久久久久久久免费樱桃| 国产女精品视频网站免费| 在线播放视频一区| 日韩视频在线你懂得| 亚洲一区二区三区影院| 亚洲高清免费| 亚洲一级二级| 久久综合网hezyo| 欧美日韩国产在线一区| 国产免费亚洲高清| 亚洲高清中文字幕| 亚洲午夜精品网| 亚洲国产精品v| 亚洲欧美精品中文字幕在线| 麻豆成人av| 国产精品乱子久久久久| 影音先锋日韩有码| 国产精品99久久不卡二区 | 亚洲欧美综合精品久久成人| 老司机精品视频网站| 欧美小视频在线观看| 黑人巨大精品欧美一区二区| 日韩一区二区精品| 久久精品成人一区二区三区| 中文一区二区在线观看| 久久免费国产精品| 欧美视频国产精品| 激情视频一区二区三区| 亚洲视频福利| 91久久精品日日躁夜夜躁欧美| 亚洲欧美中文日韩在线| 欧美精品色网| 国产亚洲va综合人人澡精品| 99视频在线观看一区三区| 亚洲国产老妈| 久久高清福利视频| 欧美性久久久| 亚洲区在线播放| 亚洲第一视频网站| 性欧美暴力猛交另类hd| 欧美日韩国产影片| 亚洲福利av| 久久激情视频免费观看| 欧美一级大片在线观看| 欧美日韩精品免费| 一区二区三区中文在线观看 | 在线综合欧美| 免费欧美日韩| 国语自产偷拍精品视频偷| 亚洲影视在线| 亚洲男人第一av网站| 欧美日韩精品一区| 亚洲欧洲在线一区| 亚洲精品老司机| 免费欧美日韩国产三级电影| 国产在线欧美日韩| 欧美一区成人| 久久国产精品久久久久久电车| 国产精品美女久久福利网站| 99视频精品全部免费在线| 艳妇臀荡乳欲伦亚洲一区| 欧美成人一区二区三区在线观看 | 久久手机精品视频| 国产日韩欧美日韩大片| 亚洲午夜激情在线| 亚洲免费视频中文字幕| 欧美私人网站| av不卡在线观看| 9l视频自拍蝌蚪9l视频成人| 欧美激情麻豆| 亚洲国产专区校园欧美| 亚洲精品久久久久| 欧美国内亚洲| 亚洲精品日韩久久| 日韩天堂在线视频| 欧美人与性动交a欧美精品| 亚洲日韩欧美视频| 亚洲最新中文字幕| 欧美日本网站| 一本一本久久| 午夜精品免费| 国产精品视频一| 性久久久久久久久| 久久久一区二区| 伊人久久成人| 亚洲精品视频免费观看| 欧美日韩国产精品专区| 日韩一本二本av| 亚洲免费婷婷| 国产日韩一区二区三区| 久久精品人人| 欧美精品三级日韩久久| 亚洲精选大片| 亚洲一区二区三区777| 国产精品青草久久久久福利99| 亚洲欧美三级在线| 久久精品国产欧美激情| 精品成人一区二区| 99精品免费| 国产精品久久久久久久久久久久久久| 亚洲伊人伊色伊影伊综合网| 久久国产精品久久久久久电车| 韩国女主播一区| 亚洲伦理久久| 国产精品久久久一区二区三区| 午夜激情久久久| 免费在线观看日韩欧美| 最新亚洲激情| 午夜一区在线| 精品电影一区| 一区二区高清视频在线观看| 国产精品日日摸夜夜摸av| 欧美在线精品免播放器视频| 欧美aⅴ一区二区三区视频| 99国内精品久久| 久久精品视频va| 亚洲激情第一区| 欧美亚洲网站| 亚洲成人自拍视频| 亚洲性色视频| 国产一区二区三区无遮挡| 亚洲人成网站影音先锋播放| 国产精品久久久久aaaa| 久久国产一区二区| 欧美日韩国产精品一区| 午夜在线播放视频欧美| 欧美第一黄色网| 亚洲摸下面视频| 欧美高清日韩| 亚洲欧美日韩精品久久| 欧美国产另类| 午夜在线成人av| 欧美精品亚洲精品| 午夜精品福利在线| 欧美日韩国产片| 欧美影视一区| 欧美日韩情趣电影| 久久精品成人一区二区三区蜜臀 | 免费视频最近日韩| 亚洲一区二区视频| 欧美激情第10页| 午夜一级久久| 欧美特黄视频| 91久久夜色精品国产网站| 国产精品免费福利| 日韩一二在线观看| 国产在线精品成人一区二区三区| 亚洲视频欧美在线| 一区二区视频在线观看| 欧美一级欧美一级在线播放| 亚洲七七久久综合桃花剧情介绍| 久久久久成人精品| 亚洲午夜在线|