我的 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 工具,并且能够在我的计算机上连接并发布到代理上
如果这个问题已经得到回答,我深表歉意。我检查了但没有找到任何可以解决我的问题的东西。