00. 目录

文章目录

  • 00. 目录
  • 01. 概述
  • 02. 开发环境
  • 03. 创建产品
  • 04. 注册设备
  • 05. C语言工程下载
  • 06. 编译OpenSSL库
  • 07. 编译paho库
  • 08. 编译C参考代码
  • 09. 属性上报
  • 10. 接收下发命令
  • 11. 通过云端获取设备上报的数据
  • 12. 附录

01. 概述

基于C代码演示设备通过MQTTS/MQTT协议接入华为云物联网平台,通过平台接口实现南向“数据上报”、“命令下发”的功能,通过应用侧的示例代码接收北向服务端订阅的消息示例。以智慧路灯为例,设备将光照强度等信息上报到IoT平台,应用服务器再接收从平台推送来的设备数据。

02. 开发环境

Linux操作系统,且已安装好gcc(建议4.8及以上版本)。作者使用Ubuntu20.04系统。

03. 创建产品

产品模型是用来描述设备能力的文件,通过JSON的格式定义了设备的基本属性、上报数据和下发命令的消息格式。定义产品模型,即在物联网平台构建一款设备的抽象模型,使平台理解该款设备的功能。

3.1 访问设备接入服务,单击“管理控制台”进入设备接入控制台。

3.2 选择左侧导航栏的“产品”,单击右上角“创建产品”。

3.3 在弹出的窗口中,可以参考图中的内容填写。

3.4 下载模型文件,该模型文件已开发完毕(由开发产品模型开发完毕的产品模型导出)。

3.5 创建成功后,点击刚创建的产品,然后点击上传模型文件(无需解压,并且压缩包的名称不能有括号),上传刚下载的模型文件

04. 注册设备

4.1 选择设备接入服务左侧导航栏的“设备”,选中右上角的“注册设备”按钮。

4.2 在弹出的窗口中,可以参考图中的内容填写(产品需要选择刚刚创建的产品,密钥不填写,则由平台自动生成,这里是由平台自动生成)然后点击“确定”按钮。

4.3 设备创建成功后,需要保存一下设备ID和密钥(后续设备连接的时候需要用到)。

05. C语言工程下载

5.1 下载quickStart©样例。

5.2 将代码拷贝到Ubuntu运行环境中。代码文件层级如下图。

deng@local:~/iot$ tree quickStartC
quickStartC
├── conf
│   └── rootcert.pem
├── include
│   ├── base
│   │   ├── MQTTAsync.h
│   │   ├── MQTTClient.h
│   │   ├── MQTTClientPersistence.h
│   │   ├── MQTTProperties.h
│   │   ├── MQTTReasonCodes.h
│   │   └── MQTTSubscribeOpts.h
│   ├── openssl
│   └── util
│       └── string_util.h
├── lib
├── Makefile
└── src├── mqtt_c_demo.c└── util└── string_util.c8 directories, 11 files
deng@local:~/iot$ 代码目录简述:
src:源码目录
mqtt_c_demo:demo核心源码;
util/string_util.c:工具资源文件;conf:证书目录
rootcert.pem:设备校验平台身份的证书,用于设备侧接入物联网平台登录鉴权使用;include: 头文件目录
base目录:存放依赖的paho头文件openssl目录:存放依赖的openssl头文件util目录:存放依赖的工具资源头文件lib:依赖库文件
libcrypto.so*/libssl.so*: openssl库文件
libpaho-mqtt3as.so*: paho库文件Makefile:Makefile文件    

06. 编译OpenSSL库

6.1 下载openssl,上传到Ubuntu任意目录下,并使用如下命令解压:

deng@local:~/iot$ tar -xzvf openssl-1.1.1d.tar.gz 

6.2 执行以下命令进入openssl源码目录

deng@local:~/iot$ cd openssl-1.1.1d/

6.3 创建openssl编译后的目录

deng@local:~/iot/openssl-1.1.1d$ mkdir ~/openssl

6.4 创建配置文件目录

deng@local:~/iot/openssl-1.1.1d$ mkdir ~/openssl/config

6.5 运行如下配置命令

deng@local:~/iot/openssl-1.1.1d$ ./config shared --prefix=/home/deng/openssl --openssldir=/home/deng/openssl/config

其中“prefix”是安装目录,“openssldir”是配置文件目录,“shared”作用是生成动态链接库(即.so库) 。

如果编译有问题,配置命令加上no-asm(表示不使用汇编代码)

./config no-asm shared --prefix=/home/deng/openssl --openssldir=/home/deng/openssl/config

6.6 在openssl源码目录下,运行make depend命令。

deng@local:~/iot/openssl-1.1.1d$ make depend

6.7 运行make命令进行编译

deng@local:~/iot/openssl-1.1.1d$ make

6.8 安装openssl

deng@local:~/iot/openssl-1.1.1d$ make install 

6.9 拷贝动态库和头文件

在配置的openssl安装目录下home/deng/openssl找到lib目录,有生成的库文件:“libcrypto.so.1.1”“libssl.so.1.1”和软链接“libcrypto.so”、“libssl.so”,请将这些文件拷贝到quickStart©的lib文件夹下(同时将/home/deng/openssl/include/openssl里的内容拷贝到quickStart©的include/openssl下)。

deng@local:~/openssl/lib$ pwd
/home/deng/openssl/lib
deng@local:~/openssl/lib$ cp libcrypto.so.1.1  libssl.so.1.1  libcrypto.so libssl.so  /home/deng/iot/quickStartC/lib/deng@local:~/openssl/include/openssl$ pwd
/home/deng/openssl/include/openssl
deng@local:~/openssl/include/openssl$ cp * /home/deng/iot/quickStartC/include/openssl/
deng@local:~/openssl/include/openssl$ 

温馨提示:

有的编译工具是32位的,如果在64位的linux机器上使用,这时只要将Makefile中的-m64都删除,再进行编译即可。

07. 编译paho库

7.1下载paho.mqtt.c源码。

7.2 上传到Ubuntu编译机。

7.3 解压

deng@local:~/iot$ tar -xzvf paho.mqtt.c-1.3.2.tar.gz

7.4 通过如下命令进行编辑Makefile

deng@local:~/iot/paho.mqtt.c-1.3.2$ pwd
/home/deng/iot/paho.mqtt.c-1.3.2
deng@local:~/iot/paho.mqtt.c-1.3.2$ vim Makefile +134

7.5 在134行之后添加下面两行(自定义的openssl的头文件和库文件)

CFLAGS += -I/home/deng/openssl/include
LDFLAGS += -L/home/deng/openssl/lib -lrt

7.6 修改Makefile中的一下几行

7.7 执行清空命令

deng@local:~/iot/paho.mqtt.c-1.3.2$ make clean 

7.8 执行编译命令

deng@local:~/iot/paho.mqtt.c-1.3.2$ make

7.9 编译完成后,可以在build/output目录下看到编译成功的库。

deng@local:~/iot/paho.mqtt.c-1.3.2/build/output$ pwd
/home/deng/iot/paho.mqtt.c-1.3.2/build/output
deng@local:~/iot/paho.mqtt.c-1.3.2/build/output$ ls
libpaho-mqtt3a.so    libpaho-mqtt3a.so.1.3  libpaho-mqtt3as.so.1    libpaho-mqtt3c.so    libpaho-mqtt3c.so.1.3  libpaho-mqtt3cs.so.1    samples
libpaho-mqtt3a.so.1  libpaho-mqtt3as.so     libpaho-mqtt3as.so.1.3  libpaho-mqtt3c.so.1  libpaho-mqtt3cs.so     libpaho-mqtt3cs.so.1.3  test
deng@local:~/iot/paho.mqtt.c-1.3.2/build/output$ 

7.10 拷贝paho库文件。

当前SDK仅用到了libpaho-mqtt3as,请将**“libpaho-mqtt3as.so”“libpaho-mqtt3as.so.1”**文件拷贝到quickStart©的lib文件夹下。(同时回到paho源代码路径,进入src目录,将MQTTAsync.h、MQTTClient.h、MQTTClientPersistence.h、MQTTProperties.h、MQTTReasonCodes.h、MQTTSubscribeOpts.h拷贝到quickStart©的include/base文件夹下)。

deng@local:~/iot/paho.mqtt.c-1.3.2/build/output$ pwd
/home/deng/iot/paho.mqtt.c-1.3.2/build/output
deng@local:~/iot/paho.mqtt.c-1.3.2/build/output$ cp libpaho-mqtt3as.so libpaho-mqtt3as.so.1 /home/deng/iot/quickStartC/lib/
deng@local:~/iot/paho.mqtt.c-1.3.2/build/output$ deng@local:~/iot/paho.mqtt.c-1.3.2/src$ cp MQTTAsync.h MQTTClient.h  MQTTClientPersistence.h MQTTProperties.h MQTTReasonCodes.h MQTTSubscribeOpts.h MQTTExportDeclarations.h /home/deng/iot/quickStartC/include/base/
deng@local:~/iot/paho.mqtt.c-1.3.2/src$ 

08. 编译C参考代码

设备或网关在接入物联网平台时首先需要和平台建立连接,从而将设备或网关与平台进行关联。开发者通过传入设备信息,将设备或网关连接到物联网平台。

8.1 设置参数,只需修改username和password。

char *uri = "ssl://iot-mqtts.cn-north-4.myhuaweicloud.com:8883";
int port = 8883;
char *username = "yourDeviceId"; //设备Id,在平台注册设备成功后返回
char *password = "yourSecret";  //密钥,在平台注册设备成功后返回

温馨提示

MQTTS为8883端口接入,如果使用MQTT协议接入,url为:tcp://iot-mqtts.cn-north-4.myhuaweicloud.com:1883, port为1883。

8.2 编译出现如下错误

mqtt_c_demo.o:在函数‘mqtt_connect_failure’中:
/home/deng/iot/quickStartC/./src/mqtt_c_demo.c:61:对‘pow’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:27: recipe for target 'MQTT_Demo.o' failed
make: *** [MQTT_Demo.o] Error 1

8.3 修改Makefile

deng@local:~/iot/quickStartC$ vim Makefile  +27# 增加-lm
$(TARGET):  $(OBJS)$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LIBS) -lm

8.4 再次编译

deng@local:~/iot/quickStartC$ make 

8.5 运行

执行make进行编译。如果是32位的操作系统,请删除Makefile中的"-m64"。

执行**export LD_LIBRARY_PATH=./lib/**加载库文件。

运行**./MQTT_Demo.o**。

8.6 连接成功后,打印“connect success”,同时在控制台可看到设备已在线。

deng@local:~/iot/quickStartC$ ./MQTT_Demo.o
mqtt_connect() mqttClientCreateFlag = 1.
begin to connect the server.
connect success. 

09. 属性上报

属性上报是指设备主动向平台上报自己的属性(该示例代码已实现自动定时上报功能,可参考下一节在iot平台查看设备上报的数据内容)


//publish data
char *payload = "{\"services\":[{\"service_id\":\"BasicData\",\"properties\":{\"luminance\":32},\"eventTime\":NULL}]}";
  • 消息体payload组装格式为JSON,其中service_id要与产品模型中的定义对应,properties是设备的属性;
  • luminance表示路灯亮度;
  • event_time为可选项,为设备采集数据UTC时间,不填写默认使用系统时间。

设备上报属性成功后,demo控制台中会打印“publish success”字样。

同时在设备详情页面查看到上报的属性:

10. 接收下发命令

订阅了命令Topic后,可以在控制台下发同步命令。

命令下发后,demo中接收到命令:

mqtt_message_arrive() success, the topic is $oc/devices/64787013f4d13061fc88b66f_Test1111/sys/commands/request_id=6f25785d-d21f-42cf-b2ac-9ad9fc6f0ae5, the payload is {"paras":{"switch":"OFF"},"service_id":"BasicData","command_name":"lightControl"} 

11. 通过云端获取设备上报的数据

当数据到达平台后,应用服务器可以使用AMQP来接收推送消息。

12. 附录

参考:华为云社区
下载:基于C示例代码的快速体验代码

【物联网】华为云物联网平台-基于C示例代码的快速体验相关推荐

  1. 本地pytorch代码迁移至华为云ModelArts平台训练

    本地pytorch代码迁移至华为云ModelArts平台训练 上传代码和数据集至华为云OBS 注册华为云OBS账号并使用AK登录. 参考这篇文件OBS账号注册和登录 修改pytorch本地训练代码文件 ...

  2. MQTT网关连接华为云物联网平台应用

    1.概述 ZLAN5143D是一款专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体.如图 1所示,可以连接 ...

  3. stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

    (示例:stm32f103c8t6+esp01s串口AT指令模式) 流程简介: 一. MQTT透传AT固件烧录 本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令 ...

  4. 如何使用华为云IoT平台实现远程控制无人机,资深物联网从业者手把书一步一步教你!

    我目前从事的行业是无人机应用开发,每天都是跟物联网打交道,所以看到了华为云推出的关于物联网相关的技术就来了兴趣.在我的研究领域中,物模型已经是一个非常基础.非常常见的模型了. 如果没有物模型,那么最直 ...

  5. STM32 标准库+ESP8266+华为云物联网平台

    文章内容: STM32标准库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应,并将相关代码打包成HuaweiIOT_a ...

  6. 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)

    教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发) 一.简介         esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的 ...

  7. 使用网络调试助手通过MQTT协议接入到华为云物联网平台

    一.写在之前 首先分享一篇华为云的官方指南:在线开发MQTT协议的智慧路灯_设备接入 IoTDA_最佳实践_设备接入_华为云 这篇文章很好地讲述了如何通过MQTT.fx的设备模拟器替代真实的设备,然后 ...

  8. 华为云物联网平台的微信小程序开发

    第0章 简介 上上期出了一个华为云物联网平台的Android APP应用开发教程, 根据后台的私信,包括华为云物联网IOT论坛里和公众号里,发现大家对物联网平台的移动端的开发需求还是很大的,接下来,带 ...

  9. 华为云物联网平台创建产品与设备(含MQTT.fx测试)

    一. 创建产品.注册设备.添加属性 1. 创建产品 点击进入:华为云物联网平台控制台 2.注册设备 此时可获取设备ID和密钥: device id:"61fb2d7fde9933029be5 ...

最新文章

  1. 【文本分类】基于改进CHI和PCA的文本特征选择
  2. 《精通移动app测试实战:技术、工具和案例》图书目录
  3. python基础语法合集-Python基础语法合集.zip
  4. 后端开发工程师的DIV+CSS两栏布局入门
  5. 与python相关的爬虫工具_python爬虫常用工具集合
  6. 布局管理器 5-----绝对布局
  7. 攻防世界(Pwn) forgot---栈溢出;(方法二)
  8. python安装虚拟环境出现错误_virtualenv 安装虚拟环境问题 请大神指点一二
  9. 【AI视野·今日NLP 自然语言处理论文速览 第十五期】Fri, 25 Jun 2021
  10. 趣味科普丨一文读懂云服务器的那些事儿
  11. 机房(厂房)温度环境监控系统
  12. 汇编:1位16进制数到ASCII码转换
  13. 电话机器人源码可以低成本高效率为OEM代理前景保驾护航
  14. 3dmax渲染计算机内存不足怎么办,解决3dmax渲染内存不够导致渲染失败的三种方法...
  15. 泛目录怎么做百度排名你知道吗?
  16. Google 开源的项目集合
  17. Cocos2d-x之动作类
  18. 3d Max 一些操作技巧
  19. C#中out和ref使用的区别
  20. 王川:我与雷军和而不同

热门文章

  1. matlab 将数据存为txt文件,怎么用matlab将数据存为txt文件
  2. K_A04_001 基于单片机驱动LCD1602字符滚动显示(8位并行+IIC通信)
  3. Failed resolution of: Lcom/growingio/android/sdk/agent/VdsAgent;解决方案
  4. 仓库管理软件开发完成单机测试版
  5. Kitti中GPS/IMU数据格式
  6. 从码云上克隆代码,修改完之后,在提交上去(图解)
  7. 使用正则表达式实现注册表单验证(包括下拉列表二级联动、密码显示和隐藏)...
  8. 论文阅读 AutoGluon-Tabular
  9. 【UiPath2022+C#】UiPath 练习和解决方案-变量、数据类型和控制流程
  10. 百度api爬虫(2)json转excel表格