Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 连接到MQTT代理时,NodeMCU(ESP8266)异常28_Arduino_Esp8266_Nodemcu - Fatal编程技术网

Arduino 连接到MQTT代理时,NodeMCU(ESP8266)异常28

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";

我使用NodeMCU(ESP8266)作为WiFi客户端连接到我计算机上运行的MQTT代理。使用WSL(Ubuntu)在Windows中使用此设置,MQTT代理似乎工作得非常好。然而,当ESP8266尝试连接到MQTT服务器时,它会立即在串行控制台中抛出错误。WiFi连接无故障

请在下面找到我的代码的工作示例:

#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上运行它。算了吧


希望其他熬夜错过一个小细节的人不会浪费很多时间去想办法。谢谢大家!

非常感谢你做了这么多的调试并找出了堆栈跟踪。也为提供如此清晰、简洁的代码片段来演示问题。所以很少有海报能做到这一点,这对我们有很大帮助。非常感谢。非常感谢你做了这么多的调试并找出了堆栈跟踪。也为提供如此清晰、简洁的代码片段来演示问题。所以很少有海报能做到这一点,这对我们有很大帮助。非常感谢。成功了!事实上,当我在看另一个(正在工作的)示例时,我也意识到了这一点。当我被难倒的时候已经很晚了,我想我只是错过了它和/或在我写代码的时候不小心漏掉了那一行。非常感谢。这也发生在我身上。。。当你盯着同一个代码看太久的时候,你很难看到到底发生了什么:)就是这样!事实上,当我在看另一个(正在工作的)示例时,我也意识到了这一点。当我被难倒的时候已经很晚了,我想我只是错过了它和/或在我写代码的时候不小心漏掉了那一行。非常感谢。这也发生在我身上。。。当您长时间盯着同一代码看时,很难真正看到发生了什么:)