飞凌嵌入式
直播中

KuTree

3年用户 30经验值
擅长:嵌入式技术
私信 关注
[技术]

【ELF 1开发板试用】+ 8.2 MQTT开发——连接腾讯云【原创】

MQTT开发——连接腾讯云

前文我们基于文档中提供的项目教程,复现ELF 1连接阿里云物联网平台,进行了MQTT开发,复现后,笔者就想“为何不试试其它平台”,抱着整活学习的心,腾讯云的MQTT开发,来了;

本文主要记录笔者,使用ELF1 个人物联网开发的过程,希望能够为大家提供参考学习的过程;

MQTT 简述

前文也有一样的,怕有的小伙伴没看过;

MQTT(消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT的特点包括:

  1. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
  2. 对负载内容屏蔽的消息传输。
  3. 使用TCP/IP提供网络连接。主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。
  4. 有三种消息发布质量:“至多一次”,消息可能丢失但绝不会重复发送;“至少一次”,消息可能重复发送但绝不会丢失;“只有一次”,确保消息到达一次。
  5. MQTT是基于订阅者模型架构的,客户端如果互相通信,必须是在同一订阅主题下,即都订阅了同一个topic,客户端之间是没办法直接通讯的。

项目部署

环境

开发板: ELF1

开发环境:window10+VMware+ubuntu 18.04

交叉编译环境:arm-linux-gnueabihf-gcc

这里想提一下,ELF官方提供的交叉编译环境:arm-poky-linux-gnueabi-gcc,这个是有一定缺陷的,缺少了部分C标准库;有的项目是可以顺利编译的,有的就不行,这个项目编译就会报错

腾讯云 平台部署

没有腾讯云账号的可以进行一个简单的登录并实名认证:Free

腾讯云产品总览-腾讯云 (tencent.com)

我们先进入“物联网开发平台”,在点击“产品控制台”:

image.png

进入“公共实例”

image.png

创建项目:

image.png

新建产品,参数可以按我的设置:

image.png

查看设备信息,记录我们的三元组,即:ProductKey,DeviceName,DeviceSecret,和MQTT连接参数:

image.png

可以按以下格式记录,方便我们设置和管理:

{

  "ProductKey": "",

  "DeviceName": "tree",

  "DeviceSecret": ""

}

MQTT:

{

"clientId":"",

"username":"tree&",

"mqttHostUrl":"",

"passwd":"",

"port":1883

}

进入我们的文档中心,这里更加详细的官方说明和部署,这里就不赘述了:

下载我们的C SDK,方便我们编译,部署到我们的开发板上:

网址也贴上:
Releases · TencentCloud/tencentcloud-iot-explorer-sdk-embedded-c (github.com)

image.png

image.png

我们会获得一个压缩包,解压做自己的工作区或者桌面就行,命名就为:“tencentcloud-iot-explorer-sdk-embedded-c-****”

以上,我们腾讯云端的部署就完成了

编译运行

修改源码

修改我们的device_info.json,配置我们MQTT信息:

官方演示:

{
"auth_mode":"KEY",
"productId":"89FZMW5XT9",
"deviceName":"led_001",
"key_deviceinfo":{
"deviceSecret":"n0NjeTJA5xPeG4bhJTeZAA=="
}
}

image.png

本文使用make 编译,使用CMake,可以参考官方文档:

我们使用交叉编译环境,需要在make.setting中指定我们的交叉编译工具:

这里需要详细指定我们的路径,所以不要搞错了,不然无法识别;

image.png

导入环境:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

编译:

sudo make

image.png

示例输出位于output/release/bin文件夹中

拷贝文件到我们的/home/root 下:

image.png

拷贝文件:

scp mqtt_sample device_info.json root\@<自己开发板IP地址>:home/root`

执行命令:

./mqtt_sample -c ./device_info.json -l 1000

可以看见服务器显示设备在线:终端也传回了数据,服务器日志也正常接收

image.png

image.png
image.png
运行成功!

后续会更新基于MQTT自定义数据格式的开发。

如果需要参考更多资料,请参考腾讯云 官方文档;以上是本人进行部署的过程;

更多回帖

发帖
×
20
完善资料,
赚取积分