ESP8266 连接到 MQTT Broker

ESP8266 连接 MQTT 服务器项目实践
本文介绍了如何使用ESP8266通过Arduino IDE连接到EMQ X MQTT Cloud的免费公共服务器,包括所需组件、ESP8266的代码编写和运行测试,展示了ESP8266作为物联网设备发送和接收MQTT消息的能力。

MQTT 是轻量级的、灵活的物联网消息交换和数据传递协议,致力于为 IoT 开发人员实现灵活性与硬件/网络资源的平衡。

ESP8266 提供了⼀套⾼度集成的 Wi-Fi SoC 解决⽅案,其低功耗、 紧凑设计和⾼稳定性可以满⾜⽤户的需求。ESP8266 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能,既能够独⽴应⽤,也可以作为从机搭载于其他主机 MCU 运⾏。

在此项目中我们将实现 ESP8266 连接到 EMQ X MQTT Cloud 运营和维护的 免费公共 MQTT 服务器,并使用 Arduino IDE 来对 ESP8266 进行编程。 EMQ X Cloud 是由 EMQ 推出的安全的 MQTT 物联网云服务平台,它提供一站式运维代管、独有隔离环境的 MQTT 5.0 接入服务。

所需物联网组件

  • ESP8266
  • Arduino IDE
  • MQTT X: 优雅的跨平台 MQTT 5.0 客户端工具
  • 免费的公共 MQTT 服务器
    • Broker: broker.emqx.io
    • TCP Port: 1883
    • Websocket Port: 8083

ESP8266 Pub/Sub 示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jE1GGuL1-1609230146697)(https://static.emqx.net/images/8c533fd396ed33ac5a6daa872eced9ba.png)]

ESP8266 代码编写

  1. 首先我们将导入 ESP8266WiFiPubSubClient 库,ESP8266WiFi 库能够将 ESP8266 连接到 Wi-Fi 网络,PubSubClient 库能使 ESP8266 连接到 MQTT 服务器发布消息及订阅主题。

    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    
  2. 设置 Wi-Fi 名称和密码,以及 MQTT 服务器连接地址和端口

    // WiFi
    const char *ssid = "mousse"; // Enter your WiFi name
    const char *password = "qweqweqwe";  // Enter WiFi password
    
    // MQTT Broker
    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;
    
  3. 打开一个串行连接,以便于输出程序的结果并且连接到 Wi-Fi 网络

    // Set software serial baud to 115200;
    Serial.begin(115200);
    // connecting to a WiFi network
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
         
         
        delay(500);
        Serial.println("Connecting to WiFi..");
    }
    
  4. 设置 MQTT 服务器,并编写回调函数,同时将连接信息打印到串口监视器上

    client.
<think>好的,我现在需要帮助用户解决如何让ESP8266连接到MQTT Broker的问题,用户还要求示例代码和配置教程。首先,我得回想一下ESP8266的常用开发环境,比如Arduino IDE和ESP-IDF。用户提到的引用中有提到ESP-IDF MQTT Broker项目,但用户可能更倾向于使用Arduino库,因为Arduino相对更简单,适合初学者。 首先,用户需要安装必要的库,比如PubSubClient,这是Arduino常用的MQTT库。然后配置网络参数,包括WiFi的SSID和密码,以及MQTT Broker的地址和端口。接下来是连接到WiFi,这一步需要编写连接函数,并处理重连逻辑,确保设备能够稳定连接网络。 然后是MQTT连接部分,需要设置客户端ID,可能还需要设置用户名和密码,如果Broker需要认证的话。编写回调函数来处理接收到的消息,这对于订阅主题很重要。在示例代码中,需要包含连接和重连MQTT的逻辑,可能需要检查连接状态,并在断开时尝试重新连接。 用户可能遇到的问题包括连接失败,这时候需要检查WiFi和MQTT的配置是否正确,Broker是否可达,以及防火墙设置。另外,代码中的主题名称和Broker地址需要根据实际情况修改,比如如果使用本地Broker,地址可能是IP地址,如192.168.x.x。 引用中提到的ESP8266订阅和发布消息的课程,可能需要在代码中同时包含发布和订阅的功能,但用户当前的问题主要是连接,所以示例代码可能重点在连接和订阅部分。需要确保回调函数正确设置,并且在loop函数中保持MQTT客户端的活跃,定期调用client.loop()。 最后,生成相关问题时要围绕MQTT连接的其他方面,比如订阅、发布、SSL加密、掉线处理等,帮助用户扩展知识。确保引用标记正确,引用[^2]提到订阅课程,引用[^3]提到ESP-IDF项目,可能需要引导用户查看相关资源。</think>### ESP8266连接MQTT Broker教程 #### 一、准备工作 1. 安装Arduino IDE并配置ESP8266开发环境 2. 安装PubSubClient库(通过IDE库管理器搜索安装) 3. 准备MQTT Broker信息: - 服务器地址(如test.mosquitto.org) - 端口号(默认1883- 认证信息(如需) #### 二、代码实现 ```cpp #include <ESP8266WiFi.h> #include <PubSubClient.h> // WiFi配置 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // MQTT配置 const char* mqtt_server = "test.mosquitto.org"; const int mqtt_port = 1883; const char* clientID = "ESP8266Client_01"; WiFiClient espClient; PubSubClient client(espClient); void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i=0; i<length; i++) { Serial.print((char)payload[i]); } Serial.println(); } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect(clientID)) { Serial.println("connected"); client.subscribe("test/topic"); // 订阅主题 } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } ``` #### 三、配置说明 1. 修改`ssid`和`password`为实际WiFi凭证 2. 根据Broker要求修改: - `mqtt_server`地址 - `mqtt_port`端口 - 添加认证参数(如需要): ```cpp client.connect(clientID, "username", "password") ``` #### 四、验证连接 1. 使用MQTTX工具发布消息到`test/topic` 2. ESP8266串口监视器将显示接收的消息 #### 五、常见问题排查 1. 连接失败时检查: - WiFi信号强度 - Broker是否开放匿名访问 - 防火墙设置 - 端口是否正确 2. 使用`client.state()`获取错误代码: - -4:连接超时 - -2:网络连接失败[^3]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值