[英]Issues connecting to HiveMQ MQTT broker via ESP8266
我正在嘗試使用 ESP8266 連接到 HiveMQ MQTT 代理,但它始終無法連接。 我不是很精通 MQTT 協議,所以我不確定我是否已正確配置所有內容,但這是我的設置方式:
HiveMQ 代理設置為在 127.0.0.1 運行並在 1883 監聽(從我讀過的內容來看似乎相當標准)。 我可以使用桌面客戶端 (MQTT Explorer) 連接到代理,並驗證客戶端是否通過代理的控制中心連接。
使用桌面客戶端時,我可以通過使用 127.0.0.1 作為服務器和 1883 作為端口來連接沒問題。 但是,當我將相同的信息放入 ESP 的代碼中時,它無法連接。 下面的代碼顯示了如何設置變量、ESP PubSubClient 設置以及連接到代理。
#ifdef USE_MQTT
const char* mqttClientId = "Lovebox-01";
const char* mqttServer = "127.0.0.1";
const int mqttPort = 1883;
const char* mqttUser = "";
const char* mqttPassword = "";
const char* mqttPublishTopic = "lovebox/result";
const char* mqttSubscribeTopic = "lovebox/messages";
#ifdef USE_MQTT
#include <PubSubClient.h>
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
char* mqttMessage;
bool newMqttMessageAvailable;
#else
const int fetchIntervalMillis = fetchIntervalSeconds * 1000;
#endif
#ifdef USE_MQTT
void mqttConnect() {
mqttClient.setServer(mqttServer, mqttPort);
mqttClient.setCallback(mqttCallback);
while (!mqttClient.connected()) {
Serial.println("Connecting to MQTT...");
if (mqttClient.connect(mqttClientId, mqttUser, mqttPassword)) {
Serial.println("connected");
} else {
Serial.print("failed with state ");
Serial.println(mqttClient.state());
delay(2000);
}
}
mqttClient.publish(mqttPublishTopic, "Hello from Lovebox");
mqttClient.subscribe(mqttSubscribeTopic);
}
就像我說的,我對 MQTT 不是很熟悉,但根據我所做的故障排除,我認為我已經正確設置了它。 我只是不確定將什么作為我的 mqttServer,因為顯然本地主機地址不起作用。
我最好的猜測是代理的設置方式存在問題並且它與 ESP 不兼容,或者我缺少一些基本的設置方式。
我在網上看到人們唯一提到的是他們如何能夠通過使用他們的實際 IP 地址來讓它工作,但我不確定要使用哪個 IP 地址以及這是否是一個長期修復對於這個問題。
我在網上看到人們唯一提到的是他們如何能夠通過使用他們的實際 IP 地址來讓它工作,但我不確定要使用哪個 IP 地址以及這是否是一個長期修復對於這個問題。
使用正確的 IP 地址或名稱是解決此問題的唯一方法。
127.0.0.1
表示localhost
- 請求來自的同一主機。 它和名稱localhost
永遠不會用來指代與您的代碼運行所在的計算機或設備不同的計算機或設備。 因此,在這種情況下, 127.0.0.1
表示您正在嘗試連接到 ESP8266 本身上的 MQTT 代理,但顯然不是這種情況。
您需要找出 MQTT 代理的實際 IP 地址或名稱,並使用它代替127.0.0.1
。 如何找到 IP 地址取決於運行代理的操作系統。 查看其文檔以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.