You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Arduino的MQTTClient与Mac本地Mosquitto Broker协同工作?

让ESP8266与本地Mosquitto Broker协同工作的步骤

1. 调整ESP8266的MQTT连接参数

之前对接io.Adafruit的参数是针对Adafruit服务的,换成本地Mosquitto需要修改几个核心配置:

  • Broker地址:替换Adafruit服务器地址为Mac的本地IP(如192.168.1.100),同一局域网内也可临时用localhost测试。
  • 端口:Mosquitto默认未加密端口为1883,加密端口为8883(开启TLS时用),需替换掉Adafruit的对应端口。
  • 认证信息:若你的Mosquitto开启了用户名密码认证(默认未开启),需在代码中添加Mosquitto的账号密码,替换原Adafruit的用户名和AIO密钥。

以下是修改后的核心代码片段(基于MQTTClient库):

#include <ESP8266WiFi.h>
#include <MQTTClient.h>

WiFiClient wifiClient;
MQTTClient mqttClient;

const char* WIFI_SSID = "你的WiFi名称";
const char* WIFI_PASSWORD = "你的WiFi密码";
const char* MQTT_BROKER = "192.168.1.100"; // 你的Mac本地IP
const int MQTT_PORT = 1883;
// 若Mosquitto开启认证,取消下方注释并填写对应信息
// const char* MQTT_USER = "你的Mosquitto用户名";
// const char* MQTT_PASS = "你的Mosquitto密码";

void setup() {
  Serial.begin(115200);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi连接成功");

  mqttClient.begin(MQTT_BROKER, MQTT_PORT, wifiClient);
  // 开启认证时添加此行
  // mqttClient.setUsernamePassword(MQTT_USER, MQTT_PASS);
  
  // 设置消息回调函数
  mqttClient.onMessage(messageReceived);

  connectToMqtt();
}

void connectToMqtt() {
  while (!mqttClient.connect("ESP8266_Client")) { // 自定义客户端ID
    Serial.print("MQTT连接失败,错误码: ");
    Serial.println(mqttClient.lastError());
    delay(2000);
  }
  Serial.println("MQTT连接成功");
  mqttClient.subscribe("esp8266/sensor/data"); // 订阅主题,与Mosquitto命令行格式一致
}

void messageReceived(String &topic, String &payload) {
  Serial.println("收到消息: " + topic + " -> " + payload);
}

void loop() {
  mqttClient.loop();
  
  // 每5秒发布测试消息
  static unsigned long lastPublish = 0;
  if (millis() - lastPublish > 5000) {
    lastPublish = millis();
    mqttClient.publish("esp8266/sensor/data", "测试数据");
    Serial.println("发布消息成功");
  }
}

2. 配置本地Mosquitto Broker

默认安装的Mosquitto基础配置可直接接收连接,若遇问题检查以下项:

  • 允许局域网连接:打开/usr/local/etc/mosquitto/mosquitto.conf(Homebrew安装路径),注释掉bind_address 127.0.0.1,让Broker监听所有网卡。
  • 开启认证(可选):在配置文件中添加:
    allow_anonymous false
    password_file /usr/local/etc/mosquitto/pwfile
    
    然后用命令生成密码文件:mosquitto_passwd -c /usr/local/etc/mosquitto/pwfile 用户名,按提示输入密码。
  • 重启服务:修改配置后执行brew services restart mosquitto重启Mosquitto。

3. 验证协同效果

  • 终端订阅测试:运行mosquitto_sub -h 192.168.1.100 -t "esp8266/sensor/data",若ESP8266正常发布,终端会收到测试数据。
  • 终端发布测试:运行mosquitto_pub -h 192.168.1.100 -t "esp8266/sensor/data" -m "来自终端的消息",ESP8266的串口监视器会显示该消息。

资源推荐

教程

  • Mosquitto官方文档:讲解Broker配置、命令行工具使用及MQTT协议基础。
  • Arduino官方MQTT指南:覆盖ESP8266等设备的MQTT开发,含不同Broker的连接方法。
  • MQTT.org入门教程:从协议原理到实际应用,适合底层知识学习。

书籍

  • 《MQTT实战:物联网通信技术与应用》:涵盖MQTT协议细节、多平台开发实践,包括ESP8266与Mosquitto的结合案例。
  • 《物联网开发实战:基于ESP8266与MQTT》:专注ESP8266的MQTT开发,有大量代码示例和项目实战。

网站

  • Eclipse Mosquitto官网:提供最新Broker下载、配置说明和使用教程。
  • Arduino社区论坛:可找到大量ESP8266+MQTT的实战问题与解决方案。

内容的提问来源于stack exchange,提问作者user1114881

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:52:36