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成功接收

相关推荐
bitcsljl7 分钟前
Linux 命令行快捷键
linux·运维·服务器
ac.char10 分钟前
在 Ubuntu 下使用 Tauri 打包 EXE 应用
linux·运维·ubuntu
Youkiup37 分钟前
【linux 常用命令】
linux·运维·服务器
qq_2975046141 分钟前
【解决】Linux更新系统内核后Nvidia-smi has failed...
linux·运维·服务器
_oP_i1 小时前
.NET Core 项目配置到 Jenkins
运维·jenkins·.netcore
weixin_437398211 小时前
Linux扩展——shell编程
linux·运维·服务器·bash
小燚~1 小时前
ubuntu开机进入initramfs状态
linux·运维·ubuntu
小林熬夜学编程1 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
上海运维Q先生1 小时前
面试题整理15----K8s常见的网络插件有哪些
运维·网络·kubernetes
hhhhhhh_hhhhhh_1 小时前
ubuntu18.04连接不上网络问题
linux·运维·ubuntu