我为arduino实现了一个Web客户端,以将传感器中的数据发送到数据库,并发出GET Http请求。该循环在DEBUG 4上随机冻结
这是代码的一部分,here是完整的草图链接。
有什么建议么?
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: close\r\n"));
}
else
{
Serial.println(F("failed"));
return 0;
}
最佳答案
sprintf很危险。它可以帮助您快速攻克,但是如果该hack发生变化,您可能会遇到难以调试的麻烦。相反,如果您写入本地缓冲区,请使用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_湿度,温度,压力,海拔高度,阵风,dir,雨,结);