STM32
直播中

刘军

7年用户 1361经验值
私信 关注
[问答]

基于嵌入式操作系统的FreeRTOS有哪些功能

基于嵌入式操作系统的FreeRTOS有哪些功能?

回帖(1)

贺楠

2021-9-29 15:02:08
  简介: STM32+ESP8266通过MQTT协议将多传感器数据传输至OnenNet云平台,加入操作系统FreeRTOS进行多任务管理,增删模块和功能简单方便,提高开发效率,可以根据自己的需求快速增加其他传感器模块。基于上个版本改进,加入APP进行远程控制以及查看相关数据。
  1.基于上一个freeRTOS版本改进,利用了mqtt协议的轻量性以及topic(主题)发布与订阅的特性。(上个版本没有topic订阅的功能,只是OneNET官方给的数据流接口,无法通过OneNET转发至个人APP)主要修改传感器数据上传报文的组织形式并加入订阅topic功能,设备控制部分简单修改
  2.加入安卓手机APP进行远程控制,不再使用OneNET自带的应用管理,APP采用图形化编程,对只想快速制作APP的人来说非常友好(有APP制作简单教学)
  3.两个版本,一个版本是多topic版(稍微稳定),一个是单topic版本(随便看看)
  已知缺陷:
  APP存在缺陷,有时候会收不到数据(云平台转发丢包占一定比例,程序应该也有问题,但具体问题暂时不清楚,仅供参考,欢迎各位指出问题)
  偶尔出现esp8266连接不上网络的问题(包括路由器连接,STA设置),大概率接线问题,多复位几次;也可能已经连接上但是串口显示未连接,可以试试去掉wifi指令控制的返回值判定。
  注:部分功能采用他人开源程序或在他人开源程序的基础上修改。
  1. 相关连接
  1.1 本项目相关连接
  github(源码)
  CSDN(图文解析)
  Bilibili(视频解析)
  1.2 无APP原版连接(有如何在FreeRTOS操作系统中添加其他模块的教程,如传感器,LED任务)
  github(源码)
  CSDN(图文解析)
  Bilibili(视频解析)
  1.3无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置):
  github(源码)
  Bilibili(视频解析)
  CSDN(图文解析)
  1.4 开发工具连接
  APP开发网页连接
  mqtt测试软件连接(Mqtt-device为测试软件,OneNET文档中心,该网址也包括mqtt接入协议详解)
  2. 具体功能
  基于嵌入式操作系统FreeRTOS进行多任务管理,增删模块和功能简单方便
  采集光照强度,温度和湿度数据传输至云平台,云平台将数据转发至APP
  APP可以异地控制LED1的亮灭(通过OneNET云平台数据转发实现异地控制)
  APP可以异地控制LED2功能任务是否执行(通过OneNET云平台数据转发实现异地控制)
  串口显示相关信息
  3. 硬件环境
  正点原子STM32F103RCT6(正点原子MiniSTM32)
  DHT11温湿度传感器
  BH1750(GY30)光照强度传感器
  ESP8266-01S无线模块
  安卓手机
  4. 接线(没改)
  ESP8266-01S(5根线)
  RX PA2
  TX PA3
  复位 PA4
  VCC 3V3
  GND GND
  DHT11(3根线)
  DATA PA6
  VCC 3V3
  GND GND
  BH1750(5根线)
  SCL PC12
  SDA PC11
  ADDR GND
  VCC 5V
  GND GND
  LED
  LED1 PD2
  LED2 PA8
  5. 云平台实例创建
  见1.3无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置,本文不再赘述)
  平台设备由原来1个拓展为3个
  1. MQTT的windows端测试软件(用于测试mqtt数据通信) 2. 安卓APP 3. STM32+ESP8266 6. 基础配置
  6.1 OneNET云平台
  6.2 APP应用管理
  6.2.1APP界面
  6.2.2 APP开发界面(部分)
  mqtt服务器URI: tcp://mqtt.heclouds.com:6002
  设备—客户端标识
  产品ID—用户名称
  Master-APIkey ----密码
  
  6.3 串口数据
  波特率根据自己需求修改(太慢偶尔出现乱码)
  6.4 MQTT的windows端测试软件
  要填的位置已经标红,如图所示
  设备—DeviceID
  产品ID—productID
  Master-APIkey ----AuthInfo
  
  7. STM32+ESP8266源码详解(未添加额外文件)
  本次代码改写目的是增强拓展性,降低开发难度,所以加入操作系统FreeRTOS进行多任务管理,降低模块(传感器,控制)间耦合性,增删模块和功能简单方便,提高开发效率
  7.1 源码文件解析
  stm32f10x_it.c:中断处理函数
  FreeRTOSConfig.h:FreeRTOS配置头文件
  usart1.c:与串口住手通信
  usart2.c:与ESP8266通信
  timer3.c:定时器3中断用来发送心跳包(ping,用于保持和服务器连接,长时间没给服务器发送数据会被踢下线),2s和30s两种模式
  timer4.c:将串口2接收到的服务器数据依次存放在MQTT接收缓存数组中,50ms没有新数据收到执行
  control.c:处理传感器数据发送至队列及发送设备状态
  dht11.c:DHT11(温湿度传感器)驱动
  bh1750.c:BH1750(GY30,光照强度传感器)驱动
  wifi.c:esp8266的wifi驱动
  mqtt.c:mqtt协议处理相关函数
  FreeRTOS_CORE:freeRTOS功能核心
  FreeRTOS_PORTABLE:freeRTOS板级支持包,和芯片相关,包括接口和内存分配
  7.2 服务器与wifi配置相关
  具体OneNET云平台设备创建和应用配置见:
  1.3 无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置,本文不再赘述)
  7.3 topic与命令配置
  topic根据自己需求更改或者添加
  控制设备命令根据需求更改或者添加
  7.5 源码框架
  
  括号里有“配置”字样的部分是用户必须修改的部分(例程已经配置了LED控制,环境温湿度检测和光照强度监测)
  红色部分为拓展功能模块需要独立编写或者修改的地方
  红色虚线部分根据功能更改,设备控制(任务)需要更改创建MQTT命令缓冲处理任务,数据直接发送至串口发送缓冲区(减少延迟),传感器设备任务需要向消息队列发送传感器数据,经过传感器处理任务处理后发送至串口发送缓冲区
  初始化功能模块:添加拓展模块的初始化函数
  创建用户任务:添加拓展模块任务(传感器数据读取或设备控制)
  创建MQTT命令缓冲处理任务:添加设备控制命令,并发送设备状态(如果添加传感器任务则无需修改)
  创建其他模块任务:实现传感器数据采集功能或者设备控制相关功能,实现传感器数据采集功能时需要红色虚线部分,设备控制不需要(不需要向消息队列发送数据)。
  要实现连接服务器时发送控制设备初始状态的功能需要在创建MQTT数据接收发送缓冲处理任务的connect成功部分添加数据发送函数
  其他部分可根据实际需求修改
  7.6 模块拓展
  拓展传感器及控制设备详细演示见:
  1.2 无APP原版连接(有如何在FreeRTOS操作系统中添加其他模块的教程,如传感器,LED任务)
  传感器任务和上一版本大体相同,主要修改了将topic主题数据发送到消息队列的函数以及数据报文的组织形式(具体实现进行了封装,只需要调用特定函数)
  添加传感器模块的流程如下
  自定义光照强度传感器数据的topic
  声明任务句柄(任务控制卡)及任务函数
  在开始任务中创建任务
  修改对应传感器任务,添加传感器驱动,发送的数据通过send_data_to_queue_int(SUN_TOPIC, sun_light);改成自己的topic和传感器数据
  源程序的后缀为.aia,直接导入即可,APP的后缀为.apk,安卓手机可以直接安装
  红色括号为需要修改的模块
  调用MQTT.订阅: 订阅单片机发送给服务器的主题topic
  设备控制按钮:根据需求添加控制按钮
  调用MQTT客户端。发送消息:设备控制以及获取设备状态
  调用MQTT客户端。收到消息:对消息的解码,复制后根据需求修改字符判定
  9 单topic版本(仅供参考)
  传感器以及控制设备状态集中在一条topic中。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分