加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

【RT-Thread作品秀】分布式溫度監(jiān)控系統(tǒng)

2020/11/24
1046
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買(mǎi)成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買(mǎi)后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
方塊圖(3)
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

作者:Willian Chan 


概述:

分布式溫度監(jiān)控系統(tǒng)基于 STM32 系類(lèi)芯片開(kāi)發(fā),支持采集多達(dá)六個(gè)分節(jié)點(diǎn)的溫度數(shù)據(jù),網(wǎng)關(guān)節(jié)點(diǎn)收集分節(jié)點(diǎn)的數(shù)據(jù)并通過(guò) WIFI 上傳云端遠(yuǎn)程實(shí)時(shí)監(jiān)視,也可本地連接串口與 PC 端通訊,上位機(jī)實(shí)時(shí)顯示分節(jié)點(diǎn)數(shù)據(jù)。該系統(tǒng)適用于家庭、辦公室、教室等小面積場(chǎng)所的多點(diǎn)溫度監(jiān)控,無(wú)線傳輸距離可達(dá) 100m ~ 500m,具有功耗低,丟包率低,傳輸距離遠(yuǎn)等特點(diǎn),是一個(gè)相當(dāng)實(shí)用的設(shè)計(jì)。

開(kāi)發(fā)環(huán)境

硬件:stm32f407-atk-explorer

擴(kuò)展板DS18B20數(shù)字溫度傳感器,NRF24L01無(wú)線射頻模塊,ESP8266 WIFI模塊

RT-Thread版本:RT-Thread V 4.0.3

開(kāi)發(fā)工具及版本:MDK 5.27

RT-Thread使用情況概述

內(nèi)核部分:調(diào)度器,信號(hào)量,消息隊(duì)列。

調(diào)度器:創(chuàng)建多個(gè)線程來(lái)實(shí)現(xiàn)不同的工作。

信號(hào)量:用來(lái)同步線程。

消息隊(duì)列:用來(lái)實(shí)現(xiàn)線程之間傳遞的數(shù)據(jù)。

組件部分SPI框架, Sensor框架,SAL 套接字抽象層

SPI框架:使用 SPI 框架來(lái)驅(qū)動(dòng)溫度傳感器,上層代碼可以提高代碼的可重用性。

Sensor框架:為上層提供統(tǒng)一的操作接口,提高上層代碼的可重用性;簡(jiǎn)化底層驅(qū)動(dòng)開(kāi)發(fā)的難度,只要實(shí)現(xiàn)簡(jiǎn)單的 ops(operations: 操作命令) 就可以將傳感器注冊(cè)到系統(tǒng)上。

SAL 套接字抽象層:組件完成對(duì)不同網(wǎng)絡(luò)協(xié)議?;蚓W(wǎng)絡(luò)實(shí)現(xiàn)接口的抽象并對(duì)上層提供一組標(biāo)準(zhǔn)的 BSD Socket API,這樣開(kāi)發(fā)者只需要關(guān)心和使用網(wǎng)絡(luò)應(yīng)用層提供的網(wǎng)絡(luò)接口,而無(wú)需關(guān)心底層具體網(wǎng)絡(luò)協(xié)議棧類(lèi)型和實(shí)現(xiàn),極大的提高了系統(tǒng)的兼容性,方便開(kāi)發(fā)者完成協(xié)議棧的適配和網(wǎng)絡(luò)相關(guān)的開(kāi)發(fā)

軟件包部分

Webclient:提供設(shè)備與 HTTP Server 的通訊的基本功能。

pahomqtt,:本軟件包是在 Eclipse paho-mqtt 源碼包的基礎(chǔ)上設(shè)計(jì)的一套 MQTT 客戶端程序。

Onenet:是 RT-Thread 針對(duì) OneNET 平臺(tái)連接做的的適配,通過(guò)這個(gè)軟件包,可以讓設(shè)備在 RT-Thread 上非常方便的連接 OneNet 平臺(tái),完成數(shù)據(jù)的發(fā)送、接收、設(shè)備的注冊(cè)和控制等功能。

cJSON:C語(yǔ)言實(shí)現(xiàn)的極簡(jiǎn)的解析 JSON 格式的軟件包。

at_device:是由 RT-Thread AT 組件針對(duì)不同 AT 設(shè)備的移植文件和示例代碼組成,目前支持的 AT 設(shè)備有:ESP8266、M26、MC20、RW007、MW31、SIM800C 以及 SIM76XX 系列設(shè)備等。

nRF24L01:是一個(gè) RT-Thread 的軟件包,該軟件包提供了 nRF24L01 模塊的驅(qū)動(dòng)。

硬件框架

MCU 定時(shí)讀取 DS180B20 的溫度數(shù)據(jù),然后通過(guò) NRF24L01 傳輸?shù)浇邮展?jié)點(diǎn),接收節(jié)點(diǎn)把數(shù)據(jù)分別傳輸?shù)皆贫撕蚉C上位機(jī)。

軟件框架說(shuō)明

本項(xiàng)目使用分布節(jié)點(diǎn)的方式來(lái)實(shí)現(xiàn)溫度的采集與上傳,從而避免一個(gè)節(jié)點(diǎn)的系統(tǒng)崩潰并不影響到其余的節(jié)點(diǎn),本項(xiàng)目軟件分為兩部分:

第一部分:采集節(jié)點(diǎn)

MCU 上電之后完成板級(jí)外設(shè)初始化,并初始化溫度傳感器DS18B20 準(zhǔn)備采集溫度數(shù)據(jù),無(wú)線射頻芯片NRF24L01,在一切準(zhǔn)備妥當(dāng)之后,就會(huì)定時(shí)向接收節(jié)點(diǎn)發(fā)送溫度數(shù)據(jù)。

第二部分:接收節(jié)點(diǎn)

MCU 上電之后首先完成板級(jí)外設(shè)的初始化,并初始化 ESP8266 實(shí)現(xiàn)與 ONENET 的連接。初始化 NRF24L01 準(zhǔn)備接收來(lái)自采集節(jié)點(diǎn)的溫度信息,接收到節(jié)點(diǎn)發(fā)送過(guò)來(lái)的溫度數(shù)據(jù),分別發(fā)送到 ONENET 平臺(tái)和PC 端上位機(jī)。

軟件模塊說(shuō)明

發(fā)送節(jié)點(diǎn):

發(fā)送節(jié)點(diǎn)創(chuàng)建了3個(gè)線程,1個(gè)消息隊(duì)列

read_temp_entry:周期性的讀取溫度傳感器的值,并把讀取到的值通過(guò)消息隊(duì)列發(fā)送

nrf24l01_send_entry:使用消息隊(duì)列來(lái)接收傳感器檢測(cè)到的溫度值,并通過(guò) BRF24L01 發(fā)送到接收節(jié)點(diǎn)

led_shine_entry:LED 在每次發(fā)送成之后,來(lái)改變當(dāng)前的狀態(tài),來(lái)檢測(cè)當(dāng)前系統(tǒng)的運(yùn)行狀態(tài)

接收節(jié)點(diǎn):

接收節(jié)點(diǎn)創(chuàng)建了6個(gè)線程,1個(gè)信號(hào)量,1個(gè)事件集,2個(gè)ringbuff,1個(gè)郵箱,1個(gè)消息內(nèi)存池

nrf24l01_receive_entry: NRF24L01 數(shù)據(jù)接收線程,正確收到數(shù)據(jù)后會(huì)發(fā)送WRITE_EVENT_P0事件,然后把數(shù)據(jù)放到 ringbuff,申請(qǐng)一塊內(nèi)存池,然后把數(shù)據(jù)放入內(nèi)存池,最后把內(nèi)存池的首地址放到郵箱。

save_recv_p0_data_entry保存數(shù)據(jù)線程,接收WRITE_EVENT_P0 事件后,讀取ringbuff0的數(shù)據(jù),保存 節(jié)點(diǎn)0 的溫度與時(shí)間戳。

save_recv_p1_data_entry保存數(shù)據(jù)線程,接收WRITE_EVENT_P1 事件后,讀取ringbuff1的數(shù)據(jù),保存 節(jié)點(diǎn)1 的溫度與時(shí)間戳。

onenet_mqtt_init_entry初始化 onenet_mqtt, mqtt初始化成功之后,釋放信號(hào)量告知onenet_upload_data_thread線程可以上傳數(shù)據(jù)了,這里會(huì)做循環(huán)處理,周期性的檢查onenet_mqtt的狀態(tài),如果已經(jīng)斷線,就進(jìn)行再次連接。

onenet_upload_data_entry: take信號(hào)量的方式,獲取到信號(hào)量之后,通過(guò)郵箱獲取到的內(nèi)存池首地址去拿到數(shù)據(jù),然后就可以發(fā)數(shù)據(jù)到 onenet云平臺(tái)和PC端上位機(jī)。

led_shine_entry:led 閃爍線程,用來(lái)檢測(cè)當(dāng)前系統(tǒng)的運(yùn)行狀態(tài)。

演示效果

視頻觀看:


代碼地址

(附件為代碼地址,下載后打開(kāi)可見(jiàn))

比賽感悟

紙上得來(lái)終覺(jué)淺,絕知此事要躬行。陸游的這首詩(shī),完美的詮釋了我在這次比賽中的收獲。

時(shí)代的發(fā)展,MCU的性能也越來(lái)越強(qiáng),萬(wàn)物互聯(lián)的需求也愈加強(qiáng)烈,使用RTOS來(lái)實(shí)現(xiàn)物與網(wǎng)的鏈接,是時(shí)代發(fā)展的潮流,通過(guò)綜合對(duì)比,我選擇了國(guó)人自主的 RT-Thread。

通過(guò) RT-Thread官網(wǎng)上的文檔中心,我學(xué)習(xí)了 多線程及其調(diào)度、信號(hào)量、郵箱、消息隊(duì)列、內(nèi)存管理、定時(shí)器等,學(xué)完之后,有種感覺(jué)就是看過(guò)了,我都懂,但是感覺(jué)把這些都融合不起來(lái),通過(guò)這次比賽的項(xiàng)目實(shí)踐,這些知識(shí)點(diǎn)已經(jīng)全部融會(huì)貫通,我對(duì)RTOS也有了全新的認(rèn)識(shí)。

另外就是RT-Thread的軟件包非常的好用,如果沒(méi)有前人提供的軟件包,我可能不會(huì)這么快的完成這個(gè)項(xiàng)目,說(shuō)到這里,由衷的感謝開(kāi)源社區(qū)大佬們的貢獻(xiàn)。

最后感謝主辦方提供了這么好的一個(gè)平臺(tái),不僅能展示自我,也能學(xué)到很多知識(shí),還要感謝論壇上那些解決我問(wèn)題以及制作軟件包的大佬,希望有朝一日我也能給開(kāi)源社區(qū)貢獻(xiàn)一份自己力量。

  • 代碼地址.txt
    描述:代碼地址

相關(guān)推薦

電子產(chǎn)業(yè)圖譜