ESP8266 连接 MQTT 服务器EMQX 连接MQTTX
目录
1.先用有一台自己的云服务器
2. 使用FinalShell连接阿里云云服务器ECS
3.安装宝塔
4.在云服务器打开8888端口
5.使用外网面板地址打开宝塔面板
6.安装Docker
7.下载emqx
8.打开emqxWeb 界面
9.下载MQTTX
10.EMQX加一个客户端
11.开始通信
12.加入单片机ESP8266
1.先用有一台自己的云服务器
我使用的是阿里云服务器ECS
阿里云https://www.aliyun.com/?spm=5176.29188366.J_4VYgf18xNlTAyFFbOuOQe.2.2ed63e4dKVYu9u
2. 使用FinalShell连接阿里云云服务器ECS
在云服务器管理控制台里面,点击实例,然后点击更多操作
然后点击重置实例密码
修改完密码重启一下
就可以了
然后就可以连接了
如果不行的话,就
管理规则,入方向,快速添加
然后重启实例,再重新连接就可以了
3.安装宝塔
点击 宝塔网站
选择Linux
url=https://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec
然后打开在finalshell里面输入这句代码,就可以安装宝塔了
安装完结尾会有一大串信息
记住面板账户登录信息
外网面板地址:
内网面板地址:
username:
password:
4.在云服务器打开8888端口
因为宝塔用的是8888端口
5.使用外网面板地址打开宝塔面板
首次进入,根据提示做吧,根据自己保存的信息
6.安装Docker
点击就行了,很简单的
7.下载emqx
点就行了,很简单的
8.打开emqxWeb 界面
然后进入
ip:18083
如果进入不了,就去服务器那里放行18083端口,都应该会了吧
9.下载MQTTX
这个下不下都可以吧,只是可以模拟一个客户端
https://mqttx.app/zh/downloads
直接无脑下就可以了,然后打开
要是不行的话,就去服务器放行1883端口
10.EMQX加一个客户端
11.开始通信
可以看到连接数已经是2了,一个是在EMQX网页的客户端,一个是你下载的MQTTX的客户端
在EMQX客户端设置发布和订阅的主题都为topic
在MQTTX设置主题与发布的内容
发送后,在web端接收成功
在web端发送,在MQTTX端接收
在MQTTX也可以成功接收
成功了
12.加入单片机ESP8266
开发板是这个
单片机代码如下
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const int ledPin = D8; // LED连接到的GPIO引脚
const char* ssid = "wifi名字";
const char* password = "wifi密码";
const char* mqtt_server_ip = "你自己的ip"; // 直接使用 IP 地址
const int mqtt_port = 1883;
const char* mqtt_client_id = "pc";
const char* mqtt_user = "你EMQX设置的用户名(如果有)";
const char* mqtt_password = "密码";
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length);
void setup() {
Serial.begin(9600);
Serial.println("Connecting to WiFi");
// 设置D8引脚为输出模式
pinMode(ledPin, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server_ip, mqtt_port); // 使用 IP 地址代替域名
client.setCallback(callback);
// 尝试连接到 MQTT 服务器
while (!client.connect(mqtt_client_id, mqtt_user, mqtt_password)) {
Serial.println("Failed to connect to MQTT server, retrying...");
delay(5000); // 重试连接前等待5秒
}
Serial.println("Connected to MQTT server");
client.subscribe("topic"); //你自己订阅的主题
}
void loop() {
if (!client.connected()) {
Serial.println("Reconnecting to MQTT server...");
while (!client.connect(mqtt_client_id, mqtt_user, mqtt_password)) {
delay(5000); // 重试连接前等待5秒
}
Serial.println("Connected to MQTT server");
client.subscribe("led");
}
client.loop();
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
char message[length + 1];
for (int i = 0; i < length; i++) {
message[i] = (char)payload[i];
}
message[length] = '\0';
Serial.println(message);
}
接入单片机,打开串口
客户端发送,esp8266接收
esp8266成功接收