概述

本文讲解如何移植Link SDK到Windows操作系统,在Windows下运行demo程序连接到阿里云物联网平台,本文的示例中将涉及以下功能点:
  • 使用MQTT连接阿里云物联网平台,连接使用TLS进行加密。
  • 使用一机一密方式对设备进行认证。
  • 如何使用MQTT TOPIC进行数据收发。
  • 如何实现相关HAL。

开发环境描述

操作系统版本 Win7
IDE Eclipse IDE for C/C++ Developers,版本:2019-03 (4.11.0)
包管理工具 MSYS2
Toolchain mingw-w64-x86_64-toolchain
TLS库 openssl,版本1.1.1.b-1
说明 若用户未安装Eclipse开发环境,可参考Eclipse开发工具的官网。
请确认开发环境中openssl已安装,在MSYS2的命令行工具中输入。
pacman -Sl |grep openssl
确保输出的内容中,如下图框选的openssl库显示已安装

前置文档

在开始实际开发之前请务必阅读以太网设备接入过程说明,了解基本概念。

示例产品功能描述

示例产品连接到阿里云物联网平台之后,将会订阅TOPIC “/${ProductKey}/${deviceName}/user/get”的数据,然后每4秒发送一个消息到该topic,意味着这个消息会被发送到物联网平台,然后由于设备自己订阅了这个topic,因此设备发送到物联网平台的消息将会被平台发送给设备。

因此从设备的角度来看,示例产品的功能就是将消息发送到物联网平台,并将其接收回来。

云端操作

  • 创建以太网产品。
  • 创建调试设备。
  • 修改Topic属性。
    示例代码中使用到的Topic “/${ProductKey}/${deviceName}/user/get”默认只有“订阅权限”,需要将其修改为“发布和订阅”,因为设备将会发送消息到这个topic。修改后的显示如下所示。
说明 用户创建的产品用于ProductKey将会与示例不同,因此上图中Topic中的a1a840P0BS3将会显示用户创建产品的ProductKey。

设备端开发过程

  1. SDK获取。
    说明 本文基于SDK3.0.1进行编写,为了避免代码存在差异,建议用户使用同样的版本进行体验。
  2. SDK配置。

    因为不同的SDK功能依赖的HAL不一样,为了减少设备开发时对接HAL的数量,开发者只需要选中需要支持的功能即可。

    运行SDK根目录下的config.bat,进行SDK功能配置。
    请确保以下选项被选中,如上图所示。
    • PLATFORM_HAS_STDINT
    • PLATFORM_HAS_DYNMEM
    • PLATFORM_HAS_OS
    • FEATURE_MQTT_COMM_ENABLED
      • FEATURE_MQTT_DEFAULT_IMPL
      • FEATURE_MQTT_DIRECT
    • FEATURE_SUPPORT_TLS

    配置完成后点击按钮Exit,配置工具会提示是否保存配置,选择Yes即可

  3. Eclipse工程创建与配置。
    1. 在Eclipse IDE中创建一个Eclipse C工程。
    2. 点击Next按钮后,对工程进行命名,设置Toolchains,如下图所示。
    3. 点击按钮Finish完成工程创建后,右键单击工程显示如下所示的菜单。
    4. 点击Import后跳出下面的Import窗口。
    5. 选择File System后,点击按钮Next,然后Eclipse将会提示输入需要导入的路径,请将上一节中生成的output目录进行导入,如下图所示。

      其中mqtt_example.c是SDK中提供的示例代码,在本文中将其加入进行验证使用。

    6. 点击按钮Finish之后,Eclipse将会把output下面的相关代码复制到Eclipse的workspace中,如下图所示。
    7. 在工程上右键单击显示菜单,并点击Properties按钮。
    8. 点击Properties按钮之后,将会显示Properties窗口,选择C/C++ Build > Settings
    9. 将相关路径加入之后,再选择MinGW C Linke > Libraries,将wsock32和SSL加入,如下图所示。
    10. 点击窗口下方的Apply and Close结束配置Eclipse的工程配置。
  4. HAL实现。
    wrapper.c里面包含SDK运行时需要目标平台进行支持的HAL函数,这些函数抽取出来之后函数体并没有进行实现,需要开发者进行实现。

    这里是该wrapper.c的参考实现

    注意 用户需要将wrapper.c中下面的HAL函数中的内容替换为自己创建的产品和设备的信息:
    • HAL_GetProductKey
    • HAL_GetDeviceName
    • HAL_GetDeviceSecret
  5. 编译与调试。
    • 设备端
      1. 右键单击工程显示菜单,并点击其中的“Build Project”,如下图所示。
        如果一切正常,编译完成之后在Eclipse的console中会显示编译结束,如下图所示。
      2. 在Eclipse之中将项目以“Local C/C++ Application”运行,下面是正确运行时的console中的显示。

        其中,mqtt Connect Success表示MQTT连接云端成功,设备认证已通过。

        mqtt_example.c会订阅Topic/${ProductKey}/${deviceName}/user/get,并把消息发送给这个Topic,因此设备将会把自己发送给物联网平台的消息接收回来,在Console中的显示如下图所示。

        上图中圈选的PUBLISH是设备发送给物联网平台的消息,圈选的Payload:{“nessage”:”hello!”}是设备从物联网平台接收到的消息。

    • 物联网平台端
      • 开发者也可以在物联网平台端查看设备的状态,当设备连接到物联网平台时,设备的状态将会显示为“在线”,如下图所示。
      • 开发者也可以点击“日志服务”查看设备向物联网平台上报的消息、以及物联网平台发送给设备的消息,如下图所示。

文档参考

当设备可以连接到物联网平台之后,用户会进行自己的产品逻辑的编写,请参考下面的章节了解更多细节。