• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于MQTT協(xié)議的智慧農(nóng)場智能化管理系統(tǒng)

      2018-09-07 02:31:52,
      關(guān)鍵詞:開發(fā)板農(nóng)場單片機

      (四川大學(xué)錦城學(xué)院 計算機與軟件學(xué)院,成都 610041)

      引 言

      將智慧農(nóng)場作為一個實際項目用來開發(fā)研究,就需要在硬件、所用協(xié)議這些方面作出選擇,開發(fā)人員要根據(jù)實際情況,在考慮成本、功耗、可靠性和可操作性等方面提出較為優(yōu)化的方案。在本文中,筆者選用的開發(fā)環(huán)境以STM32開發(fā)板作為基礎(chǔ),運用RS485總線及MODBUS協(xié)議將農(nóng)場中各傳感器串聯(lián)后接入單片機,以外接的W5500模塊實現(xiàn)STM32開發(fā)板到服務(wù)器的連接通信,最后采用MQTT協(xié)議實現(xiàn)農(nóng)場數(shù)據(jù)的遠程監(jiān)控和命令接收,并通過STM32開發(fā)板上另一外接模塊——繼電器執(zhí)行接收到的命令。開發(fā)環(huán)境連接結(jié)構(gòu)概念圖如圖1所示。

      圖1 開發(fā)環(huán)境連接結(jié)構(gòu)概念圖

      1 智慧農(nóng)場及MQTT協(xié)議說明

      1.1 智慧農(nóng)場簡介

      智慧農(nóng)場就是運用一系列嵌入式技術(shù),如傳感器技術(shù)、實時操作系統(tǒng)多任務(wù)技術(shù)、單片機技術(shù)、物聯(lián)網(wǎng)技術(shù)等實現(xiàn)農(nóng)場環(huán)境數(shù)據(jù)化并遠程傳輸,保證了對農(nóng)場情況的實時有效監(jiān)控,更加利于農(nóng)場中作物的生長。在智慧農(nóng)場中,一切的行為基于數(shù)據(jù),農(nóng)作物的生長依靠數(shù)據(jù)監(jiān)控,不同于以往依據(jù)經(jīng)驗對作物的環(huán)境進行選擇或改變,如此標(biāo)準(zhǔn)化生產(chǎn)能夠提供給作物最適合的環(huán)境,培養(yǎng)出最優(yōu)質(zhì)的作物。

      智慧農(nóng)場是現(xiàn)代農(nóng)業(yè)發(fā)展的必然趨勢,它通過數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)傳輸、數(shù)據(jù)應(yīng)答這幾個步驟,對農(nóng)場環(huán)境有效監(jiān)控并根據(jù)不同環(huán)境變化進行遠程硬件控制來改變農(nóng)場環(huán)境,使得農(nóng)場決策更加智能有效,管理更加精準(zhǔn)高效。

      1.2 MQTT協(xié)議簡介

      MQTT協(xié)議是一個支持所有平臺,幾乎可以把所有聯(lián)網(wǎng)物品和外部連接起來,通過特定的主題進行數(shù)據(jù)發(fā)布/訂閱的工具。在智慧農(nóng)場中通過該協(xié)議將傳感器采集并匯集在STM32開發(fā)板上的各項數(shù)據(jù)在云服務(wù)器中進行發(fā)布,通過手機APP端進行訂閱,實時遠程監(jiān)控各項數(shù)據(jù)。同時也可以通過手機APP端進行農(nóng)場操作命令的發(fā)布,由STM32開發(fā)板進行訂閱后對命令進行解析,控制農(nóng)場中的硬件執(zhí)行相應(yīng)動作。

      MQTT協(xié)議中獨特的發(fā)布/訂閱模式使發(fā)布者與訂閱者之間沒有直接關(guān)系,不需要建立直接的連接,只需要通過同一個消息代理即可進行消息的通信,且在消息傳輸過程中發(fā)布者不會被鎖定,訂閱者也可以隨時選擇時間進行消息的訂閱,使得消息的傳輸更加自由。在一定程度上來說,MQTT協(xié)議就如同電子郵箱,作為收件人與發(fā)件人交流的平臺,提供了一個消息的容器,但卻并不會妨礙雙方的取出和繼續(xù)放入。MQTT系統(tǒng)模型圖如圖2所示。

      圖2 MQTT系統(tǒng)模型圖

      2 智慧農(nóng)場網(wǎng)絡(luò)通信實現(xiàn)

      傳感器數(shù)據(jù)在采集完成后均需通過RS485總線的傳輸傳送到單片機上,由單片機進行數(shù)據(jù)的匯總后再打包通過網(wǎng)絡(luò)發(fā)布,因此實現(xiàn)單片機的網(wǎng)絡(luò)通信是MQTT協(xié)議移植實現(xiàn)的前提條件。由于STM32開發(fā)板并無網(wǎng)絡(luò)模塊,所以為了使其能夠聯(lián)網(wǎng)與服務(wù)器進行數(shù)據(jù)交互,在實際開發(fā)過程中需要外接一片W5500有線網(wǎng)絡(luò)連接模塊。W5500 芯片是一款集成全硬件 TCP/IP協(xié)議棧的嵌入式以太網(wǎng)控制器,為單片機提供了更加簡單、快速、穩(wěn)定、安全的以太網(wǎng)接入方案。其與STM32開發(fā)板采用SPI接口進行連接,然后借助TCP/IP協(xié)議,在已知服務(wù)器的IP地址及所用端口號的情況下,與服務(wù)器進行點對點的即時信息傳輸。

      農(nóng)場網(wǎng)絡(luò)通信這一部分的設(shè)計可以分為服務(wù)器通信和網(wǎng)絡(luò)連接兩個小模塊,分別實現(xiàn)W5500模塊通過TCP/IP協(xié)議與外接設(shè)備通信和W5500模塊聯(lián)網(wǎng)這兩個功能。在開發(fā)初期可先使用計算機作為服務(wù)器,將W5500模塊通過網(wǎng)線與計算機實現(xiàn)硬件連通,然后借用YAT軟件實現(xiàn)計算機到服務(wù)器的模擬,將連接和通信過程可視化,在YAT軟件端輸出一串字符并通過回傳機制再次在YAT中打印出來,測試W5500模塊的傳輸功能是否實現(xiàn),完成第一個小模塊的設(shè)計。W5500模塊傳輸功能測試圖如圖3所示。

      圖3 W5500模塊傳輸功能測試圖

      在確定W5500模塊傳輸功能無誤后,便可進入第二個小模塊的設(shè)計。將W5500模塊通過網(wǎng)線與農(nóng)場中的路由器進行有線連接,使其能夠通過網(wǎng)絡(luò)遠程連接云服務(wù)器,這個過程中可以采用PUTTY軟件對遠程云服務(wù)器是否接收到消息進行監(jiān)聽。在PUTTY中登陸項目的云服務(wù)器,通過nc對該云服務(wù)器中在代碼段內(nèi)被設(shè)置的端口進行監(jiān)聽,同時也可在PUTTY中直接通過該端口向STM32開發(fā)板端發(fā)送消息,由W5500模塊接收并在串口中打印回傳??蓞⒖糤IZNET官網(wǎng)中的STM32+W5500實現(xiàn)客戶端的代碼,這樣就完成了MQTT協(xié)議移植的前提工作。PUTTY軟件監(jiān)聽服務(wù)器連接圖如圖4所示。

      圖4 PUTTY軟件監(jiān)聽服務(wù)器連接圖

      3 MQTT移植實現(xiàn)

      3.1 MQTT代碼包移植

      圖6 串口打印信息

      圖5 MQTT協(xié)議包移植圖

      在確認STM32開發(fā)板可經(jīng)由W5500模塊聯(lián)網(wǎng)與云服務(wù)器進行通信后,即可開始做代碼段中MQTT協(xié)議的移植了。MQTT協(xié)議的移植首先需要從eclipse paho中的Embedded MQTT C/C++ Client Libraries中下載MQTT協(xié)議的代碼包,將代碼包中的MQTTClient及MQTTPacket文件夾以包的形式添加到W5500的工程中。MQTTClient包中只需包含原文件夾中名為MQTTClient.c和MQTTClient.h的文件即可,而在MQTTPacket包中則需包含原文件夾中src目錄下的所有.c和.h文件。除此之外,MQTTClient包中還需根據(jù)MQTTClient.c中程序的需要新編寫一個.c程序及其對應(yīng)的.h文件,根據(jù)項目實際情況可命名為MQTTInterface.c和MQTTInterface.h,主要目的為對MQTTClient.c程序中出現(xiàn)的函數(shù)及類進行定義,使其可以正常使用。至此,MQTT協(xié)議的植所需要新添加的包及文件已添加完畢,但需要注意的是在進行MQTTInterface.c和MQTTInterface.h的編寫時需要耐心對照,認真剖析MQTTClient.c文件中各個函數(shù)的功能和作用。MQTT協(xié)議包移植圖如圖5所示。

      3.2 主函數(shù)編寫

      包移植完成后開始編寫主函數(shù),主函數(shù)編寫可直接在W5500工程的main.c文件中完成。在原有基礎(chǔ)上,將移植了MQTT協(xié)議后添加的庫文件名加入頭部,再將main函數(shù)中的自while語句開始的執(zhí)行回環(huán)功能的代碼部分進行刪除。然后調(diào)用MQTT協(xié)議相關(guān)的MQTTConnect、MQTTSubscribe和MQTTPublish等函數(shù),實現(xiàn)STM32開發(fā)板端對MQTT的連接和對MQTT協(xié)議發(fā)布/訂閱的運用,并可在調(diào)用成功后加入打印的語句,將調(diào)用成功的信息通過串口打印進行提示。最后在main函數(shù)之前編寫一個對接收到的消息進行打印的messageArrived函數(shù),messageArrived函數(shù)和main函數(shù)的編寫都可借鑒之前下載的MQTT協(xié)議代碼包中的MQTTClient-C目錄下的sample目錄中的MQTTEcho.c文件,至此便基本完成了MQTT協(xié)議基于STM32開發(fā)板的移植。串口打印信息如圖6所示。

      3.3 移植實現(xiàn)測試

      在代碼編寫完成并且串口能將預(yù)設(shè)的信息進行打印時,便可使用MQTT.fx軟件登陸云服務(wù)器對其進行MQTT協(xié)議的運用。MQTT.fx是一款常用的MQTT協(xié)議調(diào)試軟件,包含了MQTT常見的發(fā)布/訂閱兩個選項,可在設(shè)置中輸入自己的云服務(wù)器地址及發(fā)布/訂閱的topic后進行連接。在這里可以通過MQTT.fx對STM32開發(fā)板端發(fā)布的各項傳感器數(shù)據(jù)進行訂閱,也可在發(fā)布選項中向STM32開發(fā)板端發(fā)布一些命令,由單片機端進行訂閱后解析執(zhí)行。MQTT.fx訂閱單片機端數(shù)據(jù)圖如圖7所示。MQTT.fx發(fā)布命令圖如圖8所示。

      圖7 MQTT.fx訂閱單片機端數(shù)據(jù)圖

      圖8 MQTT.fx發(fā)布命令圖

      結(jié) 語

      MQTT的設(shè)計思想是開源、可靠、輕巧、簡單,這在一定程度上拓寬了其應(yīng)用范圍,而且由于開源,符合智慧農(nóng)場中低成本的要求,且它擁有QOS0、QOS1和QOS2三種不同的服務(wù)質(zhì)量,可以保證消息傳輸?shù)目煽啃?,用戶可在第一時間了解農(nóng)場中的環(huán)境變化,以便盡快發(fā)布命令,由STM32開發(fā)板端控制農(nóng)場中的硬件做出相應(yīng)的操作。這就最大限度地保證了農(nóng)場環(huán)境可以保持在最適合作物生長的各項數(shù)值范圍內(nèi),同時也保證了各項資源 的高效利用,從而實現(xiàn)智慧農(nóng)場的開發(fā)目標(biāo)。并且因為MQTT協(xié)議無需訂閱者與發(fā)布者進行直連,這在一定程度上降低了農(nóng)場設(shè)備隨時進行消息傳輸?shù)墓模鰪娏宿r(nóng)場通過移動設(shè)備進行遠程操控的可行性。

      猜你喜歡
      開發(fā)板農(nóng)場單片機
      農(nóng)場假期
      英語文摘(2022年2期)2022-03-16 06:16:14
      基于單片機的SPWM控制逆變器的設(shè)計與實現(xiàn)
      電子制作(2019年13期)2020-01-14 03:15:28
      農(nóng)場
      小太陽畫報(2019年8期)2019-09-11 07:01:50
      基于單片機的層次漸變暖燈的研究
      電子制作(2019年15期)2019-08-27 01:12:10
      基于單片機的便捷式LCF測量儀
      電子制作(2019年9期)2019-05-30 09:42:02
      Microchip最新推出兩款PIC32 Curiosity開發(fā)板
      一號農(nóng)場
      美食(2017年2期)2017-02-17 06:10:18
      淺析單片機開發(fā)板的設(shè)計與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      豐收的農(nóng)場
      Microchip推出兩個全新PIC單片機系列
      剑阁县| 来安县| 尖扎县| 香格里拉县| 泰州市| 莱芜市| 泗水县| 唐海县| 石渠县| 上犹县| 酒泉市| 辽阳市| 漳州市| 祁阳县| 博客| 吴旗县| 西贡区| 海林市| 辉县市| 泾阳县| 定西市| 陆河县| 神木县| 安阳市| 广宁县| 安新县| 忻城县| 威海市| 南城县| 平陆县| 云安县| 聂荣县| 绥江县| 安岳县| 建宁县| 罗城| 洞头县| 太湖县| 蓬莱市| 安福县| 大渡口区|