文章目录

  • 一、原理
  • 二、配置过程
  • 1.EMQ X Cloud
  • 2.EMQ X Cloud的部署及数据库部署
  • 3.硬件部分
  • 总结



一、原理

总所周知的MQTT原理:

MQTT存到redis mqtt服务端数据存储_MQTT存到redis

发布者发布消息,订阅者订阅消息,而MQTT服务器是作为两者的“代理”。所以将所发送的消息写入数据库实现数据持久化即在发布者发布的消息到达MQTT服务器时,将其写入数据库。

二、配置过程

1.EMQ X Cloud

EMQ X Cloud即是我们的设备发送到的MQTT服务器
,是全托管的 MQTT 云服务,可免费使用180天。
链接:EMQ X Cloud

2.EMQ X Cloud的部署及数据库部署

官网的手册里有简洁且详细的入门和配置过程,包括MQTT服务器配置、云服务器或本地服务器数据库的搭建。链接:EMQ X Cloud文档 推荐阅读顺序(假如你真的没什么空的话):快速入门➡规则引擎➡连接到部署。
即大致思路为:搞定MQTT服务器的配置➡搞定数据库的搭建和设置➡使用硬件发布MQTT消息。

要注意:
(1) 注意开放服务器端口,如TCP、WS、TLS、WSS 协议对应的端口。
(2) 配置完成后要使用测试工具测试。
(3) 搭建数据库时切记执行文档中的这两句命令其一。

# 免费用户或者共享部署
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'public' WITH GRANT OPTION;
# 独享部署
GRANT ALL PRIVILEGES ON *.* TO root@'10.11.30.%' IDENTIFIED BY 'public' WITH GRANT OPTION;

(4) 按着文档搭建数据库按理是不会有什么错的,如果有出错的情况可能是数据库远程连接端口没有放行、数据库密码复杂度和长度、甚至于数据库的编码格式等等,假如有宝塔面板可以简单的解决这些问题,链接:宝塔官网,当然你也可以热衷于使用搜索引擎来解决这些问题,虽然看起来有点麻烦,但多熟悉熟悉Linux命令和sql语句又有什么不好呢。

3.硬件部分

硬件部分倒是比较简单,MQTT连接的部分可以参考官方示例(EMQ X Cloud也提供了,是不是很惊喜。什么?EMQ X Cloud的示例是ESP8266,那又有什么不同呢?),所需要做到无非是填对MQTT服务器连接地址、topic、端口。而你可以在EMQ X Cloud里轻易找到这些信息:

const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp8266/test";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;

以及,在发送数据时注意发送的格式,即万能的JSON格式

{
    "sites": [
    { "temp":"55" }, 
    { "hum":"22" }, 
    { "client_id":"11" }
    ]
}
#仅供参考

万能之处在于,你要做的只是按照格式将你需要的填进去(这里也只是个示范),然后优雅地 publish 它。

client.publish(topic, json_string, false);

总结

相比传统的MQTT连接教程,这个文章更多的注重于数据的持久化,即将转瞬即逝的数据存到数据库中。当你的数据库中有这些数据后,你便可以在开发你的安卓app、网站时,轻易地从数据库中获得它们。
关于具体代码,相信这篇文章的“硬件部分”已经给你提供了具体且流畅的思路,而官方的示例已经足够你使用了。