本帖最后由 Genius 于 2017-5-23 17:01 编辑
自动生成MCU SDK
接下来,使用机智云MCU代码自动生成工具,能根据产品自动填写ProductKey,根据相应数据点来自动生成数据点的结构体,直接生成多种平台、多种系列MCU的工程。
自动生成的MCU SDK代码实现了机智云通信协议的解析与封包、传感器数据与通信数据的转换逻辑,并封装成了简单的 API。当设备收到云端或 APP 端的数据后,程序会将数据转换成对应的事件并通知到应用层,开发者只需要在对应的事件处理逻辑中添加传感器的控制函数,便可完成产品的开发。
这里选择独立MCU方案、硬件平台STM32F767X后,机智云直接生成适用于STM32F767X的keil工程代码,采用的库函数为HAL库。
MCU SDK代码结构介绍
下载生成的MCU代码,解压后,结构如下图: 其中有些文件是与特定MCU、特定IDE有关的,Gizwits目录的2个文件Gizwits_protocol.c和Gizwits_protocol.h则属于与硬件平台无关的通信协议层。我们需要添加的温湿度传感器DHT11驱动、空气质量传感器MQ-135驱动、直流小电机驱动就可以放到Hal文件夹,便于管理。
接口介绍
文件
| 说明
| Gizwits_product.c
| 该文件为产品相关处理函数——数据点事件处理逻辑,如收到APP等的指令后去启动电机,就把启动电机的代码填充到gizwitsEventProcess()函数里面对应的注释处;另外还有MCU平台相关硬件初始化,如串口、定时器等。 | Gizwits_product.h
| 该文件为gizwits_product.c的头文件,存放产品相关宏定义如:HARDWARE_VERSION、SOFTWARE_VERSION | Gizwits_protocol.c
| 该文件为SDK API接口函数定义文件。 | Gizwits_protocol.h
| 该文件为gizwits_protocol.c对应头文件,相关API的接口**均在此文件中。 |
协议API介绍
API名称
| API功能
| Void gizwitsInit(void) | gizwits 协议初始化接口。用户调用该接口可以完成 Gizwits 协议相关初始化(包括协议相关定时器、串口的初始化)。 | Void gizwitsSetMode(unit8_t mode) | 参数mode[in]:仅支持0,1和2,其他数据无效。参数为 0,恢复模组出厂配置接口,调用会清空所有配置参数,恢复到出厂默认配置; 参数为 1 时配置模组进入 SoftAp 模式; 参数为 2 配置模组进入 AirLink 模式。 | Void gizwitsHandle(dataPoint_t *dataPoint)
| 参数 dataPoint[in]:用户设备数据点。该函数中完成了相应协议数据的处理即数据上报的等相关操作。
| Int8_t gizwitsEventProcess (eventInfo_t *info,uint8_t *data,uint32_t len)
| 参数 info[in]:事件队列参数 ; data[in]:数据; 参数 len [in]:数据长度。用户数据处理函数,包括 wifi 状态更新事件和控制事件。a) Wifi 状态更新事件WIFI_开头的事件为 wifi 状态更新事件,data 参数仅在WIFI_RSSI 有效,data 值为 RSSI 值,数据类型为 uint8_t,取值范围 0~7。 b) 控制事件与数据点相关,本版本代码会打印相关事件信息,相关数值也一并打印输出,用户只需要做命令的具体执行即可。
|
Gizwits_product.c里面有几个函数: gizwitsInit()、gizwitsSetMode()、gizwitsHandle()是需要在main函数里面调用的;
关键函数说明:
函数 -说明
- userInit() ——用户相关的初始化,如:外设驱动初始化、打印串口初始化(建议用户把自己的硬件驱动放这里面,本项目将把温湿度传感器驱动、空气质量传感器驱动、直流小电机驱动放里面)。
- gizwitsInit() —— 平台、协议处理初始化,如:用户定时器初始化、协议通信串口初始化(MCU SDK API)
- userHandle() ——用户事件回调函数,用户可以自定义事件在该函数中完成相应的协议处理。(用户需要把自己需要上报到云服务器的数据放里面,根据生成的注释填充即可)。
- gizwitsHandle() —— 协议相关的主函数(MCU SDK API),在While-Loop调用。
从中可以看出整个程序处理的流程,用户只需要做微小的修改即可应用在自己的STM32上,本次也是需要做微小修改的,因为生成的工程使用的是正点原子的STM32F767阿波罗开发板,而我们本项目使用的板卡是官方ST出品的Nucleo-F767ZI板卡,两者调试用使用的串口不同,按键引脚等都是不同的,而且生成的工程是没有传感器驱动的,只是一个框架,需要我们去填充。 下图是MCU通过烧录好GAgent固件的WIFI/GPRS模组与服务器交互的逻辑,可以看出整个过程全部被封装,留给用户的接口很简单,对于资源足够的MCU,用户只需要在MCU实现3个接口函数即串口发送、串口中断接收、定时器1ms中断即可通过无线通信模组联网,十分方便移植到其它的MCU。而数据点相关、云端交互相关全部由MCU代码自动生成工具生成,只需在Gizwits_product.c文件填充业务逻辑。
基于机智云的智能硬件开发流程:创建产品及数据点、设备与应用开发、调试产品、申请发布、正式量产。
本系列帖子目录:
http://club.gizwits.com/thread-6544-1-1.html
|