物模型编程接入LP-无TLS加密

本文介绍如何移植Link SDK到Windows操作系统,在Windows下运行设备Demo程序连接到阿里云物联网平台。

本文的示例中将涉及以下功能点:

  • 使用MQTT连接阿里云物联网平台,不使能TLS加密。

  • 使用一机一密方式对设备进行认证。

  • 属性上报、事件上报。

  • 如何实现相关HAL。

重要

本文基于Link SDK 3.0.1版本介绍设备接入。

开发环境描述

操作系统版本

Win7

IDE

Eclipse IDE for C/C++ Developers,版本:2019-03 (4.11.0)

包管理工具

MSYS2

Toolchain

mingw-w64-x86_64-toolchain

重要

若用户未安装Eclipse开发环境,可参考Eclipse开发工具官网,了解如何安装Eclipse、MSYS2、MinGW来在Windows环境下编译C程序。

Example程序功能描述

示例程序(output\examples\linkkit_example_solo.c)连接到阿里云物联网平台之后,将会每2秒钟上报一次设备的属性,每10次上报一次事件到物联网平台。

物联网平台云端操作

  • 创建以太网产品

    创建产品,并获取产品的ProductKey、ProductSecret。

    为了快速创建与示例代码功能匹配的产品功能定义,用户可以将示例产品的物模型定义(_src\dev_model\examples\model_for_examples.json_)导入物联网平台。

  • 创建调试设备

    获取设备的DeviceName、DeviceSecret。

设备端开发过程

SDK获取

获取Link SDK3.0.1代码。

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_DEVICE_MODEL_ENABLED

功能配置之后,选择“Exit”,并进行配置保存。

SDK代码抽取

运行SDK根目录下的extract.bat,将选中功能的代码抽取出来,如下图所示:

抽取出来的代码将放置在SDK的output目录下。

Eclipse工程创建与配置

  1. 在Eclipse IDE中创建一个Eclipse C工程。

  2. 单击Next后,对工程进行命名,设置Toolchains,如下图所示:

  3. 单击Finish,完成工程创建后,右键单击工程显示工程菜单。

  4. 单击Import后,弹出Import对话框。

  5. General中选择File System,然后单击Next

  6. 单击上图中的Browse...,选择SDK抽取出来的output目录:

    • output目录下eng下的所有子目录均选中,如上图所示。

    • output目录下的examples目录只选中linkkit_example_solo.c,如上图右边的橙色框所示。

  7. 单击Finish后,Eclipse将把相关代码复制到Eclipse的工程下面,如下图所示:

  8. 在工程上右键单击显示菜单,并单击Properties

  9. 单击Properties,将会显示如下图所示的窗口:

  10. 在窗口左边的树形菜单中选择C/C++ Build > Settings,在右边的Settings中设置编译时头文件查找目录,将output/eng下的所有目录、output/eng下面的sdk_include.h加入,并单击窗口下方的Apply保存配置。

  11. 继续单击Settings窗口中的Libraries菜单,把库wsock32加入,加入后的显示如下图所示:

  12. 单击窗口下方的Apply and Close完成配置。

HAL实现

wrapper.c中包含SDK运行时需要目标平台进行支持的HAL函数,这些函数需要开发者自行实现。

本文提供了wrapper.c参考实现,需要注意的是开发者一定需要将下面的HAL进行修改来返回设备的身份信息:

  • HAL_GetProductKey()

  • HAL_GetProductSecret()

  • HAL_GetDeviceName()

  • HAL_GetDeviceSecret()

编译与调试

设备端

右键单击项目显示菜单,并单击其中的Build Project,如下图所示:

如果一切正常,编译完成之后在Eclipse的console中会显示:

然后在Eclipse之中将项目以Local C/C++ Application运行,下面是正确运行时的console中的显示:

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

物联网平台端

开发者也可以在物联网平台上查看设备的运行状态,如果设备已正常连接云端,那么云端显示如下图所示:

image.png

单击物模型数据,可以看见设备端上报属性的时间,以及当前counter的数值,如下图所示:

image.png

单击事件管理页签,可以看见设备上报事件的时间以及内容,如下图所示

image.png

相关参考