飞凌嵌入式
直播中

KuTree

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

【ELF 1开发板试用】+ 8.1 MQTT开发——连接阿里云【项目复现】

MQTT开发——连接阿里云【项目复现】

本文基于文档中提供的项目教程,复现ELF 1连接阿里云物联网平台,进行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-poky-linux-gnueabi-gcc

阿里云 平台部署

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

阿里云登陆页面:https://account.aliyun.com/login/login.htm

进行如下操作:

image.png

点击“管理控制台”,进入:

image.png

进行新建产品,进行设置,下边参数使用默认参数即可:

image.png

查看我们的产品,自定义topic,进行如下操作:

image.png

添加设备,添加到我们的产品下,进行命名:

image.png

以上,我们的产品(项目),和设备就加入成功了,这时候需要获取三元组,即:ProductKey,DeviceName,DeviceSecret,和MQTT连接参数:

直接查看设备信息就可以看到所有的信息了:

image.png

这里建议把数据都按以下格式整理,方便我们后面使用:

{

  "ProductKey": "",

  "DeviceName": "tree",

  "DeviceSecret": ""

}

MQTT:

{

"clientId":"",

"username":"tree&",

"mqttHostUrl":"",

"passwd":"",

"port":1883

}

然后就可以进行发布操作:

image.png

我们是基于阿里云的SDK进行案例开发的,所以获取一手阿里云提供的SDK:

image.png

我们会获得一个压缩包,解压做自己的工作区或者桌面就行,命名就为:“LinkSDK”

以上,我们阿里云端的部署就完成了

编译,运行 

修改源码

接下来,要修改部分我们的源码:

将刚刚记录的三元组,MQTT连接参数填入我们的代码:

位置:/LinkSDK/demos/mqtt-rrpc-demo.c
image.png

往下配置我们的topic功能,大概在245行开始:
image.png

修改Makefile:

位置:/LinkSDK/Makefile

我们使用交叉编译环境,注释即可:
image.png

开发板编译 拷贝

将“LinkSDK”文件夹拉入我们的编译环境:

虚拟机 | linux环境即可;

环境导入:

. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
make

image.png

官方教程中提供了一个报错的可能,我没遇到:

编译过程可能会遇到如上问题,提示 mqtt_userdefine_demo.c 中会提示找不到
头文件 aiot_dm_api.h,因为我们没有用到这个程序,所以可以删掉这个程序,再次编译正
常

可执行文件位于:/LinkSDK/output/mqtt-rrpc-demo

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

scp mqtt-rrpc-demo root\\\\\\\\@`@<自己开发板IP地址>:home/root

连接开发板,本文使用的是SSH连接方式:

不了解可以看笔者的前文:
连接测试 + Powershell SSH连接

Ubutu SSH连接

在调试前,我们要先测试我们的网络是否可用,是否连接了外网:

ping www.baidu.com

开发板连接不上外网的可以参考前文:

ELF1 网络连接

运行我们的程序

./mqtt-rrpc-demo

image.png

image.png

运行成功,服务器也受到连接回报;

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

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

更多回帖

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