本教程在通过ESP8266 WiFi模块和MQTT协议,实现远程控制LED灯的亮灭。
1.MQTT协议特性介绍
1. MQTT概述
1.1 形象地理解三个角色
MQTT通信模型示意图如下:
使用电视台、记者、观众三个角色来类比更容易理解:
电视台:在MQTT里被称为服务器(broker),有如下作用
接受来自客户的网络连接; // 记者/观众连接进电视台
接受客户发布的应用信息; // 接受记者发布的消息
处理来自客户端的订阅和退订请求; // 处理观众的订阅、退订请求
向订阅的客户转发应用程序消息 // 给观众转发记者报道的消息
记者和观众都是客户端,记者也可以当观众,观众也可以当记者,有如下作用:
发布信息; // publish,记者
订阅消息;// Subscribe ,观众
退订或删除消息;
断开与服务器连接
1.2 消息的传递
还是以日常生活为例,提几个问题:
观众:我只关心财经新闻,那么只订阅"财经新闻",不订阅"体育新闻"
记者:我是财经记者,我可以发布"财经新闻",不发布"体育新闻"
这个过程中,引入两个概念:
主题(Topic):是财经类的?还是体育类的?
消息(Message)或负载(Playload):具体的新闻信息
具体的流程是这样的:
观众打电话到电视台:connect
观众向电视台订阅"财经新闻": Subscribe 某个 Topic
记者打电话到电视台:connect
记者向电视台发布"财经新闻":Public某个Topic的某个Playload
电视台向"订阅了财经新闻的观众"发布"某条消息":Public某个Playload给Subscriber
整个过程中,电视台和记者、电视台和观众直接的电话要保存连接状态,还要时不时确认一下:
记者要时不时给电视台喊一声"喂":确保电视台还正常
观众要时不时给电视台喊一声"喂":确保电视台还正常
原文链接:https://blog.csdn.net/m0_74712453/article/details/134772420
1、ubuntu 下安装 MQTT
安装MQTT服务器
sudo apt-get install mosquitto
安装mqtt客户端
sudo apt-get install mosquitto-clients
服务器操作
现在已经成功安装了MQTT服务器(Mosquitto)和客户端(Mosquitto-clients)。现在,让我们了解一下接下来需要用到的命令:
重启服务器
sudo /etc/init.d/mosquitto restart
这个命令的作用是重启Mosquitto服务。具体来说:
- sudo:以超级用户(root)权限运行命令。某些系统操作需要管理员权限。
- /etc/init.d/mosquitto:这是Mosquitto服务的启动脚本所在的位置。
/etc/init.d/
目录包含了系统服务的启动脚本。 - restart:这是一个参数,告诉脚本要执行“重启”操作。
打开MQTT
sudo /etc/init.d/mosquitto start
- sudo:以超级用户(root)权限运行命令。某些系统操作需要管理员权限。
- /etc/init.d/mosquitto:这是Mosquitto服务的启动脚本所在的位置。
/etc/init.d/
目录包含了系统服务的启动脚本。 - start:这是一个参数,告诉脚本要执行“启动”操作。
关闭MQTT
sudo /etc/init.d/mosquitto stop
这个命令的作用是停止Mosquitto服务。具体来说:
- sudo:以超级用户(root)权限运行命令。某些系统操作需要管理员权限。
- /etc/init.d/mosquitto:这是Mosquitto服务的启动脚本所在的位置。
/etc/init.d/
目录包含了系统服务的启动脚本。 - stop:这是一个参数,告诉脚本要执行“停止”操作。
客户端 订阅
mosquitto_sub
-c 指定客户端clean_session是否保存。
-d 打印debug信息
-h 指定要连接的域名 默认为localhost
-i 指定客户端clientid
-I 指定clientId前缀
-k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒.
-q 指定希望接收到QoS为什么的消息 默认QoS为0
-R 不显示陈旧的消息
-t 订阅topic
-v 打印消息
--will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使>用
--will-topic 用户发送Will消息的topic
mosquitto_sub
是一个命令行工具,用于订阅MQTT主题并接收消息。它是Mosquitto MQTT客户端的一部分,允许你从指定的MQTT代理(Broker)订阅主题,并在终端中显示接收到的消息。通过使用不同的参数,你可以控制订阅的行为和输出的格式。
我们用到的是以下内容。
-h 确认 订阅 的 服务器
-t topic 想要订阅的主题
mosquitto_sub -h 10.7.164.76 -t "hello"
客户端发布
mosquitto_pub
-d 打印debug信息
-f 将指定文件的内容作为发送消息的内容
-h 指定要连接的域名 默认为localhost
-i 指定客户端clientid,默认为附加进程ID的mosquitto_pub_
-I 指定clientId前缀
-m 消息内容
-n 发送一个空(null)消息
-p 连接端口号
-q 指定QoS的值(0,1,2)
-t 指定topic
-u 用户名
-P 用户密码
-V 指定MQTT协议版本
--will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使 用
--will-topic 用户发送Will消息的topic
使用案例:
mosquitto_pub -h 10.7.164.76 -t "cd2402" -m "hello world!"
最后在虚拟机内就是这样的效果 左边是订阅 右边是发布,服务器也是自己的电脑 ip地址记得设置为虚拟机的IP 不知道的可以使用ifconfig查询。