3分钟打造手机APP远程空气质量监测应用(STM32L432 Nucleo)

降低iot开发门槛是机智云的不懈追求,所以机智云先后推出自助开发平台、mcu代码自动生成器、app在线生成器、d3规则引擎等工具,不断延伸物联网生态,兼容不同系列的mcu产品,适配stm32cubemx,大大简化 mcu 开发,降低门槛。
本文以程空气质量监测应用为例,讲解stm32接入机智云,通过stm32cubemx 图形化配置工具生成 mcu 工程,然后只需编写几个简单的接口,即可将机智云自助生成的 stm32 方案工程里面的设备协议移植过来,这样可以十分方便的将其它型号 stm32 微控制 器连上机智云,开发智能产品。
本文的读者对象需要掌握的是: 
1.   知道如何利用机智云自助开发生成 mcu 工程;2.   知道如何利用 stm32cubemx 配置外设,生成 stm32 工程;3.  其它如开发工具 keil,串口调试助手,stlink,stm32cubemx 等软件的安装使用教程这里不会赘述,新手可前往机智云开发者社区参考前期教程;
通过本文读者将学会:
1.如何把机智云生成的协议移植到 stm32cubemx 生成的工程; 2.  adc(模数转换器)的使用; 3.gpio 的使用; 4 . 非阻塞长短按键程序的移植; 5.简单的物联网应用开发流程;
先来张全家福:
视频请戳:
http://player.youku.com/player.php/sid/xmtc3mza1ntk1mg==/v.swf
本文使用的硬件为:
软件工具为: 
1.stm32cubemx v4.16.1; 2.机智云自助开发平台; 3.串口调试助手; 4 . keil v5.21.1.0;
01云端准备
我们这里演示的是一个简单的远程空气质量监测应用,即微控制器采集空气质量传感器的数据,通过 wifi 上报到机智云服务器,然后我们通过手机端 app 即可远程查看监测值。
我们先在机智云自助开发平台建立数据点并生成一个 mcu 方案 stm32 工程。
注:机智云自助开发平台 dev.gizwits.com
具体步骤请参考请参考 http://club.gizwits.com/thread-3546-1-1.html
通过对机智云的了解,我们知道,以下几个是必须的: 
配置 wifi 模块入网方法和触发方式;
为了和生成的测试 app 配合,我们一般选择长按 key2,rgb 绿灯亮起作为提示;
一个串口用于打印日志,方便调试,波特率没有要求;另一个串口(实现中断接收和写)用于和 wifi 模组通信,波特率要求为 9600,其它参数后文给出;
 mcu 需要一个定时器,1ms 中断作为心跳;上面红色的文字是实现任意 mcu 通过 wifi 模块连接机智云所必须的。
02硬件准备
stm32l432 nucleo-32 开发板是 nucleo-32 系列开发板中最新的一款,它采用了stm32l432kc6 微控制器,除了具有良好的性能外,还支持超低功耗,板载 stlink 仿真器。
根据 stm32 nucleo-32 原理图,usart2(pa2 为 usart2_tx,pa15 为 usart2_rx)与板载仿真器连接,因此我们将它作为调试打印日志用。
这里 mq-135 空气质量传感器 a0 输出电压值代表了空气质量状况,我们使用 adc 来采集这个电压值。
按键使用 2 个,由于 stm32 gpio 内部可配置上拉输入模式,因此无需额外的上拉电阻,我们使用最简单的方法,gpio 输入检测到低电平表示按键按下。三色 led 为共阴极 led,采用 gpio 输出高电平点亮的接线方式,限流电阻取 510 欧姆。
最终我们使用的外设如下:
03移植开始
3.1、首先来看 stm32cubemx 的配置。
stm32cubemx 生成的 pdf 报表详细描述了工程的配置信息,限于篇幅这里就不贴图了,
具体可查阅原文附件文档:
nucleo-l432kcu6-gokit-stm32cubemx 配置报表.pdf
原文地址:club.gizwits.com/thread-3876-1-1.html
这里解释以下几个关键的配置:
a) 选择的微控制器型号为 stm32l432kcu6,这里大家根据实际选用的型号选择即可;b) 本板卡没有焊接外部高速晶振,因此选择的是内部晶振,倍频后,系统时钟为80mhz,这里时钟配置和我们后面配置定时器有关;c) 开启定时器 7,将作为按键扫描用,配置为 1ms 中断,定时器 7 时钟为f=80mhz/( prescaler+1),向上计数模式,计数到(arr+1),进入中断;d) 开启定时器 6,将作为心跳用,配置为 1ms 中断,定时器 6 时钟为f=80mhz/( prescaler+1),向上计数模式,计数到(arr+1),进入中断;e) 串口 2 选择 asynchronous 模式,将作为打印日志调试用。配置为 115200 波特率、8位数据、无校验、1 位停止位,数据传输方向为发送和接收双向(ps:其实这里只用到了 tx);f) 串口 1 选择 asynchronous 模式,将作为和 wifi 模组通信用。参数需要符合机智云串口通信协议规定:即 9600 波特率、8 位数据、无校验、1 位停止位;另外和 wifi 模组通信的串口 1 需要配置为中断接收;g) pb3 是板卡上的翠绿色 led,给它添加标签 led3;h) pb0 和 pa12 是连接了按键,配置为上拉输入模式,给它添加标签 key1,key2; i) 开启模数转换器 adc1,通道 5 对应的 gpio 是 pa0,配置为 analog mode 并开启dma 传输,传输方向是外设到内存且地址不自增,字长为 word;
3.2.工程文件的添加和修改
工程文件的添加和修改内容主要是:
按键驱动的移植;1ms 定时心跳的移植;串口读写的移植;工程框架的移植;
移植步骤参考:club.gizwits.com/thread-3641-1-1.html
下面简单解释下应用程序部分,即 adc dma 方式采集模拟电压信号:
我们在 main.c 文件定义全局变量 adc_convertedvalue 存放 adc 数据寄存器读取值,adc_convertedvaluelocal 为换算的电压值,由于参考电压为 3.3v,adc 精度为 12bit,
计算公式如下:
adc_convertedvaluelocal =adc_convertedvalue)*3.3/4095;
初始化完成后调用 hal_adc_start_dma()启动 adc,使用 adc 的好处是无需 cpu干预,减少 cpu 负担。
在 main.c 里定义一个 adc 转换完成回调函数,里面重新启动 adc 转换。
在 userhandle()接口里面把 adc 采集的数值赋值给 airquality 字段即可,当然这里可以加上一些数据处理,转换代码。
接下来就是调试了,关于如何在机智云自助开发平台生成 stm32 工程和测试 app 以及配置入网步骤,这里不再赘述,不清楚的请参考:
http://club.gizwits.com/thread-3546-1-1.html 
http://club.gizwits.com/thread-3550-1-1.html 
http://club.gizwits.com/thread-3572-1-1.html 

来 GOTC 2023,从不同的角度谈开源及开源人才培养!
什么是高速下行分组接入技术(HSDPA)
英特尔35款经典CPU回顾(上)
意法半导体获2013年度电子成就奖(ACE)能源技术奖
影响DDR3的时序有哪些?
3分钟打造手机APP远程空气质量监测应用(STM32L432 Nucleo)
单片机pwm控制电机,PWM电机调速原理及51单片机PWM程序经典
随环境而变化的特殊天线用途详述
村田创新的变压器技术如何帮您领跑新能源汽车市场
经验分享:如何选择运放电路设计中的无源元件
LED为什么会产生热量?LED发热的几个主要原因是什么?
2020LUCI亚洲城市照明工作研讨会将在韩国举办
联想遭美国337调查 恐失去美国市场
iPhone15国行售价疑曝光 发布会最后倒计时
自动驾驶视觉芯片领域存在后来居上吗
阿里巴巴达摩院CTO谈中天微:芯片战略要长期布局与规划
华特电动如何为前途汽车超跑做Pack?
矽海达科技Sihid远程控制单元简介
3G接入WLAN测试方案 WLAN测试基本概念
NAPI 类对象导出及其生命周期管理(下)