MCU JeeSDK 设备接入
前提条件
- 开发者已在物栖开放平台完成注册和资质认证。
- 开发者已在物栖开放平台完成必要的设计(创建产品、功能定义、控制设计),并进入到硬件开发环节。
- 开发者应具备 MCU 开发能力,熟悉固件开发流程。
准备工作
进行基于 JeeSDK的 MCU 的设备接入开发,请确保已经获取了以下文件:
SDK:如何获取 SDK,请参考:获取 SDK
调试激活码文件包:如何获取调试激活码文件包,请参考:调试激活码
功能原理
设备首次开机后,需开启热点,并启动 UDP Server 等待来自网络的配网广播。
用户使用冒泡物联 App登录,并执行添加设备操作。此时客户端会要求用户输入Wi-Fi 的 SSID 和 密码,并尝试使手机连接到设备热点。一旦手机成功连接上设备热点,就会将 SSID 和密码通过 UDP 广播的方式发送出去。
当设备端接收到来自广播的数据后将 SSID 和密码解析出来,然后尝试连接 Wi-Fi。当 Wi-Fi 连接成功后,设备将自动登录到中科物栖物联网平台,并使设备处于接收命令的状态。
之后,调用 jeesdk_init() 函数并传入密钥数据,初始化 SDK。然后,再调用 jeesdk_main() 函数启动 SDK,即可实现设备接入。
使用示例
开发者需要完成 "设备配网" 功能的开发。然后,启动 JeeSDK 核心服务,即可将设备接入物栖物联网平台。
第一步:实现配网功能
设备配网功能是通过开启 UDP 广播 Server 来实现的。
流程说明:
实现步骤:
- 开启设备热点(AP)。
- 建立 UDP Socket 广播监听。
- 接收 UDP 数据。
- 调用 SDK 配网函数,并注册回调函数,等待接收配网参数。
- 在回调函数中使用配网参数连接 Wi-Fi,并在 Wi-Fi 连接成功后启动核心服务。
- 释放 UDP Socket 资源。
代码示例:
//手机端向设备所传数据 typedef struct SoftAP_Result { uint8 ssid[32]; //wifi 账号 uint8 pass[64]; //wifi 密码 uint8 mgmt[16]; uint8 navHostname[64]; int32 navport; uint8 serverKey[16]; uint64 userId; uint8 logHostName[16]; } SoftAP_Result_t; //创建一个实例,用于接收数据 SoftAP_Result_t apInfo; // net_socket_udp_recv:用户自行实现,主要作用 接收udp 广播数据,放入到recBuffer,ret_len是数据的长度。 ret_len = net_socket_udp_recv(smt_udp_fd, recBuffer, sizeof(recBuffer), 1000, (void *)&rec_addr, &rec_prot); // smt_parse_udp_data:SDK API,解析udp数据,如果ret == SMT_OK ,数据解析成功,apInfo为一个传出参数,结构体的内容会被更新,并保存到flash中 ret = smt_parse_udp_data(recBuffer, ret_len, &apInfo); if (ret == SMT_OK) { save the structure into the MCU flash} // smt_response_data : SDK API,创造回复数据内部两个形参都是传出参数,内部会开辟空间构建回复数据,把指针赋值给sendBuffer,数据长度赋值给sendLength。 smt_response_data(&sendBuffer, &sendLength); net_socket_udp_send:用户自行实现,主要作用 发送以udp形式 数据到手机端。 ret = net_socket_udp_send(smt_udp_fd, (sendBuffer), sendLength, (void *)&rec_addr, REMOTE_UDP_PORT); // smt_response_data : SDK API,释放smt_response_data开辟出来的数据。 smt_release_reponse_data(sendBuffer); //释放空间 udp socket,mcu由AP模式切到station模式,尝试链接wifi
第二步:启动 JeeSDK 核心服务
- 实现步骤:
调用 jeesdk_init() 函数并传入密钥数据,初始化 SDK。然后,再调用 jeesdk_main() 函数启动 SDK。
如何从设备上获取设备密钥数据,请参考:什么是设备证书