如果用户不使用已认证的模组,本文讲解用户如何直接通过生活物联网SDK(不含AliOS Things)开发WiFi单品设备,用以连接生活物联网平台。

在生活物联网平台定义产品

  1. 创建项目。
    参见创建项目
  2. 创建产品。

    参见新建产品连网方式选择为WiFi。生活物联网的公版App可以通过本地发现方式来添加设备。

    说明

    如果手机App使用生活物联网的公版App对设备进行管理,那么添加设备时如果发现设备是WiFi设备,那么就会进入阿里的WiFi配网过程对设备进行配网,因此设备需要集成阿里的WiFi配网功能。

    如果设备并没有集成阿里的WiFi配网功能,而是通过触摸屏输入WiFi热点的SSID/密码或者其它配网方式,联网方式可以选择以太网,以避免生活物联网的公版App使用阿里配网流程来添加设备,但是同时可以使用本地发现方式来添加设备。

  3. 产品功能定义。
    参见功能概述来定义产品的功能。
  4. 添加测试设备。
    参见在线调试设备来添加测试设备,并设置设备的绑定策略等。

设备端开发

请参见SDK概述与开发环境设置下载无AliOS的SDK(基于Link Kit v2.3.0)。

  • SDK推荐配置

    建议开发者阅读编译说明中的“SDK裁剪”了解SDK配置以及各选项的意义。

    可以通过修改make.settings或者Linux下执行make menuconfig 来配置需要的功能。

    功能 说明
    FEATURE_MQTT_COMM_ENABLED y:使用MQTT连接阿里云物联网平台
    FEATURE_MQTT_DIRECT
    • y:连国内服务器
    • n:连海外服务器
    FEATURE_Device_MODEL_ENABLED y:使能物模型
    FEATURE_ALCS_ENABLED y:使能本地控制功能
    FEATURE_ALCS_SERVER_ENABLED y:使能本地控制被控端功能
    FEATURE_DEV_BIND_ENABLED y:使能用户绑定相关功能
    FEATURE_SUPPORT_TLS y:使能TLS加密
    FEATURE_OTA_ENABLED y:使能OTA
    FEATURE_WIFI_PROVISION_ENABLED y:使能WiFi配网
    FEATURE_AWSS_SUPPORT_DEV_AP y/n:根据需要打开或关闭设备热点配网
    FEATURE_AWSS_SUPPORT_SMARTCONFIG y/n:根据需要打开或关闭一键配网
    FEATURE_AWSS_SUPPORT_PHONEASAP y/n:根据需要打开或关闭手机热点配网
    FEATURE_AWSS_SUPPORT_ROUTER y/n:根据需要打开或关闭路由器配网
    FEATURE_AWSS_SUPPORT_ZEROCONFIG y/n:根据需要打开或关闭零配配网

    设备需要连接海外服务器请参见国际站设备开发

  • HAL适配

    请参照下面的文档进行HAL的实现:

  • 设备身份认证模式

    设备连接阿里云物联网平台时,可以使用预置设备证书的方式进行设备的身份认证,也可以采用动态注册方式得到完整的设备证书再进行身份认证,请参见设备认证

  • 产品功能实现

    在设备上根据云端定义的产品功能进行相应功能的实现,请参见物模型编程

  • WiFi配网开发

    请访问生活物联网SDK的WiFi配网开发指南了解如何调用配网相关的API实现WiFi配网。

  • 云端解绑与恢复出厂默认设置

    设备被解绑后,云端会下发一个解绑事件通知:{"identifier":"awss.BindNotify","value":{"Operation":"Unbind"}} 设备收到此消息可以做重置配网、清空本地数据等处理。

    如果通过App将设备恢复出厂默认设置,云端会下发一个Reset事件通知:{"identifier":"awss.BindNotify","value":{"Operation":"Reset"}} 设备收到此消息可以做重置配网、清空本地数据等处理。设备开发者可以结合具体产品类型,决定收到解绑和恢复出厂默认设置通知后做哪些清空操作。

    可以参考示例代码example/smart_outlet/smart_outlet_main.cnotify_msg_handle函数,做如下改动。

    static int notify_msg_handle(const char *request, const int request_len)
    {
        ....
    
        if (!strcmp(item->valuestring, "awss.BindNotify")) {
            cJSON *value = cJSON_GetObjectItem(request_root, "value");
            if (item == NULL || !cJSON_IsObject(value)) {
                cJSON_Delete(request_root);
                return -1;
            }
            cJSON *op = cJSON_GetObjectItem(value, "Operation");
            if (op != NULL && cJSON_IsString(op)) {
                if (!strcmp(op->valuestring, "Bind")) {
                    EXAMPLE_TRACE("Device Bind");
                    vendor_device_bind();
                }
                if (!strcmp(op->valuestring, "Unbind")) {
                    EXAMPLE_TRACE("Device unBind");
                    vendor_device_unbind();
                }
                if (!strcmp(op->valuestring, "Reset")) {
                    EXAMPLE_TRACE("Device Reset");
                    vendor_device_reset();
                }
            }
        }
    
        ....
    }
  • 设备重置

    对于生活物联网平台来说,建议产品设计一个reset按键用于清除设备上的配置,将设备恢复到出厂状态,同时调用awss_report_reset()函数告知云端清除设备与用户的绑定关系。

    因此,设备商需要在处理reset按键的逻辑中增加对awss_report_reset()的调用。

    /*
     * 应用程序调用该API后,Linkkit首先往Flash里存储恢复出厂设置的标志,并向云端上报reset操作,
     * 在规定的时间内(3秒)如果没有收到云端的回复,设备会重新上传reset,直至收到云端的回复位置;
     * 有些产品希望发生reset时设备可以重新启动,如果重新启动之前reset没有上报成功,下一次连接云后,
     * 设备会首先检查Flash中恢复出厂标志是否设置,如果设置了则首先向云端上报reset,直至成功;
     */
    int awss_report_reset();
  • OTA开发

    若使能了OTA功能,请参见OTA编程