Arduino 无法连接到 MQTT 代理

问题描述 投票:0回答:0

我的 Windows 计算机上运行了一个 mosquitto 代理。 ipconfig 显示它的地址是 192.168.1.16 我用 -c 启动 mosquitto,将 allow_anonymous 设置为 true 并将 listener 设置为 1883 我使用带有 WiFi 屏蔽的 Arduino Uno

我的代码是(XXX 是我的 wifi ssid,YYY 是它的密码):

#include <WiFi.h>
#include <PubSubClient.h>

// Update these with values suitable for your network.
const char* ssid = "XXX";
const char* password = "YYY";
//const char* mqtt_server = "192.168.1.16";
const char* mqtt_server = "test.mosquitto.org";

WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

void setup() {
  Serial.begin(9600);
  delay(10);

  // Connect to WiFi network
  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());

  // Connect to MQTT broker
  mqttClient.setServer(mqtt_server, 1883);
}

void loop() {
  if (!mqttClient.connected()) {
    Serial.println("Attempting MQTT connection...");
    if (mqttClient.connect("arduinoClient_unique")) {
      Serial.println("connected to MQTT broker");
    } else {
      Serial.print("failed with state ");
      Serial.print(mqttClient.state());
      delay(2000);
      return;
    }
  }

  mqttClient.loop();

  // Publish a message
  mqttClient.publish("test/test0", "Hello");

  // Wait a bit before publishing again
  delay(5000);
}

结果是:


Connecting to XXX

WiFi connected
IP address: 
192.168.1.12
Attempting MQTT connection...
failed with state -2Attempting MQTT connection...
failed with state -2Attempting MQTT connection...
failed with state -2Attempting MQTT connection...
failed with state -2Attempting MQTT connection...
No Socket available

我相当确定我的问题不在于 ssid 或密码,因为更改它们会阻止 Arduino 到达 WiFi 连接段。

我尝试用“test.mosquitto.org”替换 IP 地址,但结果相同。

我在我的电脑防火墙中添加了一条规则,允许任何使用端口 1883 的 TCP 连接,结果相同

我在我的电脑上运行命令

mosquitto_pub -t test/test0 -h 192.168.1.16 -m  "testing"
,并且能够在Windows终端上正确看到消息

我在手机上使用了一个 mqtt 工具,并且能够在我的计算机上连接并发布到代理上

如果这个问题已经得到回答,我深表歉意。我检查了但没有找到任何可以解决我的问题的东西。

arduino mqtt wifi arduino-uno
© www.soinside.com 2019 - 2024. All rights reserved.