如果用戶不使用已認證的模組,本文講解用戶如何直接通過生活物聯網SDK(不含AliOS Things)開發Wi-Fi單品設備,用以連接生活物聯網平臺。

在生活物聯網平臺定義產品

  1. 創建項目。
    參見創建項目
  2. 創建產品。

    參見創建產品連網方式選擇為WiFi。生活物聯網的公版App可以通過本地發現方式來添加設備。

    說明

    如果手機App使用生活物聯網的公版App對設備進行管理,那么添加設備時如果發現設備是Wi-Fi設備,那么就會進入阿里的Wi-Fi配網過程對設備進行配網,因此設備需要集成阿里的Wi-Fi配網功能。

    如果設備并沒有集成阿里的Wi-Fi配網功能,而是通過觸摸屏輸入Wi-Fi熱點的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:使能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配網開發

    請訪問生活物聯網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.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編程