Arduino 连接到MQTT代理时,NodeMCU(ESP8266)异常28
我使用NodeMCU(ESP8266)作为WiFi客户端连接到我计算机上运行的MQTT代理。使用WSL(Ubuntu)在Windows中使用此设置,MQTT代理似乎工作得非常好。然而,当ESP8266尝试连接到MQTT服务器时,它会立即在串行控制台中抛出错误。WiFi连接无故障 请在下面找到我的代码的工作示例:Arduino 连接到MQTT代理时,NodeMCU(ESP8266)异常28,arduino,esp8266,nodemcu,Arduino,Esp8266,Nodemcu,我使用NodeMCU(ESP8266)作为WiFi客户端连接到我计算机上运行的MQTT代理。使用WSL(Ubuntu)在Windows中使用此设置,MQTT代理似乎工作得非常好。然而,当ESP8266尝试连接到MQTT服务器时,它会立即在串行控制台中抛出错误。WiFi连接无故障 请在下面找到我的代码的工作示例: #include <ESP8266WiFi.h> #include <MQTT.h> const char ssid[] = "MyWiFiNetwork";
#include <ESP8266WiFi.h>
#include <MQTT.h>
const char ssid[] = "MyWiFiNetwork";
const char pass[] = "MyWiFiPassword";
WiFiClient net;
MQTTClient client;
void connect() {
Serial.print("Connecting to broker...");
while (!client.connect("arduino")) {
Serial.print(".");
delay(1000);
}
Serial.println("\nconnected to broker!");
}
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, pass);
Serial.print("Attempting to connect to ");
Serial.println(ssid);
while(WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
if(WiFi.status() == WL_CONNECTED) {
Serial.print("\nWiFi connected to ");
Serial.println(WiFi.SSID());
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Gateway: ");
Serial.println(WiFi.gatewayIP());
Serial.println("");
}
connect();
}
void loop() {
// put your main code here, to run repeatedly:
}
但在这一点上,我碰到了一堵墙。我不知道该怎么做,我已经尝试过调查异常中显示的文件,但没有结果。有人知道这意味着什么或者错误是什么吗
我使用的图书馆有:
非常感谢!我已经做了6个多小时了,我已经死了。您缺少MQTT客户端上的一些设置。不幸的是,这个MQTT库不够聪明,没有注意到您没有设置服务器名称,并且在未完全设置的情况下调用
connect()
时崩溃
在调用connect()
之前,需要先调用begin()
方法
尝试像这样重写connect()
函数:
void connect() {
Serial.print("Connecting to broker...");
client.begin("MQTT-SERVER-HOSTNAME", net);
while (!client.connect("arduino")) {
如果需要指定默认(1883)以外的端口号,可以在
begin()
方法中的服务器域名后指定整数端口号。您缺少MQTT客户端上的某些设置。不幸的是,这个MQTT库不够聪明,没有注意到您没有设置服务器名称,并且在未完全设置的情况下调用connect()
时崩溃
在调用connect()
之前,需要先调用begin()
方法
尝试像这样重写connect()
函数:
void connect() {
Serial.print("Connecting to broker...");
client.begin("MQTT-SERVER-HOSTNAME", net);
while (!client.connect("arduino")) {
如果需要指定默认端口号(1883)以外的端口号,可以在
begin()
方法中的服务器域名后指定整数端口号。我的问题的解决方案实际上有两个方面:
正如John Romkey指出的那样,我的脚本中遗漏了告诉我的ESP8266经纪人在哪里的那一行。我需要以下几点:
client.begin("IP_ADDRESS_OF_BROKER", net);
然而,我还需要禁用Windows防火墙,因为我正在WSL上运行它。算了吧
希望其他熬夜错过一个小细节的人不会浪费很多时间去想办法。谢谢大家! 我的问题的解决方案实际上有两个方面: 正如John Romkey指出的那样,我的脚本中遗漏了告诉我的ESP8266经纪人在哪里的那一行。我需要以下几点:
client.begin("IP_ADDRESS_OF_BROKER", net);
然而,我还需要禁用Windows防火墙,因为我正在WSL上运行它。算了吧
希望其他熬夜错过一个小细节的人不会浪费很多时间去想办法。谢谢大家! 非常感谢你做了这么多的调试并找出了堆栈跟踪。也为提供如此清晰、简洁的代码片段来演示问题。所以很少有海报能做到这一点,这对我们有很大帮助。非常感谢。非常感谢你做了这么多的调试并找出了堆栈跟踪。也为提供如此清晰、简洁的代码片段来演示问题。所以很少有海报能做到这一点,这对我们有很大帮助。非常感谢。成功了!事实上,当我在看另一个(正在工作的)示例时,我也意识到了这一点。当我被难倒的时候已经很晚了,我想我只是错过了它和/或在我写代码的时候不小心漏掉了那一行。非常感谢。这也发生在我身上。。。当你盯着同一个代码看太久的时候,你很难看到到底发生了什么:)就是这样!事实上,当我在看另一个(正在工作的)示例时,我也意识到了这一点。当我被难倒的时候已经很晚了,我想我只是错过了它和/或在我写代码的时候不小心漏掉了那一行。非常感谢。这也发生在我身上。。。当您长时间盯着同一代码看时,很难真正看到发生了什么:)