通过 ESP01 8266 连接 MQTT
MQTT connection through ESP01 8266
我正在尝试通过 ESP01 8266 与我的 mosquitto 服务器建立连接。我在计算机上安装了 mosquitto 并使用 brew 启动了它。
问题是 ESP01 没有连接到“localhost:1833”(应该是我的 mosquitto 地址)。我不知道该怎么做,我是不是错过了什么?
这行可能是问题所在?我没有在 NodeRed 上设置客户端名称 ------> if (mqttClient.connect("ESP8266Client"))
ESP 草图:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "WifiNetworkname";
const char* password = "password";
const char* mqttServer = "localhost:1833";
const int mqttPort = 1883;
#define PUB_GPIO2_STATUS "state"
#define SUB_GPIO2_ACTION "state"
#define GPIO2_LED 2
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
void loop() {
mqttClient.loop();
}
void initWifiStation() {
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
Serial.print("\nConnecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println(String("\nConnected to the WiFi network (") + ssid + ")" );
}
void initMQTTClient() {
// Connecting to MQTT server
mqttClient.setServer(mqttServer, mqttPort);
while (!mqttClient.connected()) {
Serial.println(String("Connecting to MQTT (") + mqttServer + ")...");
if (mqttClient.connect("ESP8266Client")) {
Serial.println("MQTT client connected");
} else {
Serial.print("\nFailed with state ");
Serial.println(mqttClient.state());
if (WiFi.status() != WL_CONNECTED) {
initWifiStation();
}
delay(2000);
}
}
// Declare Pub/Sub topics
mqttClient.publish(PUB_GPIO2_STATUS, "Hello");
mqttClient.subscribe(SUB_GPIO2_ACTION);
}
void setup() {
Serial.begin(115200);
// GPIO2 is set OUTPUT
pinMode(GPIO2_LED, OUTPUT);
initWifiStation();
initMQTTClient();
}
Localhost
在您的 ESP 代码中 是 ESP 本身 。您正在尝试从 ESP 连接到 ESP。
Localhost
总是指“这台电脑”,就像 IP 地址 127.0.0.1 一样。
“这台计算机”从 ESP 上的代码可以看出 是 ESP 本身,而不是作为 运行 MQTT 服务器的计算机。
否则假设语法正确:在 const char* mqttServer = "localhost:1833";
行中,您需要输入运行 MQTT 服务器的计算机的 IP 地址(或名称),而不是 localhost
。不知道你是不是也需要改端口
我正在尝试通过 ESP01 8266 与我的 mosquitto 服务器建立连接。我在计算机上安装了 mosquitto 并使用 brew 启动了它。
问题是 ESP01 没有连接到“localhost:1833”(应该是我的 mosquitto 地址)。我不知道该怎么做,我是不是错过了什么?
这行可能是问题所在?我没有在 NodeRed 上设置客户端名称 ------> if (mqttClient.connect("ESP8266Client"))
ESP 草图:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "WifiNetworkname";
const char* password = "password";
const char* mqttServer = "localhost:1833";
const int mqttPort = 1883;
#define PUB_GPIO2_STATUS "state"
#define SUB_GPIO2_ACTION "state"
#define GPIO2_LED 2
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
void loop() {
mqttClient.loop();
}
void initWifiStation() {
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
Serial.print("\nConnecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println(String("\nConnected to the WiFi network (") + ssid + ")" );
}
void initMQTTClient() {
// Connecting to MQTT server
mqttClient.setServer(mqttServer, mqttPort);
while (!mqttClient.connected()) {
Serial.println(String("Connecting to MQTT (") + mqttServer + ")...");
if (mqttClient.connect("ESP8266Client")) {
Serial.println("MQTT client connected");
} else {
Serial.print("\nFailed with state ");
Serial.println(mqttClient.state());
if (WiFi.status() != WL_CONNECTED) {
initWifiStation();
}
delay(2000);
}
}
// Declare Pub/Sub topics
mqttClient.publish(PUB_GPIO2_STATUS, "Hello");
mqttClient.subscribe(SUB_GPIO2_ACTION);
}
void setup() {
Serial.begin(115200);
// GPIO2 is set OUTPUT
pinMode(GPIO2_LED, OUTPUT);
initWifiStation();
initMQTTClient();
}
Localhost
在您的 ESP 代码中 是 ESP 本身 。您正在尝试从 ESP 连接到 ESP。
Localhost
总是指“这台电脑”,就像 IP 地址 127.0.0.1 一样。
“这台计算机”从 ESP 上的代码可以看出 是 ESP 本身,而不是作为 运行 MQTT 服务器的计算机。
否则假设语法正确:在 const char* mqttServer = "localhost:1833";
行中,您需要输入运行 MQTT 服务器的计算机的 IP 地址(或名称),而不是 localhost
。不知道你是不是也需要改端口