加入星計(jì)劃,您可以享受以下權(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作品秀】基于rt-thread的小型蚯蚓養(yǎng)殖監(jiān)控系統(tǒng)

2020/12/22
562
服務(wù)支持:
技術(shù)交流群

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

虛擬商品不可退

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

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

作者:劉濤

概述:

小型蚯蚓養(yǎng)殖監(jiān)控系統(tǒng)主要探索在家庭等局限場地下,蚯蚓的正常養(yǎng)殖,從而得到蚯蚓糞和蚯蚓液。系統(tǒng)基于ART-PI & RT_Studio 開發(fā),使用了dht11,ds18b20,土壤濕度,mpu6050監(jiān)測養(yǎng)殖環(huán)境中的空氣溫濕度,土壤溫濕度和蚯蚓的抖動(dòng)密度。外置的風(fēng)扇和水泵對(duì)上述環(huán)境變量進(jìn)行控制。連接onenet后可以及時(shí)在后臺(tái)遠(yuǎn)程觀測環(huán)境變量并加以控制。

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

硬件:ART-Pi STM32H750

擴(kuò)展板DS18B20防水數(shù)字溫度傳感器,DHT11溫濕度傳感器,2pcs MPU6050 傳感器,土壤濕度傳感器

RT-Thread版本RT-Thread V 4.0.3

開發(fā)工具及版本RT-studio2.0.0

RT-Thread使用情況概述

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

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

互斥量:多個(gè)相關(guān)采集線程能同時(shí)獲得系統(tǒng)資源,不被其他線程搶占

消息隊(duì)列:用來實(shí)現(xiàn)采集線程,控制線程和OneNet upload線程的同步。

消息郵箱onenet_mqtt 接受控制命令后和控制線程的同步

組件部分I2c框架, Sensor框架

I2C框架:使用 I2C框架來驅(qū)動(dòng)MPU6050

ADC device: 用來采集土壤濕度

PWM device: 用來控制風(fēng)扇,水泵。

Sensor框架MPU6050,DHT11,DS18b20均為基于sensor框架的包,為上層提供統(tǒng)一的操作接口,提高上層代碼的可重用性;簡化底層驅(qū)動(dòng)開發(fā)的難度。

軟件包部分

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

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

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

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

DHT11 GPIO模擬單總線協(xié)議,讀取傳感器溫濕度,注冊(cè)在sensor框架

Ds18b20:  GPIO模擬單總線協(xié)議,讀取傳感器溫度,注冊(cè)在sensor框架

MPU6050: 本軟件包是為 InvenSense 公司的六軸系列傳感器提供的通用傳感器驅(qū)動(dòng)包,可選I2CSPI通信協(xié)議。通過 Sensor 框架,開發(fā)者可以快速的將此傳感器驅(qū)動(dòng)起來。

硬件框架

ART-Pi 外掛多個(gè)傳感器作為采集輸入設(shè)備, 水泵和風(fēng)扇作為控制設(shè)備。ART-Pi本身作為Onenet的一個(gè)終端設(shè)備來上傳數(shù)據(jù)接收和接收命令。

軟件框架說明

多個(gè)采集線程實(shí)時(shí)讀取環(huán)境中的溫濕度,發(fā)送到stream消息隊(duì)列;Onenet上傳線程接收消息并上傳到相應(yīng)stream。當(dāng)云端下發(fā)命令,觸發(fā)Onenet_cmd_rsp_cb, 在里面發(fā)送接收的控制命令到命令緩存郵箱,控制線程查詢郵箱,發(fā)現(xiàn)郵件后使用rt_mq_urgent發(fā)送緊急控制stream,及時(shí)同步云端控制設(shè)備的狀態(tài)。

軟件模塊說明

共創(chuàng)建了2個(gè)信號(hào)量,1個(gè)消息隊(duì)列,1個(gè)互斥量,7個(gè)線程

信號(hào)量:

mqttinit_sem 主要用于wifi的連接及onenet_mqtt_init的同步問題。

sensor_msg_sem_empty 主要限制采集線程占用的消息資源個(gè)數(shù)

5個(gè)采集線程:

adc1_5_entry周期性讀取土壤濕度傳感器的值,并把讀取到的值發(fā)送到消息隊(duì)列sensor_msg_mq

read_dhtll_entry周期性讀取DHT11溫濕度傳感器的值,并把讀取到的值發(fā)送到消息隊(duì)列sensor_msg_mq

read_ds18b20_entry:周期性讀取ds1b20 土壤溫度傳感器的值,并把讀取到的值發(fā)送到消息隊(duì)列sensor_msg_mq

read_gyro0_entry 周期性讀取MPU6050_0六軸傳感器的Y軸角速度,作為蚯蚓活動(dòng)強(qiáng)度(間接反映蚯蚓密度和活性情況),并把讀取到的值發(fā)送到消息隊(duì)列

read_gyro1_entry 同上,兩點(diǎn)測量。

消息隊(duì)列:

sensor_msg_mq 為了同步采集線程,控制線程和云端的同步。由于Onenet數(shù)據(jù)刷新有要求,更新數(shù)據(jù)快了也沒用,這里設(shè)置為1s. 生產(chǎn)者過多,消費(fèi)速率過慢,最終都會(huì)過剩。只分配5個(gè)消息給到采集線程。

另外,雖然我們開辟了8個(gè)消息,但是我們使用了sensor_msg_sem_empty 信號(hào)量來限制采集線程只能使用5個(gè),留下的3個(gè)用來快速同步控制流,及時(shí)刷新云端控制設(shè)備的狀態(tài)。

互斥量:

sensor_msg_mutex 由于DHT11同時(shí)讀取了溫度和濕度兩個(gè)環(huán)境變量,對(duì)應(yīng)云端兩個(gè)stream,需要發(fā)送兩次消息,為確保兩個(gè)stream的同步,先獲取互斥量,在未全部發(fā)送完成之前不釋放互斥量。

消息郵箱:

sensor_msg_mailbox云端發(fā)送命令間隔沒有明確的限制,存在連續(xù)操作,需要緩存一下,這里設(shè)置了16個(gè)郵件。在Onenet_cmd_rsp_cb里把接收的命令直接發(fā)送到郵箱,控制線程接收郵件并處理。

控制線程:

center_control_entrysensor_msg_mailbox郵箱里接收郵件,解析命令,控制設(shè)備,并同步設(shè)備狀態(tài)到云端。

上傳線程:

onenet_upload_entry: 長等待方式從隊(duì)列里接收消息,然后根據(jù)消息里的stream_id發(fā)數(shù)據(jù)到 onenet不同的數(shù)據(jù)流

狀態(tài)線程:

Mainled 2s閃爍,指示當(dāng)前系統(tǒng)的運(yùn)行狀態(tài)。

演示效果

圖片:

 

 

演示視頻

 

比賽感悟

 

一直在了解RT-Thread國產(chǎn)操作系統(tǒng),教程和書也看過,但缺少一個(gè)實(shí)際項(xiàng)目動(dòng)手實(shí)際深入一下。趕上這個(gè)大賽,又有個(gè)感興趣的方向,就報(bào)名了。

首先不得不說一下,RT-Thread寫的很友好,可以邊查邊用。RT-Studio設(shè)計(jì)的很方便,就是太卡了有時(shí)。

項(xiàng)目中,關(guān)于線程之間的同步與互斥,調(diào)試?yán)速M(fèi)了些時(shí)間,但也更好地理解了它們的定義和用法。實(shí)踐才能出真知,理論看的再多了,不用還是一知半解,不是自己的真知。

另外一點(diǎn)就是對(duì)于RT-Thread軟件包架構(gòu),我認(rèn)為這是個(gè)很好的創(chuàng)新,可以讓應(yīng)用和硬件完美去耦。一方面可以使用別人已有的軟件包快速構(gòu)建產(chǎn)品,也可以學(xué)習(xí)參考別人的優(yōu)秀代碼。

   通過這次比賽,我發(fā)現(xiàn)了mpu6050軟件包的一個(gè)bug,提交了第一次pull request。也在制作第一個(gè)軟件包hx711(測試中,項(xiàng)目暫未用到,待發(fā)布)。讓我是切實(shí)了解了開源社區(qū)的魅力。

十分感謝主辦方提供的這次比賽機(jī)會(huì),讓我學(xué)到了很多知識(shí),也讓我找回來大學(xué)時(shí)候通宵比賽的感覺。也要感謝社區(qū)大佬們制作的軟件包,節(jié)省了不少開發(fā)時(shí)間。最后希望RT-Thread越來越好,自己也能參與其中,貢獻(xiàn)一份力量。

 

  • 代碼地址.txt
    描述:代碼
  • 基于rt-thread小型蚯蚓養(yǎng)殖監(jiān)控系統(tǒng).pdf

相關(guān)推薦

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