本帖最后由 symic 于 2021-1-21 22:49 编辑

机智云gokit的特点就是将传感器与互联网连接,实现传感信息快速入网。其中wifi是中间的传输手段,而传感器数据的处理采集这是由mcu来完成的,本次拿到的gokit2是以arduino为主控底板的。通过分析下载的微信宠物物源代码,来管中窥豹一下传感器侧的处理流程。

通过官网下载arduino源代码,GoKit-Arduino-MCU-master,解压出来可见4个文件夹,重点查看gokit_2,里面有5个文件。其中gokit_2.ino是主文件,Gokit.cpp/.h是设备初始化及串口命令发送等代码段,protocol.cpp/.h为协议部分。使用Arduino可以打开和编辑。
捕获.JPG
gokit_2.ino主要是setup和loop函数。也就是Arduino经典的主函数架构。setup()中比较简单,就调用了GoKit_Init()函数进行初始化,该函数在中Gokit.cpp定义。之后就是oled和串口的输出。oled需要使用ssd1306控制芯片,实际上在试用模块上没提供,需要自己购置。loop()只有一个函数GoKit_Handle(),该函数在中protocol.cpp定义,用于处理串口接收数据,处理铵键状态,检查模块状态。
GoKit_Init()是整个电路板上各个模块的初始化过程,在GoKit.cpp中定义。包括串口初始化、温湿度传感器初始化、LED灯初始化、2个按键初始化,小电机初始化、RGB三色灯初始化、初始化A0作为RGB三色灯的控制端。GoKit_Init()还定义了一个1S定时器MsTimer2。

protocol.h定义了一些宏定义,包括报告状态、请求状态、错误信息、命令信息、版本信息等。同时还声明了众多结构体。简要介绍几个:
_status_writable结构体是板子上可以通过操作的参数,如RGB三色灯、电机转速,这些在微信宠物屋中可通过调参控制板子。
_status_readonly结构体是板子上只读的参数,如红外状态、温度、湿度、报警值、错误值。
_pro_headPart结构体是协议头,包括帧头(0xFF 0xFF)、帧长度、命令、sn、标志位。
_pro_commonCmd结构体封装了帧头和校验值。
_m2w_returnMcuInfo结构体 返回的模组信息,包含协议版本、p0版本、硬件版本、软件版本、product_key、binable_time等信息。
_m2w_setModule结构体 配置模组信息,里面只有一个config_info的字节
_w2m_controlMcu结构体 控制MCU,包括次级命令sub_cmd、命令标记cmd_tag、可写状态status_w(这也是个_status_writable结构体_m2w_mcuStatus结构体 MCU状态,包括次级命令sub_cmd、可写状态status_w(这也是个_status_writable结构体,可读状态status_r(_status_readonly结构体
_w2m_reportModuleStatus结构体 WIFI模组状态,以两个元素组成的字符数组构成。

protocol.c是协议实现过程,包括计算校验和的CheckSum函数、处理串口中断的Handle_uartdata函数,处理按键中断的Handle_keyeven函数,检查状态的Check_Status函数、和CmdSendMcuP0函数。其中,Handle_uartdata(),处理接收的CMD_GET_MCU_INFO、CMD_SEND_MCU_P0、CMD_SEND_HEARTBEAT消息。

Gokit.cpp/.h实现了Gokit板上操作的函数。包括串口接收中断处理函数serialEvent()、从串口接收命令  获得单包数据get_onepackage()、gokit_time_ms()和gokit_time_s()时间函数、温湿度读取函数gokit_DHT11_Read_Data、判断按键按下与否及长按的gokit_key1down()和gokit_key2down()函数等。

通过学习了解源代码,可以熟悉整个开发模组的使用过程,及板载模块的使用命令等。可为下一步通过机智云平台传输控制打下基础。