使用STM32CubeMX快速开发基于STM32的室内智能环境监测仪
前言:随着空气污染问题得到越来越多人的关注,雾霾、PM2.5、甲醛等词汇也频繁出现在大家的生活中,特别有小孩、老人的家庭越来越关注PM2.5、甲醛的危害。PM2.5容易引起咳嗽、哮喘呼吸系统疾病,危害人体心血管、生殖系统,导致胎儿畸形,甚至致癌。甲醛也是大家熟知的有害气体,室内、车内甲醛超标也成为非常多的家庭头疼的问题,甲醛是有机气态物质(TVOC)的一种,TVOC能引起机体免疫水平失调,影响中枢神经系统功能以及消化系统。正是空气污染的危害得到越来越多人的重视,空气质量监测的需求也越来越广泛,机智云智能硬件开发平台可以为广大空气检测设备厂商提供可靠的智能解决方案,帮助企业快速开发产品推向市场。本文以室内智能环境监测仪为例,利用机智云自助开发平台,只需30分钟即可搭建产品原型。一、 目标室内智能环境监测仪具备实时采集环境数据的能力,能够监测室内温度、湿度、空气质量3个参数,另外具备排风、污染指数过高报警功能;用户可通过手机APP查看监测信息以及控制排风。原型:二、 方案讨论智能设备多是由单片机/微处理器/微控制器等构成的嵌入式系统,通过各类传感器获取信息,主流的联网方式是嵌入GPRS、WIFI、蓝牙等无线通信模块,从而把数据推送到远程服务器,完成和手机APP/微信/网页等的交互。传统的开发方式,需要开发者编写智能硬件设备底层驱动、无线通信模组应用层协议制定和编写、服务器开发、移动端开发、业务逻辑等,周期长,可维护性差。机智云平台是机智云物联网公司经过多年行业内的耕耘及对物联网行业的深刻理解,而推出的面向个人、企业开发者的一站式智能硬件开发及云服务平台。平台提供了从定义产品、设备端开发调试、应用开发、产测、云端开发、运营管理、数据服务等覆盖智能硬件接入到运营管理全生命周期服务的能力。机智云平台为开发者提供了自助式智能硬件开发工具与开放的云端服务。通过傻瓜化的自助工具、完善的SDK与API服务能力最大限度降低了物联网硬件开发的技术门槛,降低开发者的研发成本,提升开发者的产品投产速度,帮助开发者进行硬件智能化升级,更好的连接、服务最终消费者。通过机智云平台,省去中间环节,开发者只需关注硬件底层驱动(事实上,硬件底层驱动一般由硬件供应商提供)和业务逻辑即可,大大缩短研发周期,节省研发成本。三、设备接入原理
硬件厂商对硬件智能化的第一步是让设备能够联网,GAgent是机智云提供的一款兼容国内主流Wi-Fi模块、移动网络模块的模组系统。硬件厂商只需理解如何与GAgent进行通讯即可。开发者或企业研发人员只需在正在开发的智能硬件上嵌入写好机智云连接协议GAgent的连网模块,即可通过机智云平台实现设备连网及智能化,连网模块包括Wi-Fi、GPRS等主流连网方式,同时还支持BLE、GSM、CDMA、Zigbee、LoRa等联网方案接入。GAgent主要的作用是数据转发,是设备数据、机智云、应用端(APP)的数据交互桥梁。可将GAgent移植到WiFi模组、GPRS模组、PC端等。目前机智云提供由机智云移植的WiFi模组对应固件有:汉枫LPB100、乐鑫8266、汉枫LPT120、高通4004 、RealTek 8711AM 、庆科3162等。
四、开发流程了解了机智云平台功能和设备接入原理后,现在开始30分钟打造室内智能环境监测仪之旅吧~分为3步,一是MCU端开发,二是云端配置,三是设备调试。硬件准备:机智云Gokit扩展板(板载温DHT11湿度传感器、ESP8266无线WIFI模块、直流小电机、RGB三色灯、按键),意法半导体Nucleo-F401RE评估板,PC机;
整个系统结构如下:MCU端开发MCU端的主要工作是编写温湿度传感器、RGB灯、直流小电机、空气质量传感器的驱动代码和与云端交互的业务逻辑。我们采用ST(意法半导体)推出的Nucleo-F401RE板卡作为控制核心,板卡搭载了STM32F401RET6核心微控制器(32位ARM Cortex-M4处理器,带FPU单元,最高84MHz主频、集成512KB Flash和 96KB SRAM),支持Arduino UNO接口。使用STM32CubeMX快速配置STM32F401RET6,我们需要使用的片上外设有:ADC(开启DMA):用于读取空气质量传感器MQ-135输出的模拟量 ;GPIO:编写模拟时序驱动DHT11、RGB 5050灯,读取按键输入PWM:通过驱动IC驱动直流小电机,模拟排风UART:与WIFI模组通信,使设备具备联网能力定时器:扫描按键、系统心跳
详细的配置方法,不再赘述,生成的工程命名为Nucleo-F401RE_Gokit,参考附件PDF报告即可;云端配置
机智云平台是致力于物联网、智能硬件云服务的开放平台。机智云专注于提供智能云服务及物联网的软硬件解决方案 ,帮助传统硬件厂商产品升级,快速实现硬件智能化。要实现硬件的智能化,除了硬件本身外,还需要实现:智能云平台、手机APP、联网模块,每一个领域都需要专业的团队来支撑。机智云提供完整的解决方案,让厂商或开发者只需要专注于自身产品硬件。以最小的成本和风险实现硬件智能化,获得产品最大的增值。创建产品
在机智云开发者中心已成功创建室内智能环境监测仪产品,机智云为该产品分配Product Key和Product Secret参数。Product Key参数由开发者写入设备MCU(设备主控板),并告知WiFi/GPRS模块,WiFi/GPRS模块登录机智云后,机智云将会识别该Product Key的产品。Product Secret参数是APP开发或服务器对接时所使用的参数。创建数据点
数据点即设备产品的功能的抽象,用于描述产品功能及其参数。创建数据点后,设备与云端通讯的数据格式即可确定,设备、机智云可以相互识别设备与机智云互联互通的数据。本次项目需要把MCU获取的温度、湿度、空气质量指数3个参数上传到服务器,这3个参数为数值类型,对于云端来讲只读;直流电机的控制,实际上是手机APP端推送一个具体数值给MCU,MCU利用此数值来控制电机,参数类型为数值,对云端来讲可写;另外我们还定义了一个报警功能,当空气质量指数高于阈值时,向手机端推送一个信号,类型为布尔值,报警。数据点可从excel导入或者导入机智云提供的范例后再修改。自动生成MCU SDK
自动生成的MCUSDK代码实现了机智云通信协议的解析与封包、传感器数据与通信数据的转换逻辑,并封装成了简单的 API。当设备收到云端或 APP 端的数据后,程序会将数据转换成对应的事件并通知到应用层,开发者只需要在对应的事件处理逻辑中添加传感器的控制函数,便可完成产品的开发。这里选择独立MCU方案、硬件平台STM32f103c8x后,机智云直接生成适应STM32f103c8x的keil工程代码。我们本次只需要生成的协议层,因为底层驱动是通过STM32CubeMX生成且MCU是STM32F401RET6。MCU SDK文件内容目录结构
下载生成的MCU代码,解压后,如下图,其中黑色标注部分为STM32f103cx8硬件平台开发基本文件。绿色标注部分为机智云逻辑部分,硬件的串口驱动、定时器驱动、按键驱动等驱动实现完毕,开发者可直接在Gizwits_product.c&Gizwits_product.h文件编写硬件动作执行函数。如下是MCU通过烧录好GAgent固件的WIFI/GPRS模组与服务器交互的逻辑,可以看出整个过程全部被封装,留给用户的接口很简单,对于资源足够的MCU,用户只需要在MCU实现3个接口函数即串口发送、串口中断接收、定时器1ms中断即可通过无线通信模组联网。而数据点相关、云端交互相关全部由MCU代码自动生成工具生成,只需在Gizwits_product.c文件填充业务逻辑。我们先把需要的协议层拷贝然后编写硬件驱动:另外User文件夹的main.c文件包含了整个程序的框架和用户数据上报到云服务器的接口部分,后面会使用到。在keil中添加分组和文件:接口的对接:
前面提到的三个接口是串口收发、定时器1ms中断,本次STM32F401RET6配置了串口2(根据机智云的协议,串口参数为:波特率9600、无校验、停止位1)作为与WIFI模组通信的接口;定时器10为1ms中断,作为MCU与WIFI模组的“心跳”信号;下面就是如何在具体位置填充这3个接口:
至此我们的设备已经具备了和机智云服务器“交流”的能力,那么具体发送什么数据给云服务器、收到手机APP发来的指令后干什么,就需要在相应的接口处填充用户代码了。注意到生成的代码贴心的给出了注释,告诉用户在哪里填充自己的代码,如下是数值量下发:
下面是温湿度的上报:
可以看出,机智云MCU代码生成工具直接为我们生成号了接口且注释详细,用户只需把采集到的数据往对应的接口函数“丢”即可。
对于main函数部分,首先是完成了外设硬件的初始化,然后是机智云协议层的初始化,然后在while-loop循环调用用户处理和机智云协议相关的处理:
还有一步就是触发智能设备联网,Onboarding定义:也叫配置入网,用户将一款基于Wi-Fi的物联网设备配置连接上路由器的过程称为Onboarding。新设备第一次使用时需要知道路由器的账号和密码,以通过路由器连接互联网。由于大多数的物联网设备没有自带的屏幕和键盘,所以需要通过智能手机向设备发送路由器的SSID和密码,这个过程机智云称为Onboarding。机智云提供的Wi-Fi设备接入SDK中已经内置了此配置的功能,用户直接调用对应API即可。
调试
机智云提供通用版本的手机APP供测试使用,效果就是系统结构图中那样:
后续
机智云还提供移动端代码自动生成工具,如果用户嫌弃官方提供的通用版本APP,可在开发者中心生成手机APP代码包,进行二次开发,例如:修改UI、增加更多功能等。
目前生成的SDK支持AS和Eclipse集成开发环境:
本文工程源码:
写的不错 写的很不错 谢谢分享!!!!! 谢谢分享!!!!!! 德为 人师,行为世范,感谢楼主。 赞赞,学习了 各位,代码如何烧进去 寡人来了 发表于 2017-9-2 11:13
各位,代码如何烧进去
看论坛置顶教程 感谢版主这个帖子,另外一个一步步改的,改的我头痛.我用习惯了hal库,自动生成的是标准库.
页:
[1]