MQTT开发——连接阿里云【项目复现】
本文基于文档中提供的项目教程,复现ELF 1连接阿里云物联网平台,进行MQTT开发;记录ELF1 个人物联网开发的过程,可以提供参考;
MQTT 简述
MQTT(消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
MQTT的特点包括:
- 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
- 对负载内容屏蔽的消息传输。
- 使用TCP/IP提供网络连接。主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。
- 有三种消息发布质量:“至多一次”,消息可能丢失但绝不会重复发送;“至少一次”,消息可能重复发送但绝不会丢失;“只有一次”,确保消息到达一次。
- MQTT是基于订阅者模型架构的,客户端如果互相通信,必须是在同一订阅主题下,即都订阅了同一个topic,客户端之间是没办法直接通讯的。
项目部署
环境
开发板:ELF1
开发环境:window10+VMware+ubuntu 18.04
交叉编译环境:arm-poky-linux-gnueabi-gcc
阿里云 平台部署
没有账号的可以进行一个简单的登录并实名认证:
阿里云登陆页面:https://account.aliyun.com/login/login.htm
进行如下操作:
点击“管理控制台”,进入:
进行新建产品,进行设置,下边参数使用默认参数即可:
查看我们的产品,自定义topic,进行如下操作:
添加设备,添加到我们的产品下,进行命名:
以上,我们的产品(项目),和设备就加入成功了,这时候需要获取三元组,即:ProductKey,DeviceName,DeviceSecret,和MQTT连接参数:
直接查看设备信息就可以看到所有的信息了:
这里建议把数据都按以下格式整理,方便我们后面使用:
{"ProductKey":"","DeviceName":"tree","DeviceSecret":""} MQTT: {"clientId":"","username":"tree&","mqttHostUrl":"","passwd":"","port":1883}
然后就可以进行发布操作:
我们是基于阿里云的SDK进行案例开发的,所以获取一手阿里云提供的SDK:
我们会获得一个压缩包,解压做自己的工作区或者桌面就行,命名就为:“LinkSDK”
以上,我们阿里云端的部署就完成了
编译,运行
修改源码
接下来,要修改部分我们的源码:
将刚刚记录的三元组,MQTT连接参数填入我们的代码:
位置:/LinkSDK/demos/mqtt-rrpc-demo.c
往下配置我们的topic功能,大概在245行开始:
修改Makefile:
位置:/LinkSDK/Makefile
我们使用交叉编译环境,注释即可:
开发板编译 拷贝
将“LinkSDK”文件夹拉入我们的编译环境:
虚拟机 | linux环境即可;
环境导入:
./opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
make
官方教程中提供了一个报错的可能,我没遇到:
编译过程可能会遇到如上问题,提示 mqtt_userdefine_demo.c 中会提示找不到 头文件 aiot_dm_api.h,因为我们没有用到这个程序,所以可以删掉这个程序,再次编译正 常
可执行文件位于:/LinkSDK/output/mqtt-rrpc-demo
拷贝文件到我们的/home/root 下:
scpmqtt-rrpc-demo root\\\\\\\\@`@<自己开发板IP地址>:home/root
连接开发板,本文使用的是SSH连接方式:
不了解可以看笔者的前文:
连接测试 + Powershell SSH连接
Ubutu SSH连接
在调试前,我们要先测试我们的网络是否可用,是否连接了外网:
pingwww.baidu.com
开发板连接不上外网的可以参考前文:
ELF1 网络连接
运行我们的程序
./mqtt-rrpc-demo
运行成功,服务器也受到连接回报;
后续会更新基于MQTT自定义数据格式的开发。
如果需要参考更多资料,请参考ELF 1官方文档;以上是本人进行部署的过程;