加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

【RT-Thread作品秀】基于rt-thread的小型蚯蚓养殖监控系统

2020/12/22
614
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
方块图(2)
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

作者:刘涛

概述:

小型蚯蚓养殖监控系统主要探索在家庭等局限场地下,蚯蚓的正常养殖,从而得到蚯蚓粪和蚯蚓液。系统基于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 公司的六轴系列传感器提供的通用传感器驱动包,可选I2CSPI通信协议。通过 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_entrysensor_msg_mailbox邮箱里接收邮件,解析命令,控制设备,并同步设备状态到云端。

上传线程:

onenet_upload_entry: 长等待方式从队列里接收消息,然后根据消息里的stream_id发数据到 onenet不同的数据流

状态线程:

Mainled 2s闪烁指示当前系统的运行状态。

演示效果

图片:

 

 

演示视频

 

比赛感悟

 

一直在了解RT-Thread国产操作系统,教程和书也看过,但缺少一个实际项目动手实际深入一下。赶上这个大赛,又有个感兴趣的方向,就报名了。

首先不得不说一下,RT-Thread写的很友好,可以边查边用。RT-Studio设计的很方便,就是太卡了有时。

项目中,关于线程之间的同步与互斥,调试浪费了些时间,但也更好地理解了它们的定义和用法。实践才能出真知,理论看的再多了,不用还是一知半解,不是自己的真知。

另外一点就是对于RT-Thread软件包架构,我认为这是个很好的创新,可以让应用和硬件完美去耦。一方面可以使用别人已有的软件包快速构建产品,也可以学习参考别人的优秀代码。

   通过这次比赛,我发现了mpu6050软件包的一个bug,提交了第一次pull request。也在制作第一个软件包hx711(测试中,项目暂未用到,待发布)。让我是切实了解了开源社区的魅力。

十分感谢主办方提供的这次比赛机会,让我学到了很多知识,也让我找回来大学时候通宵比赛的感觉。也要感谢社区大佬们制作的软件包,节省了不少开发时间。最后希望RT-Thread越来越好,自己也能参与其中,贡献一份力量。

 

  • 代码地址.txt
    描述:代码
  • 基于rt-thread小型蚯蚓养殖监控系统.pdf

相关推荐

电子产业图谱