如果用户不使用已认证的模组,本文讲解用户如何直接通过生活物联网SDK(不含AliOS Things)开发Wi-Fi单品设备,用以连接生活物联网平台。
在生活物联网平台定义产品
设备端开发
请参见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:使能Wi-Fi配网 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的实现:
- 基础HAL适配
- MQTT连云相关的HAL适配
- 线程相关HAL的适配
- Wi-Fi配网HAL的适配注:若未选择集成阿里提供的Wi-Fi配网功能,可以不用适配这些HAL
- OTA HAL的适配
- 本地通信HAL的适配
- 设备身份认证模式
设备连接阿里云物联网平台时,可以使用预置设备证书的方式进行设备的身份认证,也可以采用动态注册方式得到完整的设备证书再进行身份认证,请参见设备认证。
- 产品功能实现
在设备上根据云端定义的产品功能进行相应功能的实现,请参见物模型编程。
- Wi-Fi配网开发
请访问生活物联网SDK的Wi-Fi配网开发指南了解如何调用配网相关的API实现Wi-Fi配网。
- 云端解绑与恢复出厂默认设置
设备被解绑后,云端会下发一个解绑事件通知:
{"identifier":"awss.BindNotify","value":{"Operation":"Unbind"}}
设备收到此消息可以做重置配网、清空本地数据等处理。如果通过App将设备恢复出厂默认设置,云端会下发一个Reset事件通知:
{"identifier":"awss.BindNotify","value":{"Operation":"Reset"}}
设备收到此消息可以做重置配网、清空本地数据等处理。设备开发者可以结合具体产品类型,决定收到解绑和恢复出厂默认设置通知后做哪些清空操作。可以参考示例代码example/smart_outlet/smart_outlet_main.c中
notify_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编程。