具体如何在阿里云创建一个 MQTT 服务器我就不写出来了,可以去百度一下(主要是我忘了,不好演示)。
有关 MQTT 报文的一些标识在我前面的一篇文章中讲过,感兴趣的可以去看看(有关代码部分讲解的内容也在那里,这里就不细讲了,主要讲如何连接的)
插一嘴,如果有同学找不到可以创建阿里云 MQTT 服务器的地方,检查一下是不是地区没选到华东2(上海)

iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32

一、获取阿里云 MQTT 服务器连接参数

下面的连接方法是参照阿里云的手册进行连接的,有兴趣的同学可以同时看看。

1、创建好一个产品后在创建两个设备(后面演示要用到)

iOS MHMQTTManager tls连接 mqtt连不上服务器_数据_02


iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_03

2、先随便进入一个设备中,这里选择的是 test 设备。点击查看DeviceSecret。

iOS MHMQTTManager tls连接 mqtt连不上服务器_阿里云_04

3、将三元组的内容分别复制到 mqtt_config.h 文件的这个位置下。

iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_05

4、点击查看 MQTT 连接参数,只需复制 mqttHostUrl 即可

iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_06


iOS MHMQTTManager tls连接 mqtt连不上服务器_数据_07

5、密码使用阿里云提供的密码生成工具。下载解压完成后,点击 sign.html,填写对应设备信息,点击生成即可。将生成的密码复制到 Password 中。

iOS MHMQTTManager tls连接 mqtt连不上服务器_c语言_08

至此,该示例代码就可以连接上阿里云 MQTT 服务器了。

iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_09

二、认识阿里云 MQTT 服务器上的主题

有关阿里云的主题介绍在阿里云官方手册中有介绍,感兴趣的同学可以去了解一下。

iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_10

这些主题可以在产品的 Topic 类列表中查看。

iOS MHMQTTManager tls连接 mqtt连不上服务器_阿里云_11

三、如何在阿里云 MQTT 服务器上显示数据

1、点击产品的功能定义。点击编辑草稿。

iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_12

2、点击添加自定义功能。这里是打算显示温度的一个变化情况。添加完成之后记得点击发布上线!

iOS MHMQTTManager tls连接 mqtt连不上服务器_c语言_13


iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_14


iOS MHMQTTManager tls连接 mqtt连不上服务器_c语言_15

3、通过查阅官方手册,得知需要向 Topic:/sys/${productKey}/${deviceName}/thing/event/property/post 发送 JSON 格式的数据。该手册中有说明 JSON 格式数据有哪些内容可以添加。还举出了一个例子,其中最重要的就是 params 参数了,该字段中的子参数名字就是前面填写的标识符 temp

iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_16


iOS MHMQTTManager tls连接 mqtt连不上服务器_c语言_17

4、在示例代码中,向服务器发送了一个温度值为 6 的消息。

iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_18

5、运行代码后,在 test 设备的物模型数据中即可观察到温度的值。

iOS MHMQTTManager tls连接 mqtt连不上服务器_阿里云_19


iOS MHMQTTManager tls连接 mqtt连不上服务器_数据_20

四、如何做到两个设备之间的通信

在通常情况下,我们比较常用的需求还是像其他 MQTT 服务器那样一个设备发布了一个携带信息的主题 A 后,订阅该主题 A 的另一个设备就能收到该消息,但在阿里云 MQTT 服务器中却不能这样子,往往是发送给主题 A 的消息却没有发送给订阅了 A 的设备
如果要实现此功能,就要借助阿里云的另一个功能:云产品流转。

1、要实现该功能,首先要准备两个设备,前面已经创建了一个 test 设备,现在再创建一个 mqtt 设备。并自定义两个主题。

iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_21


iOS MHMQTTManager tls连接 mqtt连不上服务器_数据_22

2、在规则引擎中点击云产品流转,切换到旧版。

iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_23

3、点击创建规则。

iOS MHMQTTManager tls连接 mqtt连不上服务器_阿里云_24

4、进入到刚创建好的规则下。点击编写 SQL。

iOS MHMQTTManager tls连接 mqtt连不上服务器_阿里云_25


iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_26


该 SQL 语句的作用是:监控产品 阿里mqtt 中名字为 mqtt 这台设备的发布的主题 /h18lpJMiSVO/mqtt/user/123然后把里面发布的消息全部提取出来

① *代表提取所有消息

② 选择自定义的主题

③ 选择 阿里mqtt 产品中设备

④ 选择名字为 mqtt 的这台设备

⑤ 选择这台设备发布的主题(/h18lpJMiSVO/mqtt/user/123)

大白话:
监控名字为 mqtt 的设备发布的主题 /h18lpJMiSVO/mqtt/user/123 假设设备发布的消息是:{"data": 123}
执行上面的配置就把这个 {"data": 123} 提取了出来(注:发送的格式一定要是 JSON 格式的数据,并且格式要正确)

5、现在将消息提取出来了,还需要让服务器再转发到另一个设备:test 中。在转发数据中点击添加操作。

iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_27


iOS MHMQTTManager tls连接 mqtt连不上服务器_数据_28


就是把上面配置 SQL 以后提取的数据 {"data": 123} 转发到/h18lpJMiSVO/test/user/abc 这个主题上

① 选择自定义

② 选择自己创建的一个产品

③ 选择名字为 test 的这台设备

④ 选择要转发到这台设备订阅的某个主题

6、启动规则

iOS MHMQTTManager tls连接 mqtt连不上服务器_c语言_29

7、使用 MQTT.fx 登录 mqtt 设备(MQTT.fx连接文档

这里我用的是阿里云比较新版本的计算密码的网页,对于连接 MQTT.fx 来说会更快一些。

iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_30


iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_31

8、在 MQTT.fx 上向 /h18lpJMiSVO/mqtt/user/123 主题发送数据 {"data":123},在板子上订阅 /h18lpJMiSVO/test/user/abc 主题。

iOS MHMQTTManager tls连接 mqtt连不上服务器_数据_32


iOS MHMQTTManager tls连接 mqtt连不上服务器_服务器_33


iOS MHMQTTManager tls连接 mqtt连不上服务器_stm32_34

9、关于这个数据转发的内容还有其他好玩的,感兴趣的可以去观摩一下这位大佬写的文章,数据转发部分在文章的后半部分。

iOS MHMQTTManager tls连接 mqtt连不上服务器_数据_35