锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【RT-Thread 开源作品秀】小型蚯蚓养殖监控系统

时间:2023-12-06 19:37:01 土壤系列传感器

开源地址:https://gitee.com/bltas/earthworm_home


概述:

小蚯蚓养殖监测系统主要探索蚯蚓在家庭等有限场所的正常养殖,从而获得蚯蚓粪和蚯蚓液。系统基于ART-PI & RT-Studio 开发,使用dht11,ds18b20、土壤湿度,mpu监测养殖环境中的空气温湿度、土壤温湿度和蚯蚓的抖动密度。上述环境变量由外部风扇和水泵控制。连接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,云控制设备的状态及时同步。


软件模块说明

共创建了两个信号,一个消息队列,一个相互排斥,七个线程

信号量:

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_06轴传感器的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闪烁指示当前系统的运行状态。

演示效果

您可以添加微信17775982065作为好友,注明:公司 姓名,拉进 RT-Thread 官方微信交流群!

???点击阅读原文进入开源地址

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章