二 基于X2000开发板使用IoT_Device_SDK连接华为云。
1概述
本文档已经为您做好编译IoT_Device_SDK的前期准备流程,您可以略过目录2前置条件,直接将iot源码拷贝到君正工程的third-party目录下。感兴趣可以按照下述步骤进行编译构建尝试一下,如果有更好的想法欢迎指导帮助。
2 前置条件
首先要编译IoT_Device_SDK,但是官方文档中提供的编译方式使用的是本地编译,但是上述编译过程中,编译器使用的是GCC 64位,而君正X2000开发板采用的是mips指令集,32位。因此首先需要修改上述编译过程中的makefile,修改指令集以及对应的编译参数。我这里的mips编译器采用的是君正的OpenHarmony工程中自带的编译器,具体路径为/home/star/share/x2000_dowload/oh-halley5-20220706_v0.2.0-rc.2/device/ingenic/x2000/prebuilt/gcc/linux-x86/mips/mips-gcc720-glibc229/bin/mips-linux-gnu-gcc,这里定义为MIPS_DIR。
编译SDK的过程分为
- 编译openssl
编译openssl需要修改编译器为mips-linux-gnu-gcc,该makefile中定义了变量CROSS_COMPILE,因此我们只需要修改该变量即可。
具体如下所示将如下的配置命令修改为
setarch i386 ./config no-asm shared --prefix=/home/star/share/test/openssl --openssldir=/home/star/share/test/openssl/ssl CROSS_COMPILE=/home/star/share/x2000_dowload/oh-halley5-20220706_v0.2.0-rc.2/device/ingenic/x2000/prebuilt/gcc/linux-x86/mips/mips-gcc720-glibc229/bin/mips-linux-gnu-
之后进行make depend等命令。如果报错无法识别-m32,将makefile中的-m32全部删除即可。之后make clean再次make即可。
- 编译paho-mqtt
首先替换编译器,该makefile较为简单,只需要将makefile中的gcc变量替换为MIPS_DIR即可,同时删除=前面的?,即CC=MIPS_DIR。其余编译与原链接中指导一致。
- 编译zlib
- 替换编译器,需要将makefile文件中所有的gcc替换为MIPS_DIR,大约有3处。
- 编译IoT_Device_SDK
替换编译器CC=MIPS_DIR,之后将makefile中所有的-m64删除。
对于OpenHarmony源码中已经编译了openssl和zlib动态库,因此对于上述文件无需修改,可以直接使用源码中自带的库。
那么现在只需要修改paho-mqtt的makefile即可,但是编译paho-mqtt需要依赖于openssl的动态库以及头文件。因此针对openssl需要在不修改makefile的情况下先编译出来获取到include文件夹。而动态库直接使用OpenHarmony编译好的。可以通过find命令找到对应的的文件进行拷贝到指定目录下,之后编译paho-mqtt。
3编译IoT_Device_SDK
首先IoT_Device_SDK与OpenHarmony源码变异架构不同,OpenHarmony采用GN架构,IoT_Device_SDK基于makefile架构,因此首先需要解决通过GN调用make指令编译IoT_Device_SDK。
可以查询GN文件的特性,可见action可以实现通过运行脚本,进而来执行make命令来进行编译SDK。
首先,打开OpenHarmony源码中的ohos.build文件,查看编译组件,其位于如下目录oh-halley5-20220706_v0.2.0-rc.2\vendor\ingenic\halley5\ohos.build。如图1所示,该文件将要执行halley5和子系统product_halley5_spi_nand_flash两个目标。
图1
找到config.json 文件,其路径为: oh-halley5-20220706_v0.2.0-rc.2\vendor\ingenic\halley5\config.json,可见该文件中包含上面的oho.build文件中的product_halley5_spi_nand_flash子系统。该文件下面包含了一系列的将要被执行的子系统以及相关的组件。
图2
如果我们不想单独构建一个子系统可以直接作为某一个将会被执行的组件添加进去,这里以communication为例。如图3所示,在config.json文件中的77行,子系统communication中添加一个component,命名为iotlink_linux。
图3
接下来在对应的communication.json中添加该component的详细内容,找到communication.json,路径如下oh-halley5-20220706_v0.2.0-rc.2\build\lite\components\communication.json。可以复制该文件中的任意一个component,并将下图中的注释内容(名称、路径、目标名称、系统)加以修改即可。
图4
接下来按照上面的路径添加一个BUILD.gn文件,并将上述文件的目标名称修改为demo。
图5
之后我们只需要编写build_iot_sdk_demo.py即可,由于本人没怎么写过python,简单给个示例,如图6所示。
图6
接下来修改device_demo.c 代码中的username和password,替换为自己在华为云注册的想要接入的设备的设备ID和设备秘钥,如图7所示,该文件位于oh-halley5-20220706_v0.2.0-rc.2\third_party\iot_libs\huaweicloud-iot-device-sdk-c-0.9.0\src\device_demo\device_demo.c
图7
通过串口直接进入bin目录下执行MQTT_Demo.c,显示如图8所示的日志即为对接华为云成功,也可以通过华为云IoTDA查看到设备已经在线并在设备影子中看到上报的数据。
图8
如果采用MQTTS连接,且不绕过证书的方式,需要首先对于开发板时间进行校验(保证证书有效期),输入date查看开发板当前日期,可见为2020年,并不在证书有效期内,使用date -s修改为当前日期,如2023年1月3日。
图9
之后再进行连接,具体如下所示。
图10
- 点赞
- 收藏
- 关注作者
评论(0)