開源地址:https://gitee.com/bltas/earthworm_home
概述:
小型蚯蚓養殖監控系統主要探索在家庭等局限場地下,蚯蚓的正常養殖,從而得到蚯蚓糞和蚯蚓液。系統基于ART-PI & RT-Studio 開發,使用了dht11,ds18b20,土壤濕度,mpu6050監測養殖環境中的空氣溫濕度,土壤溫濕度和蚯蚓的抖動密度。外置的風扇和水泵對上述環境變量進行控制。連接onenet后可以及時在后臺遠程觀測環境變量并加以控制。
開發環境
硬件:ART-Pi STM32H750
擴展板:DS18B20防水數字溫度傳感器,DHT11溫濕度傳感器,2pcs MPU6050 傳感器,土壤濕度傳感器
RT-Thread版本:RT-Thread V 4.0.3
開發工具及版本:RT-studio2.0.0
RT-Thread使用情況概述
調度器:創建多個線程來實現不同的工作。
信號量:用來同步線程。
互斥量:多個相關采集線程能同時獲得系統資源,不被其他線程搶占
消息隊列:用來實現采集線程,控制線程和OneNet upload線程的同步。
消息郵箱:onenet_mqtt 接受控制命令后和控制線程的同步
組件部分:I2c框架, Sensor框架
I2C框架:使用 I2C框架來驅動MPU6050
ADC device: 用來采集土壤濕度
PWM device: 用來控制風扇,水泵。
Sensor框架:MPU6050,DHT11,DS18b20均為基于sensor框架的包,為上層提供統一的操作接口,提高上層代碼的可重用性;簡化底層驅動開發的難度。
軟件包部分:
Webclient:提供設備與 HTTP Server 的通訊的基本功能。
pahomqtt:本軟件包是在 Eclipse paho-mqtt 源碼包的基礎上設計的一套 MQTT 客戶端程序。
Onenet:是 RT-Thread 針對 OneNET 平臺連接做的的適配,通過這個軟件包,可以讓設備在 RT-Thread 上非常方便的連接 OneNet 平臺,完成數據的發送、接收、設備的注冊和控制等功能。
cJSON: C語言實現的極簡的解析 JSON 格式的軟件包。
DHT11: GPIO模擬單總線協議,讀取傳感器溫濕度,注冊在sensor框架
Ds18b20: GPIO模擬單總線協議,讀取傳感器溫度,注冊在sensor框架
MPU6050: 本軟件包是為 InvenSense 公司的六軸系列傳感器提供的通用傳感器驅動包,可選I2C或SPI通信協議。通過 Sensor 框架,開發者可以快速的將此傳感器驅動起來。
硬件框架
ART-Pi 外掛多個傳感器作為采集輸入設備, 水泵和風扇作為控制設備。ART-Pi本身作為Onenet的一個終端設備來上傳數據接收和接收命令。
軟件框架說明
多個采集線程實時讀取環境中的溫濕度,發送到stream消息隊列;Onenet上傳線程接收消息并上傳到相應stream。當云端下發命令,觸發Onenet_cmd_rsp_cb, 在里面發送接收的控制命令到命令緩存郵箱,控制線程查詢郵箱,發現郵件后使用rt_mq_urgent發送緊急控制stream,及時同步云端控制設備的狀態。
軟件模塊說明
共創建了2個信號量,1個消息隊列,1個互斥量,7個線程
信號量:
mqttinit_sem 主要用于wifi的連接及onenet_mqtt_init的同步問題。
sensor_msg_sem_empty 主要限制采集線程占用的消息資源個數
5個采集線程:
adc1_5_entry:周期性讀取土壤濕度傳感器的值,并把讀取到的值發送到消息隊列sensor_msg_mq
read_dhtll_entry:周期性讀取DHT11溫濕度傳感器的值,并把讀取到的值發送到消息隊列sensor_msg_mq
read_ds18b20_entry:周期性讀取ds1b20 土壤溫度傳感器的值,并把讀取到的值發送到消息隊列sensor_msg_mq
read_gyro0_entry: 周期性讀取MPU6050_0六軸傳感器的Y軸角速度,作為蚯蚓活動強度(間接反映蚯蚓密度和活性情況),并把讀取到的值發送到消息隊列
read_gyro1_entry: 同上,兩點測量。
消息隊列:
sensor_msg_mq: 為了同步采集線程,控制線程和云端的同步。由于Onenet數據刷新有要求,更新數據快了也沒用,這里設置為1s. 生產者過多,消費速率過慢,最終都會過剩。只分配5個消息給到采集線程。
另外,雖然我們開辟了8個消息,但是我們使用了sensor_msg_sem_empty 信號量來限制采集線程只能使用5個,留下的3個用來快速同步控制流,及時刷新云端控制設備的狀態。
互斥量:
sensor_msg_mutex: 由于DHT11同時讀取了溫度和濕度兩個環境變量,對應云端兩個stream,需要發送兩次消息,為確保兩個stream的同步,先獲取互斥量,在未全部發送完成之前不釋放互斥量。
消息郵箱:
sensor_msg_mailbox:云端發送命令間隔沒有明確的限制,存在連續操作,需要緩存一下,這里設置了16個郵件。在Onenet_cmd_rsp_cb里把接收的命令直接發送到郵箱,控制線程接收郵件并處理。
控制線程:
center_control_entry:從sensor_msg_mailbox郵箱里接收郵件,解析命令,控制設備,并同步設備狀態到云端。
上傳線程:
onenet_upload_entry: 長等待方式從隊列里接收消息,然后根據消息里的stream_id發數據到 onenet云端不同的數據流
狀態線程:
Main:led 2s閃爍,指示當前系統的運行狀態。
編輯:jq
-
RT-Thread
+關注
關注
31文章
1304瀏覽量
40296
原文標題:【RT-Thread 開源作品秀】小型蚯蚓養殖監控系統
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論