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中,添加“qqlink”文件夹
        单击右键,选择“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
    183. Reset Ameba, “**********RTOS SDK 1.1.101**********”的字样将会显示,并且Ameba 开始scan channel
    194. 将手机连上可连接网络的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