文章目录

  • 0 MQTT协议
  • 1 阿里云平台使用
  • 1.1 创建产品与设备
  • 1.2 为产品自定义功能(定义物模型)
  • 1.3 创建设备
  • 2 MQTT模拟器连接阿里云
  • 2.1 设备上线
  • 2.2 上报数据
  • 2.3 下行消息
  • 2.5 事件上报
  • 2.6 在线调试模拟设备
  • 3 MQTT.fx 连接阿里云
  • 3.1 下发消息
  • 3.2 属性上报
  • 3.3 上报事件
  • 3.4 云端设置设备以及下发服务
  • 4 树莓派使用Mosquitto连接阿里云
  • 4.1 安装
  • 4.2 安装中遇到的问题
  • 4.3 自己连自己
  • 4.4 mosquito连接阿里云



这篇文章主要是记录一下自己一些容易忘记的地方。因为网上绝大多数的教程都是按照阿里云或者腾讯云官方的手册,大家大可不必看别人的教程,可以自己直接阅读官方的教程。

桦桦接下来将提供三种方式连接阿里云,从简到难逐步深入,但是在这之前都需要在阿里云平台上创建以及产品。

0 MQTT协议

MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。

MQTT 协议的数据包格式非常简单,由固定报头(Fixed header)、可变报头(Variable header)、有效载荷(Payload)三个部分组成。

Java mqtt断链之后重新连接主题_数据

1 阿里云平台使用

  • 第一步当然是注册帐号咯。

Java mqtt断链之后重新连接主题_数据_02

1.1 创建产品与设备

产品是一类设备的集合。

Java mqtt断链之后重新连接主题_Java mqtt断链之后重新连接主题_03

1.2 为产品自定义功能(定义物模型)

  • 首先我们定义物模型。
  • Java mqtt断链之后重新连接主题_数据_04

  • 自定义功能定义包括
  • 属性:温度,湿度;
  • 服务:开灯;
  • 事件:温度过高报警
  • Java mqtt断链之后重新连接主题_Java mqtt断链之后重新连接主题_05

  • 自定义完一定要记得发布上线

1.3 创建设备

Java mqtt断链之后重新连接主题_自定义_06

  • 最右上角箭头,点击查看就是三元组。然后记得打开设备本地日志。
  • Java mqtt断链之后重新连接主题_自定义_07

  • 下面这几个主题需要知道在哪里,模拟器都会自动帮你设置好,但是fx都是需要自己设置的。

Java mqtt断链之后重新连接主题_树莓派_08


Java mqtt断链之后重新连接主题_自定义_09

2 MQTT模拟器连接阿里云

2.1 设备上线

Java mqtt断链之后重新连接主题_linux_10

Java mqtt断链之后重新连接主题_linux_11


Java mqtt断链之后重新连接主题_树莓派_12

  • 将上面的设备的三元组输入。然后点击设备上线,刷新阿里云网页,就可以看到设备上线了。

Java mqtt断链之后重新连接主题_linux_13

2.2 上报数据

傻瓜操作,直接微信上点击上报数据,就可以在阿里云上的日志里看到。

2.3 下行消息

  • 首先在微信上点击订阅主题。然后就可以在阿里云上给模拟器下发消息了。
  • 看手机模拟器界面,会出现hello wechat,

2.5 事件上报

  • 同样是傻瓜操作,直接按告警。就可以在日志里查看到。

Java mqtt断链之后重新连接主题_自定义_14

2.6 在线调试模拟设备

  • 下面可以在云端控制设备的属性。

Java mqtt断链之后重新连接主题_Java mqtt断链之后重新连接主题_15

3 MQTT.fx 连接阿里云

上面数据格式都是小程序自己打包好的,以及很多参数都是小程序自己计算好的,使用模拟器完全就是让我们了解一下大概的框架。但是并非完全一无是处,你可以用模拟器熟悉到底传输的数据怎么才算标准,接下来我们使用MQTT.fx来连接阿里云。很多东西都需要自己设置书写。

下面桦桦给出官网地址,里面很详细了,桦桦主要是补充一些偏僻的地方。

https://help.aliyun.com/document_detail/140507.html?spm=a2c4g.11186623.6.571.232a5dc2lenvvA

  • 域名在实例管理。

Java mqtt断链之后重新连接主题_数据_16


Java mqtt断链之后重新连接主题_数据_17


Java mqtt断链之后重新连接主题_树莓派_18


Java mqtt断链之后重新连接主题_自定义_19

3.1 下发消息

  • 首先简单的测试一下连通信,首先将下面这个主题复制到MQTT.fx,然后点击订阅。就可以在阿里云上下发消息了。
    一定记得把相应变量的地方替换成自己的

Java mqtt断链之后重新连接主题_linux_20


Java mqtt断链之后重新连接主题_linux_21


Java mqtt断链之后重新连接主题_数据_22

3.2 属性上报

  • 将下面的主题复制到MQTT.fx
  • 编辑上报数据,然后发布
  • 两个箭头的地方都可以查看是否成功。

3.3 上报事件

  • 将下面的复制,并修改相应变量的地方为自己设备的

Java mqtt断链之后重新连接主题_自定义_23


Java mqtt断链之后重新连接主题_自定义_24

Java mqtt断链之后重新连接主题_数据_25

3.4 云端设置设备以及下发服务

  • 下面我直接一起订阅了两个主题
  • 首先我通过云端设置设备的属性
  • 下面我们下发服务

4 树莓派使用Mosquitto连接阿里云

4.1 安装

# 下载源代码包
wget http://mosquitto.org/files/source/mosquitto-1.6.9.tar.gz
# 解压
tar zxfv mosquitto-1.6.9.tar.gz
# 进入目录
cd mosquitto-1.6.9
# 编译
make
# 安装
sudo make install

4.2 安装中遇到的问题

编译找不到openssl/ssl.h
解决方法:安装openssl

sudo apt-get install libssl-dev

编译过程找不到ares.h
解决方法:修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=yes

使用过程中找不到libmosquitto.so.1
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
解决方法:修改libmosquitto.so位置

# 创建链接
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
# 更新动态链接库
sudo ldconfig

make: g++:命令未找到
解决方法:安装g++编译器

sudo apt-get install g++

4.3 自己连自己

  • 先来个简单的,就是树莓派自己即当客户端,又当服务器,这里我们开三个窗口,后面两个充当PC,
  • 第一个用于充当MQTT客户端
  • 第二个用于打开MQTT服务,可以用于查看日志
  • 第三个用于充当服务器,用于下发消息
  • 在pc中打开服务
mosquitto -v

Java mqtt断链之后重新连接主题_linux_26

  • 在树莓派订阅主题
mosquitto_sub -v -t gpio -h 127.0.0.1

Java mqtt断链之后重新连接主题_数据_27

  • 在pc上发布消息
mosquitto_pub -t gpio -h 127.0.0.1 -m "{\"pin\":17,\"value\":0}"

Java mqtt断链之后重新连接主题_自定义_28

  • 接下来就可以在树莓派和日志中看见

Java mqtt断链之后重新连接主题_数据_29


Java mqtt断链之后重新连接主题_Java mqtt断链之后重新连接主题_30

4.4 mosquito连接阿里云

接下来才是正题

Java mqtt断链之后重新连接主题_Java mqtt断链之后重新连接主题_31

  • 将下面的输入到树莓派(就是上面MQTT.fx设置的那些),然后我们就可以看到上线了。
  • 然后我们和上面两个一样的操作,给设备(就是我们的树莓派客户端下发消息)

Java mqtt断链之后重新连接主题_树莓派_32


Java mqtt断链之后重新连接主题_树莓派_33

  • 当然也可以通过在线调试里下发命令。操作和上面MQTT.fx是一模一样的。只要把相应的主题修改了,就好了。
  • 下面我们上报数据到阿里云,这里一定要注意,-m 后面的有效负载必须加" " ,以及转义

Java mqtt断链之后重新连接主题_数据_34

Java mqtt断链之后重新连接主题_树莓派_35