目录
我们通过机智云生成的代码分为指定型号或其他平台,从下图可以看出,我们通过选定型号,输入创建设备时的**就可以生成代码工程,然后下载解压即可使用。
从下图可以看出,我们的STM32和Arduino基本上可以直接用机智云自动生成的工程,其他平台就需要进一步移植。
1、指定MCU工程目录
将我们生成的代码解压后会看到以下结构,此工程就是我们的STM32的完整功能,可直接在这基础上修改使用,并且支持STM32CubeMX开发,只是该工程是基于HAL库,并不是标准库。
具体我们了解下Gizwits 文件夹,它是机智云协议层,包括串口通信协议和用户事件处理(这个文件很重要)。
开发说明文档主要介绍了通信协议的 API 函数,以及在二次开发中,设备的配置入网、数据采集、事件和 WIFI 状态的处理。更新日志,则记录当前和过往工程版本的更新功能信息。
2、其他平台工程目录
结构和上面都差不多,但是这里我们就不能当成一个完整的工程使用,首先需要进行协议的移植。我们在移植时只需要关注Gizwits和Utils协议文件夹即可,后面会介绍具体是怎么移植的。
3、Gizwits 代码结构及原理
机智云 MCU 工程代码的大概运行流程如下:
①初始化
先对用到外设和协议进行初始化(系统时钟、用户外设(按键、其他)接口、gizwits 串口协议系统(WIF 接口、1MS 时基定时器、数据缓冲区))(注意:gizwits 串口协议需要运行在毫秒的时基)。
②WIFI配网
WIFI 设备通过按键配置入网,连接到云端服务器后,WIFI设备会收到来自云端或 APP 端给发过来的数据点、状态等信息。
③MCU通过WIFI接收云端数据并存储到缓冲区
接收云端数据完成后,通过协议帧的格式发送到MCU端这边,MCU 端将收到的数据存到缓冲区中
④MCU从缓冲区解析数据并执行逻辑
MCU每隔一段时间对缓冲区进行抓包,抓包正确后进行深度的解析,解析后推送到我们的数据事件处理,也就是动作执行,根据数据点相应的事件去实行自己的逻辑。
⑤获取数据通过WIFI发送到云端
MCU端将采样到传感器数据按协议栈帧格式打包传送给 WIFI 设备,而 WIFI 设备则将数据上传给云端服务器
3.1、WIFI配网
设备需要配置才能进行联网,并与云端进行通信,而联网可通过两种接入模式,分别为AirLink 模式和 SoftAP 模式:
1)AirLink 模式:设备当处于该模式下,会不断接收特定编码的 WIFI 广播包,手机连接可用的 WIFI 网络后,通过指定的 App(如 Demo App)发送编码后的 WIFI 网络的 SSID 和密码广播,设备接收到之后自动尝试连接此 WIFI 网络,连接成功即配置完成。
AirLink模式配网步骤
①通过按键使ESP8266进入AirLink模式
②手机连上路由器,注意手机要是在wifi模式下
③打开APP进行一键配置,然后填写你手机所连的wifi账号密码,选择乐鑫,然后确认设备状态操作,等待一会就能配网成功了
2)SoftAP 模式:设备在 AP 模式下,相当于热点,手机可以直接与设备连接,并将可用的WIFI 网络 SSID 和密码发送给设备,设备接收到配置信息后自动尝试连接路由器,连接成功则自动切换到正常使用的模式。以上就是对两种模式的介绍,进入两种模式都是调用 gizwitsSetMode()配置接口函数
SoftAP模式下配网步骤
①ESP8266进入SoftAP模式
②手机连上ESP8266建立的AP,就是wifi,账号是XPG-GAgent-XXXX密码是123456789
③打开APP进行一键配置,然后填写路由器的账号密码,然后进行配网
SoftAP模式就是指先连上ESP8266建立的AP,然后在通过输入路由器的名称和密码让ESP8266连上路由器,就配网成功了
设置ESP8266的配网模式在gizwits_protocol.c中的gizwitsSetMode()函数中,开发者可以不用关心怎么实现的,由官网提供,可参考下图:
3.2、下行处理(动作执行)
下行处理:处理云端/APP 发送过来的控制事件
除了用户的事件,还有关于 WIFI 模块连接状态的事件、NTP 网络时间获取事件,就在逻辑时间处理下面:
3.3、上行处理(数据采集)
上行处理:上报设备状态
在用户创建数据点同时,代码上也会 MCU SDK 自生成一个对应数据点的用户设备状态结构体,它可保存设备的当前状态值:
用户只需将读到的数据赋值到用户区当前设备状态结构体即可,赋值完的数据是通过gizwitsHandle 上报到云端,开发者不需要关注变化上报和定时上报