如果用户不使用已认证的模组,本文讲解用户如何直接通过生活物联网SDK(不含AliOS Things)开发Wi-Fi单品设备,用以连接生活物联网平台。
在生活物联网平台定义产品
- 创建项目。
参见创建项目。
创建产品。
参见创建产品,连网方式选择为WiFi。生活物联网的公版App可以通过本地发现方式来添加设备。
说明如果手机App使用生活物联网的公版App对设备进行管理,那么添加设备时如果发现设备是Wi-Fi设备,那么就会进入阿里的Wi-Fi配网过程对设备进行配网,因此设备需要集成阿里的Wi-Fi配网功能。
如果设备并没有集成阿里的Wi-Fi配网功能,而是通过触摸屏输入Wi-Fi热点的SSID/密码或者其它配网方式,联网方式可以选择以太网,以避免生活物联网的公版App使用阿里配网流程来添加设备,但是同时可以使用本地发现方式来添加设备。
产品功能定义。
参见功能概述来定义产品的功能。
- 添加测试设备。
参见调试设备来添加测试设备,并设置设备的绑定策略等。
设备端开发
请参见获取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的实现:
Wi-Fi配网HAL的适配注:若未选择集成阿里提供的Wi-Fi配网功能,可以不用适配这些HAL
设备身份认证模式
设备连接阿里云物联网平台时,可以使用预置设备证书的方式进行设备的身份认证,也可以采用动态注册方式得到完整的设备证书再进行身份认证,请参见设备认证。
产品功能实现
在设备上根据云端定义的产品功能进行相应功能的实现,请参见物模型编程。
Wi-Fi配网开发
请访问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编程。