gokit1 是一款能够提供以下硬件功能的iot套件:1) 一颗STM32F103C8T6芯片,LPFQ封装,提供JTAG编程接口; 2) 一个红外探测器,可以探测是否有阻挡; 3) 一个R、G、B可编程全彩LED灯; 4) 一个可编程电机; 5) 一个温湿度传感器; 6) 一个复位按键和四个自定义按键,可以根据需要自行设定,比如按键改变电机转速、按键改变LED颜色等; 此外,GoKit提供USB串口,可以更方便的对MCU进行调试或者升级。
通过Gokit1 套件,你能快速开发出一款智能硬件产品。并且你无需自己开发APP,就可以在移动端控制智能硬件产品。
1 、开发GoKit[size=16.0000pt]
1.1 开发过程(思路)1) 了解GoKit - 了解GoKit能够支持的硬件功能 2) 定义新产品 - 基于这些硬件功能设计一个简单产品 3) 选择产品模板 - 选择一个已有的类似产品作为模板快速定义产品 4) 调整产品参数 - 根据自己产品的需要对模板中的各属性字段(数据点)进行添加、删除或修改 5) 生成MCU协议与示例代码 - 产品数据点保存后,立即生成完成的MCU开发协议以及对应的示例代码 6) 生成虚拟设备 - 如果您没有GoKit开发板,不需要再做任何的MCU开发,生成的虚拟设备已经具备你所设计的产品功能 7) GoKit工程与调试 - 在您创建的GoKit工程中,添加示例代码,即可完成MCU协议数据的解析和组包,您只需完成对IO口的操作即可 8) 协议细节 - 当然,如果您想详细了解MCU协议,我们会给您一一介绍
1.2 了解GoKit GoKit能够提供的硬件功能为: 1) 一颗STM32F103C8T6芯片,LPFQ封装,提供JTAG编程接口; 2) 一个红外探测器,可以探测是否有阻挡; 3) 一个R、G、B可编程全彩LED灯; 4) 一个可编程电机; 5) 一个温湿度传感器; 6) 一个复位按键和四个自定义按键,可以根据需要自行设定,比如按键改变电机转速、按键改变LED颜色等; 此外,GoKit提供USB串口,可以更方便的对MCU进行调试或者升级。 [size=16.0000pt]1.3. 定义新产品 基于GoKit提供的以上功能,我们可以设计一些简单且实用的产品,比如小狗宠物屋,我们设计这款产品功能如下: 1) 当小狗在屋里的时候,LED亮绿色,当小狗不在屋的时候,LED亮红色,当小狗连续一个小时不在屋的时候,上报一条报警给主人; 2) 当温度达到或者超过28度的时候,打开宠物屋的排风扇(电机),当温度降到28以下的时候,关闭宠物屋的排风扇(电机); 以上两个功能就可以很好的完成一个智能产品,当然,你也可以定义很多有趣的产品,比如儿童玩具之类的。 接下来我们可以以一个已有的产品模型为基础进行快速开发;
[size=16.0000pt]1.4. 选择产品模板 我们选择GoKit开发模板,会自动出现已经定义好的数据点,如下图所示:
[size=16.0000pt]
1.5. 调整产品参数小狗宠物屋这个产品中,我们需要关心的属性有: 1) LED的颜色R值(红色) 2) LED的颜色G值(绿色) 3) 环境温度 4) 电机转速 5) 红外探测 这五个属性值保留,并使用默认的配置,其余的属性可以删除; 如下图所示: 五个属性分别可以进行更详细的编辑: 1) LED的R值(红色),用RGB表示发,一共有0-254种红色(数据范围为0-254),所以,我们用一个字节就可以描述(数据类型为uint8),这个属性是可以设定也可以读取的(读写类型为可写),由于没有负数,也没有浮点,MCU可以直接用一个字节描述这个属性,所以不需要做修正,所以分辨率为1,增量为0; 2) LED的G值定义同上; 3) 环境属性,我们定义温度范围为0-50度,用一个字节可以表示(数据类型是数据,uint8),这个属性仅能读取,不能设置(读写属性是只读),同样不需要修正(k=1,m=0); 4) 红外探测属性,可以探测是否有阻挡(是一个布尔类型),仅能读取(读写类型为只读); 5) 电机转速我们定义范围0-1000,0表示停止,用两个字节描述,不用修正; [size=16.0000pt]
1.6. 生成MCU协议数据点保存后,会生成如下的MCU协议,协议在下文有详细解释: FF FF 00 05 01 01 00 00 07 FF FF 00 47 02 01 00 00 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 31 64 36 39 61 66 35 39 65 33 38 63 37 31 31 65 34 61 32 39 64 35 32 35 34 30 30 35 32 38 37 36 64 01 2C CA FF FF 00 06 03 02 00 00 02 0d FF FF 00 10 04 02 00 00 03 55 aa bb cc 80 00 80 23 00 00 42
FF FF 00 0d 03 04 00 00 01 02 00 CC 00 00 00 00 e3 FF FF 00 05 04 04 00 00 0d
FF FF 00 0d 03 05 00 00 01 04 00 00 BB 00 00 00 d5 FF FF 00 05 04 05 00 00 0e
FF FF 00 0d 03 07 00 00 01 10 00 00 00 00 e0 00 08 FF FF 00 05 04 07 00 00 10
FF FF 00 10 05 01 00 00 04 55 aa bb cc 80 00 80 23 01 03 c7 FF FF 00 05 06 01 00 00 0c [size=16.0000pt]
1.7. 生成虚拟设备产品属性(数据点)定义好以后,就会自动生成虚拟设备,即使没有GoKit开发板,您也可以使用虚拟设备进行调试,虚拟设备的使用,可以参考文档中心的快速开始; 虚拟设备操作页面如下图所示:
[size=16.0000pt]
1.8. GoKit工程与调试到此,可以进行代码开发了,在后期,我们会提供根据产品定义自动生成的代码片段,您可以创建一个标准的MCU工程,在您的工程中添加我们为您的产品生成的代码片段,这部分代码片段,完成了协议的解析,命令的组包,校验和的计算等各种问题,您只需要传入属性值就可以输出完成的状态包,您收到命令后,可以方便的进行命令拆分;具体的试用方法,参见代码片段中的注释说明。 通过这些协议,可以方便的管理GoKit上的各个硬件,只需要在MCU中对响应IO口进行操作即可。 [size=16.0000pt]
1.9. 协议细节[size=14.0000pt]1.9.1. WIFI模块获取MCU基本信息完整协议包: FF FF 00 05 01 01 00 00 07 拆分: FF FF 包头 00 05 长度,表示后面还有5个字节 01 wifi要获取mcu基本信息的命令 01 序列号 00 00 标志位,保持0即可 07 校验值,从长度到校验和前的字节相加值
MCU给WIFI模块返回基本信息: 完整协议包:FF FF 00 47 02 01 00 00 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 31 64 36 39 61 66 35 39 65 33 38 63 37 31 31 65 34 61 32 39 64 35 32 35 34 30 30 35 32 38 37 36 64 01 2C CA 拆分: FF FF 包头 00 47 长度,表示后面有71个字节(47为16进制) 01 mcu给wifi返回基本信息的命令 01 序列号,需要和上述wifi的查询包中的sn相同 00 00 标志位,保持0即可 30 30 30 30 30 30 30 34 机智云协议版本号 30 30 30 30 30 30 30 32 P0协议版本号 30 30 30 30 30 30 30 31 MCU硬件版本号 30 30 30 30 30 30 30 31 MCU软件版本号 64 36 39 61 66 35 39 65 33 38 63 37 31 31 65 34 61 32 39 64 35 32 35 34 30 30 35 32 38 37 36 64 产品的product_key 01 2C 绑定超时时间 CA 校验值,从长度到校验和前的字节相加值 [size=14.0000pt]
1.9.2. WIFI读取MCU属性完整的协议包:FF FF 00 06 03 02 00 00 02 0d 拆分: FF FF 包头 00 06 长度,后面有6个字节 03 wifi向mcu发送数据的命令 02 序列号 00 00 标志位,保持0即可 02 查询状态命令 0d 校验值,从长度到校验和前的字节相加值
MCU返回当前属性值 完整的协议包:FF FF 00 10 04 02 00 00 03 55 aa 80 00 01 23 BC 拆分: FF FF 包头 00 10 长度,后面有16个字节 04 mcu向wifi发送数据的命令 02 序列号 00 00 标志位,保持0即可 03 mcu响应wifi的查询状态命令 55 LED的R值 aa LED的G值 80 00 电机转速 01 红外探测结果(最低位一位表示红外探测结果,0:探测无,1:探测有) 23 温度值 BC 校验值,从长度到校验和前的字节相加值 [size=14.0000pt]
1.9.3. 设定LED的R值完整的协议包:FF FF 00 0d 03 04 00 00 01 01 CC AA 00 00 00 00 8C 拆分: FF FF 包头 00 0d 长度 03 wifi向mcu发送数据的命令 04 序号 00 00 标志位,保持0即可 01 控制类命令 01 控制属性标志组合,01表示第一个属性值有效 CC AA 00 00 00 00 属性数据 8C 校验值,从长度到校验和前的字节相加值 说明: 1) wifi给mcu发送控制指令时,会含有mcu所有的属性信息,这个属性信息和mcu给wifi上报的属性信息格式以及顺序完全相同(在定义产品的时候就确定了),wifi可以根据需要设定控制属性标志组合,用位表示,最右为第0位,最左为最高位,属性顺序和位顺序对应,将想控制的属性对应的位置1,表示要控制该属性; 2) 本产品中,可以控制的属性依次有:LED R值、LED G值、电机转速三个属性; 3) 可以单独控制一个属性,比如单独设定LED R值,此时为0x01, 用位描述是0000 0001; 4) 也可以一次控制多个属性,比如同事设定LED R值和G值,此时为03,用位描述是0000 0011; 5) 或者同时设定LED R值、G值以及电机转速,此时为0x07,用位描述是0000 0111; 6) 此字段的长度根据定义产品时的可写属性个数自动确定,本产品共有3个可写属性,一个字节即可表示,若定义9个可写属性,则自动用2个字节表示,依次类推;
MCU收到控制命令后的响应 完整的数据包:FF FF 00 05 04 04 00 00 0d 拆分: FF FF 包头 00 05 长度 04 mcu响应wifi的命令 04 序号,与wifi发出的数据包中的sn相同 00 00 标志位,保持0即可 0d 校验码 [size=14.0000pt]
1.9.4. 设定LED的G值完整的协议包:FF FF 00 0d 03 04 00 00 01 02 CC AA 00 00 00 00 8C 拆分: FF FF 包头 00 0d 长度 03 wifi向mcu发送数据的命令 04 序号 00 00 标志位,保持0即可 01 控制类命令 02 控制属性标志组合,02表示第二个属性值有效 CC AA 00 00 00 00 属性数据 8D 校验值,从长度到校验和前的字节相加值
MCU收到控制命令后的响应 同上 [size=14.0000pt]
1.9.5. 设定电机转速完整的协议包:FF FF 00 0d 03 04 00 00 01 03 00 00 00 10 00 00 28 拆分: FF FF 包头 00 0d 长度 03 wifi向mcu发送数据的命令 04 序号 00 00 标志位,保持0即可 01 控制类命令 03 控制属性标志组合,03表示第三个属性值有效 00 00 01 00 00 00 属性数据 28 校验值,从长度到校验和前的字节相加值
MCU收到控制命令后的响应 同上 [size=14.0000pt]
1.9.6. MCU主动上报状态完整的协议包:FF FF 00 10 05 01 00 00 04 AA BB 00 01 01 23 A4 拆分: FF FF 包头 00 0C 长度 05 mcu主动给wifi发送数据的命令 01 序号 00 00 标志位,保持0即可 04 mcu上报状态 AA BB 00 01 01 23 完整的属性数据 A4 校验值,从长度到校验和前的字节相加值
WIFI收到后的响应 完整的协议包:FF FF 00 05 06 01 00 00 0c 拆分: FF FF 包头 00 05 长度 06 wifi响应mcu的数据命令 01 序号,和mcu发出的数据包中sn相同 00 00 标志位,保持0即可 0c 校验码
[size=22.0000pt]2. 以GoKit为例,开发新产品如果您想做自己的更复杂的产品,可以仿照小狗宠物屋的方法,先确定产品功能,再依靠某个模板建立数据模型,然后用虚拟设备或者实体设备进行调试,协议和宠物屋类似;只要您定义清楚了设备,就自动生成了虚拟设备和测试APP,并且可以连接M2M平台进行调试;当然如果您有硬件并且试用了我们GAgent模块,马上就可以用SDK以及demo App进行实体设备的配置、发现、大小循环控制。
|