Standard SDK: [RTL8195] QQ物聯 – 手機QQ與Ameba相互通訊

QQ物聯提供的雲端服務可將QQ帳號體系、好友關係鏈、QQ消息通道及音視頻服務等核心能力與設備相連接,不再需要單獨的APP, 可通過手機QQ來與設備進行通訊。
Ameba目前已經提供支持QQ物聯平台的解決方案,可在http: //iot.open.qq.com/wiki/#!SDK/RTOS_SDK_Download.md中看到相關的Realtek 8711 的庫文件。
為方便用戶使用,我們同時提供了範例在 v3.4b_patch_qqlink 中。 (申請公測賬號需要1-3個工作日)

材料準備

QQ 物聯準備

可结合http://iot.open.qq.com/wiki/#!CASE/Air_Purifier.md的步驟來完成準備。

  • 申請公測
    進入鏈接http://iot.open.qq.com/?from=management ,選擇“申請公測”,為您的QQ號取得QQ物聯的公測資格。公測申請提交到白名單開通,大約需要1-3個工作日時間。
    1
  • 配置平台
    在白名單開啟後,可進入“開發配置平台” http://iot.open.qq.com/ 對設備進行註冊及配置。
    2
    進入 配置平台 - 設備 之後,點擊 添加設備 按鈕,填寫“設備名稱“及選擇“設備類型”後即可開始快速註冊一個新設備:
    3

    完成後,我們已經獲得了該產品獲得重要信息:pidserver key
    點擊編輯設置設備的信息
    3-1

    即可開始對設備的相關信息進行設置
    1.設備信息
    4

    • 設備型號: 您可以自由填寫。
    • 操作系統: RTOS
    • 聯網方式: WiFi
    • 配網方式 QQLink(配合example使用)
      • QQLink: 可通過手機QQ將設備配置WiFi網絡
      • WiFi Router: 設備自行連接WiFi,手機QQ要連接同一WiFi在局域網內搜索設備
    • 公鑰上傳 點擊網頁上的”公鑰&證書工具下載(Win 7 Only)”鏈接,然後運行”密鑰生成工具”(CreateKeySnLicenceTool),點擊下圖中的”生成公私鑰對”按鈕,會在您指定的目錄下生成一對非對稱密鑰文件: ec_key.pem (需妥善保管)和public.pem。之後點擊上傳按鈕上傳public.pem 就可以了。
      5
      6

    2. 功能配置
    為配合提供的範例的使用,在公有功能中,開啟ID:10000 手機QQ給設備發文本消息以及ID:10101 剩餘電量功能。
    7

    3. 控制器設置
    可使用默認的“自動生成控制器”,點擊“下一步”進行保存。

    4. OTA固件管理
    在IAR 編譯好之後,可將固件上傳至此。

    5. “動作”設置
    點擊配置頁面左側的“動作”,然後點擊“添加動作”,來添加由手機QQ所觸發的設備需要做的動作內容。
    32
    以此example為例,設定動作名稱(以“文本”為例),消息類型為“動態消息”,消息模板為“純文本”,然後點擊保存。
    33

    6. “觸發器”設置
    添加觸發器來觸發上一步中所設定的動作,以完成範例中設備要發給QQ的文本信息的動作。
    34
    設定觸發器時,首先選定要設定的設備,然後選擇“設備給手機QQ發消息”的功能,在設置觸發條件時,臨界值設定為“8”,在下面選擇“等於”,被觸發的動作選擇在上一步中設定的動作“文本”。
    35
    此處設定的臨界值為8是因為在qq_device.c($ sdk\component\common\application\qqlink\v1.1.101\src)中設定了msg trigger為8.
    36

  • 初始化信息
    要完成手機QQ與Ameba的對接,需要幾個關鍵信息。 PID, SN, LICENSE以及二維碼。具體的名詞解釋可參考http://iot.open.qq.com/wiki/#!FUNC/ExplanationOfTerms.md

    • pid(product id:產品ID)
      成功添加設備後即可獲得,可在設備配置頁面的上方找到。
      進入http://iot.open.qq.com,選擇相應的設備,點擊“編輯”,即可在頁面上方獲取“設備PID”。
    • sn(serial number:序列號)
      依然使用生成公私密鑰時使用的工具(CreateKeySnLicenceTool),若沒有,可到http://iot.open.qq.com/wiki/#!SDK/RTOS_SDK_Download.md的“工具下載”中下載“key_tools”
      可選擇“使用自有序列號”,序列號格式要求:長度必須是16個字符的字母、數字或者連詞符的組合;
      也可以選擇隨機生成。
      然後點擊下方的“生成SN”,所有生成的SN將會保存至所填的“選擇路徑”下。
      8
    • license(sn對應的認證簽名)
      生成license時需要使用到“設備信息”中和公鑰一起產生的私鑰ec_key.pem
      添加私鑰,然後點擊“生成Licence”,在每個SN對應的文件夾中,就會存有對應license的txt 文檔。點擊“驗證文件簽名是否正確”對SN和license進行驗證。
      9
      10
    • 二維碼
      每一個SN會對應一個二維碼,內容為http://iot.qq.com/add?pid=<PID>&sn=<SN>
      您可以到http://liantu.com/或使用其他二維碼生成工具來獲取二維碼。
      以“聯圖網”為例,點擊左側的“網址”圖標,輸入URL內容,將PID和SN改為對應的值,點擊“保存圖片”即可獲得二維碼。
      37
  • 下載手機QQ
    可以在http://im.qq.com/下載最新的手機QQ版本,支持智能硬件接入的手機QQ的版本為:
    Android QQ : 要求5.7版本以上
    iPhone QQ : 要求5.7 版本以上

範例說明

  • 將QQLink patch加入 Ameba project
    1. 將QQLink patch中的文件添加到SDK對應的位置
      • qqlink 文件夾複製到SDK下“\component\common\application”中
      • atcmd_qqlink_example.c 複製到SDK下“\component\common\api\at_cmd\”中
      • lib_rtlstd.a文件替換SDK中的“\component\soc\realtek\8195a\misc\bsp\lib\common\IAR\lib_rtlstd.a”
    2. 在IAR中添加相關文件
      • 在IAR project中,在“console”文件夾中添加“atcmd_qqlink_example.c”
        右鍵單擊“console”文件夾,選擇“Add”下的“Add Files”,加入剛剛複製到“component\common\api\at_cmd”中的“atcmd_qqlink_example.c”。
        12
      • 在IAR project中,添加“link”文件夾
        單擊右鍵,選擇“Add”下的“Add Group”, “Group name”為“qqlink”。
        13
      • 添加“...\qqlink\ v1.1.101\src”中的C文件以及lib文件到“qqlink”文件夾
        右鍵單擊“qqlink”,選擇“Add”下的“Add Group”,添加“...\qqlink\ v1.1.101\src”中的所有C文件,
        若為芯片為RTL8711AF, 添加“Lib_txdevice_1.1.101_sram.a”;
        若為RTL8711AM或RTL8195AM, 添加“Lib_txdevice_1.1.101_sdram.a”
        14
  • 修改相關設定並編譯
    有四個文檔需要修改:

    1. platform_opts.h ($sdk\project\realtek_ameba1_va0_example\inc)
      添加:#define CONFIG_QQ_LINK 1
      关闭“fast reconnect”:#define CONFIG_EXAMPLE_WLAN_FAST_CONNECT 0
      关闭“simple config”:#define CONFIG_INCLUDE_SIMPLE_CONFIG 0
    2. example_entry.c ($sdk\component\common\example\)
      example_entry()中添加:

      void example_entry(void)
      {
         ... ...
         #if CONFIG_QQ_LINK
         example_qq_link();
         #endif
         ... ...
      }
      
    3. update.c ($sdk\component\common\utilities)
      打开WRITE_OTA_ADDR: #define WRITE_OTA_ADDR 1
    4. qq_device.c ($sdk \component\common\application\qqlink)
      1. 將void device_run()中info.product_id = XXXXXXXXX;的 info.product_id的數值改為在QQ物聯中您的設備的PID值。
      2. uint8_t CLIENT_PUB_KEY[] 和uint8_t AUTH_KEY[]的值
        需要用到密鑰生成工具以及服務器公鑰,點擊設備編輯頁面中的“服務器公鑰下載”
        15下載後打開密鑰生成工具,點擊“生成共享密鑰和客戶端公鑰”,用記事本打開剛剛下載的服務器公鑰,將其複製到“請輸入服務器公鑰:”中,點擊“生成” ,即可獲得”client_pub_key”和”ecdh_key”.

        uint8_t CLIENT_PUB_KEY[] = “client_pub_key”後面的內容,
        uint8_t AUTH_KEY[] = “ecdh_key”後面的內容
        

        16
        完成如上修改後,點擊make,然後將其download到Ameba中。

  • 使用步骤
    1. 如果是第一次使用,Ameba會提示沒有“SN/LICENSE”,因此需要用AT commad “ATCQ”將您生成好的一組SN 和LICENSE存入flash。
    172. AT commad “ATCQ” 使用方法: 因為license較長,因此將其分為part1和part2兩部分存入。您可輸入ATCQ來查看其用法。
    • ATCQ=sn,xxxxxxxxxx
    • ATCQ=licensepart1,xxxxxxxxxxxxx
    • ATCQ=licensepart2,xxxxxxxxxxxxx
    18

    3. Reset Ameba, “**********RTOS SDK 1.1.101**********”的字樣將會顯示,並且Ame​​ba 開始scan channel
    19

    4. 將手機連上可連接網絡的WiFi,並打開手機QQ(需版本5.7以上)。

    5. 在QQ聯繫人列表中,打開“我的設備”,點擊“發現新設備”,準備好Ameba中儲存的SN和PID所對應的二維碼,用“掃一掃”來鎖定設備(二維碼的內容為http://iot.qq.com/add?pid=<PID>&sn=<SN>
    20

    6. 掃描二維碼後,再添加新設備頁麵點擊“我已確認”,然後輸入WiFi的相關信息點擊“下一步”進行配置。
    21

    7. Ameba在搜索到網絡配置信息後,會鎖定channel,然後連接WiFi。
    22

    8. 配置好後,手機將會搜索到該設備,並提示進行綁定,點擊“確認綁定”,即可將設備添加到手機QQ的通訊錄中。 Ameba的log也會顯示“[device_on_bind_status] : Bind status[bound].”
    23
    24

    9. 點擊“進入設備”可看到顯示電量的界面,也可點擊右上方的信息按鈕,進入聊天模式,example中,ameba會回復用戶它剛收到的信息
    25
    26

  • OTA
    在設備編輯頁面選擇OTA固件管理,點擊”上傳OTA包”, 將IAR 編譯後的固件上傳。固件為ota.bin ($ sdk\ project\realtek_ameba1_va0_example\EWARM-RELEASE\Debug\Exe),並設置版本號為100。
    27
    若有更新,將最新的ota.bin上傳,並更改版本號為大於100的數值。在手機QQ中,點擊設備的“設置”,選擇“檢查設備更新”,若檢測到不是最新版本,可選擇“下載更新文件”來升級固件。
    28

    在下載沒有完成時,可隨時點擊紅色x來停止下載。
    29

    下載完成後,手機QQ會顯示“重啟設備安裝更新”,Ameba的log會顯示 “Ota download succeed”。
    30

    下載完成後,點擊“重啟設備安裝更新” ,再點擊“確認”後,Ameba會reset進入新的固件。
    31