MCU JeeSDK 设备接入

前提条件

  1. 开发者已在物栖开放平台完成注册和资质认证。
  2. 开发者已在物栖开放平台完成必要的设计(创建产品、功能定义、控制设计),并进入到硬件开发环节。
  3. 开发者应具备 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 来实现的。

  1. 流程说明:

    img

  2. 实现步骤:

    1. 开启设备热点(AP)。
    2. 建立 UDP Socket 广播监听。
    3. 接收 UDP 数据。
    4. 调用 SDK 配网函数,并注册回调函数,等待接收配网参数。
    5. 在回调函数中使用配网参数连接 Wi-Fi,并在 Wi-Fi 连接成功后启动核心服务。
    6. 释放 UDP Socket 资源。
  3. 代码示例:

    //手机端向设备所传数据
    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 核心服务

  1. 实现步骤:

调用 jeesdk_init() 函数并传入密钥数据,初始化 SDK。然后,再调用 jeesdk_main() 函数启动 SDK。

如何从设备上获取设备密钥数据,请参考:什么是设备证书

results matching ""

    No results matching ""