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 ESP8266 post请求失败_Arduino_Wifi_Esp8266_Arduino Esp8266 - Fatal编程技术网

Arduino ESP8266 post请求失败

Arduino ESP8266 post请求失败,arduino,wifi,esp8266,arduino-esp8266,Arduino,Wifi,Esp8266,Arduino Esp8266,我不敢在这里问这个问题;我已经做了,我真的需要解决它 基本上,我每15秒向dweetPro发送一次帖子。它将连续几个小时完美地工作,然后随机停止,每20个失败响应发送一个成功响应 我已经尝试了我能想到的一切,我非常确定我的代码是正确的,不确定它是否与库有关或是什么。我可以在我的PC上无限期地从Python发送帖子,而且不会失败,所以它肯定是站在ESP一边的 我用的是干净的2A电源,所以不是电源问题 以下是ESP发送帖子的几条Wireshark日志的链接。有效和无效都在它们上面 在GitHub

我不敢在这里问这个问题;我已经做了,我真的需要解决它

基本上,我每15秒向dweetPro发送一次帖子。它将连续几个小时完美地工作,然后随机停止,每20个失败响应发送一个成功响应

我已经尝试了我能想到的一切,我非常确定我的代码是正确的,不确定它是否与库有关或是什么。我可以在我的PC上无限期地从Python发送帖子,而且不会失败,所以它肯定是站在ESP一边的

我用的是干净的2A电源,所以不是电源问题

以下是ESP发送帖子的几条Wireshark日志的链接。有效和无效都在它们上面

在GitHub上可以找到有关该问题的更多信息。这是我正在使用的代码,使用了调试行:

  void send_to_server(String* time_sent, float magnitude, String status,
    int earthquake_occured, float* data, int data_size)
  {
    int content_length;
    String content = make_json_content(&content_length, magnitude,
      status, earthquake_occured, data, data_size);

    int s = -100;
    int c = 0;
    while (s<0 && c<10)
    {
      HTTPClient http;
      http.setTimeout(1000);

      bool suc = http.begin("http://dweetpro.io/v2/dweets");
      Serial.print("Success?: "); Serial.println(suc);

      http.addHeader("Content-Type", "application/json");
      http.addHeader("Accept", "application/json");
      http.addHeader("X-DWEET-AUTH", "xxx");

      int timerr = millis();
      Serial.println("Posting");
      s = http.POST(content);
      Serial.print("Posted: "); Serial.println(millis() - timerr);
      Serial.print("Post len: "); Serial.println(s);
      http.writeToStream(&Serial);
      Serial.println("");
      http.end();
      ++c;
    }
    Serial.println("Ended");
}
void send_to_server(字符串*发送的时间、浮动幅度、字符串状态、,
int地震发生,浮点*数据,int数据大小)
{
int内容长度;
String content=make_json_content(&content_长度、大小、,
状态、地震发生、数据、数据大小);
int s=-100;
int c=0;

虽然(s每当我听到一个Arduino项目在一段时间后崩溃,我看到String类时,我立刻对它产生怀疑。在Arduino的旧版本中,它有一个严重的内存泄漏。当前版本已经修复了该泄漏,但仍然存在连接问题。基本上,当连接两个字符串时,它必须解除锁定标记内存中它们所在的位置,并为较大的字符串分配新的空间。如果自上次连接以来堆或堆栈上没有出现任何其他内容,那么这可能不是问题

但发生的情况是,有人正在构建两个越来越大的字符串。每次它都必须在内存中越来越高地分配内存,在较小的字符串原来所在的位置留下漏洞。最终,堆看起来像瑞士奶酪,没有垃圾收集和碎片整理。在项目正常运行了一段时间之后,堆和堆栈突然聚集在一起,然后就熄灯了


我不知道Arduino是否有像freemem这样的函数可以为ESP8266工作,但有必要寻找一种方法来确定您有多少可用内存。如果随着程序运行,内存逐渐减少到0,那么您就发现了问题。

我希望是这样。我应该添加的其他信息如下:如果它没有发送有效的帖子,我可以重置esp,但它仍然无法工作。这真的很奇怪,这就是为什么我如此不知所措。如果它正在滚动发送有效帖子,我可以重置/拔出,它仍然可以工作。如果它不工作,我也这样做,它将无法工作。它可能不是指向Google文件锁的外部链接,而是指向Google文件锁的外部链接最好在问题中显示Wireshark日志。关键信息可以在屏幕截图中显示吗?我们倾向于不鼓励使用文件储物柜,因为它们的链接很脆弱,如果将来它们会死亡,那么如果没有它,问题可能就没有多大意义。