Arduino Web 客户端随机冻结

arduino web client random freeze

本文关键字:冻结 随机 客户端 Web Arduino      更新时间:2023-10-16

我已经为arduino实现了一个Web客户端,将数据从我的传感器发送到数据库,抛出GET Http请求。循环在调试 4 上随机冻结

这是代码的一部分,这里是完整的草图链接。

有什么建议吗?

sprintf(pageAdd,"/write3.php?value0=%d&value1=%d&value2=%f&value3=%lu&value4=%f&value5=%f&value6=%f&value7=%f&value8=%f", value0, dht_humidity, temperature, pressure, altitude, gust, dir, rain, knots);
if(!getPage(server,serverPort,pageAdd)) Serial.print(F("Fail "));
else Serial.print(F("Pass "));

byte getPage(IPAddress ipBuf,int thisPort, char *page)
{
  int inChar;
  char outBuf[128];
  Serial.print(F("connecting..."));
  if(client.connect(ipBuf,thisPort))
  {
     Serial.println(F("connected"));
    sprintf(outBuf,"GET %s HTTP/1.1",page);
    Serial.println(F("DEBUG 1"));
    client.println(outBuf);
    Serial.println(F("DEBUG 2"));
    sprintf(outBuf,"Host: %s",serverName);
    Serial.println(F("DEBUG 3"));
    client.println(outBuf);
    Serial.println(F("DEBUG 4"));
    client.println(F("Connection: closern"));
  } 
  else
  {
    Serial.println(F("failed"));
    return 0;
  }

sprintf 很危险。 它会让你快速破解,但如果黑客改变,你可能会遇到难以调试的麻烦。相反,如果您写入本地缓冲区,请使用snprintf(buffer,sizeof(buffer),..... 截断输出比损坏内存更好。

这可能是你的问题:因为pageAdd不是一个非常大的缓冲区。

sprintf(pageAdd,"/write3.php?value0=%d&value1=%d&value2=%f&value3=%lu&value4=%f&value5=%f&value6=%f&value7=%f&value8=%f", value0, dht_humidity, 温度, 压力, 高度, 阵风, 目录, 雨, 结);