ESP8266 连接 MQTT 服务器EMQX 连接MQTTX

目录

1.先用有一台自己的云服务器

[2. 使用FinalShell连接阿里云云服务器ECS](#2. 使用FinalShell连接阿里云云服务器ECS)

3.安装宝塔

4.在云服务器打开8888端口

5.使用外网面板地址打开宝塔面板

6.安装Docker

7.下载emqx

[8.打开emqxWeb 界面](#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

开发板是这个

单片机代码如下

cpp 复制代码
#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成功接收

相关推荐
会又不会4 分钟前
Jenkins-Email Extension 插件插件
运维·jenkins
电脑能手1 小时前
[保姆级教程] 解决不同局域网电脑无法SSH的问题
运维·ssh·电脑
tan77º1 小时前
【Linux网络编程】Socket - UDP
linux·服务器·网络·c++·udp
czhc11400756631 小时前
Linux 76 rsync
linux·运维·python
szxinmai主板定制专家2 小时前
【精密测量】基于ARM+FPGA的多路光栅信号采集方案
服务器·arm开发·人工智能·嵌入式硬件·fpga开发
你不知道我是谁?2 小时前
负载均衡--四层、七层负载均衡的区别
运维·服务器·负载均衡
dyj0953 小时前
【Rancher Server + Kubernets】- Nginx-ingress日志持久化至宿主机
运维·nginx·rancher
九丝城主4 小时前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇
服务器·flutter·macos·vmware
码出钞能力4 小时前
linux内核模块的查看
linux·运维·服务器
星辰云-4 小时前
# Linux Centos系统硬盘分区扩容
linux·运维·centos·磁盘扩容