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

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

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

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

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

虛擬商品不可退

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

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

作者:Willian Chan 


概述:

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

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

硬件:stm32f407-atk-explorer

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

RT-Thread版本:RT-Thread V 4.0.3

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

RT-Thread使用情況概述

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

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

信號量:用來同步線程。

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

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

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

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

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

軟件包部分

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

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

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

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

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

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

硬件框架

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

軟件框架說明

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

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

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

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

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

軟件模塊說明

發(fā)送節(jié)點:

發(fā)送節(jié)點創(chuàng)建了3個線程,1個消息隊列

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

nrf24l01_send_entry:使用消息隊列來接收傳感器檢測到的溫度值,并通過 BRF24L01 發(fā)送到接收節(jié)點

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

接收節(jié)點:

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

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

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

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

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

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

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

演示效果

視頻觀看:


代碼地址

(附件為代碼地址,下載后打開可見)

比賽感悟

紙上得來終覺淺,絕知此事要躬行。陸游的這首詩,完美的詮釋了我在這次比賽中的收獲。

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

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

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

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

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

相關(guān)推薦

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