乐鑫技术交流
直播中

赵淑洁

7年用户 889经验值
私信 关注
[问答]

WiFiClient客户端仅连接一次的原因?如何解决?

你好!
我将 NodeMCU 连接到电容式土壤湿度传感器以发送湿度水平。我成功地将它连接到 ThingSpeak,并且能够每 30 秒记录一次数据。
然后我尝试对 Firebase 做同样的事情。我遇到了一些问题,不确定为什么它不起作用。因此,我重新上传了用于 ThingSpeak 的代码,结果发现它也突然停止工作了。
每当我将 ThingSpeak 代码上传到我的 NodeMCU 时,它都会成功连接到 WiFi,记录第一条数据并将其发送到 ThingSpeak。之后,在循环中,它尝试重新连接到 WiFiClient 但不断失败。
当我按下 NodeMCU 上的重置按钮时,它再次成功发送数据但在第一次后停止。
我很想弄明白为什么它能够第一次发送数据,客户端能够第一次连接,但所有后续请求都不通过?
这是我一直在使用的简短代码(在我使用 Firebase 进行测试之前有效):
String apiKey = "XXXXX";     //  Enter your Write API key from ThingSpeak

const char *ssid =  "XXXXX";     // replace with your wifi ssid and wpa2 key
const char *pass =  "XXXXX";
const char* server = "api.thingspeak.com";

WiFiClient client;

int sensor_pin = A0;
int output_value;


void setup()
{
  Serial.begin(115200);
  delay(10);


  Serial.println("Connecting to ");
  Serial.println(ssid);


  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

}

void loop()
{

  output_value = analogRead(sensor_pin);
  output_value = map(output_value, 550, 0, 0, 100);

  if (client.connect(server, 80))  //   "184.106.153.149" or api.thingspeak.com
  {

    String postStr = apiKey;
    postStr += "&field1=";
    postStr += String(output_value);

    postStr += "rnrn";

    client.print("POST /update HTTP/1.1n");
    client.print("Host: api.thingspeak.comn");
    client.print("Connection: closen");
    client.print("X-THINGSPEAKAPIKEY: " + apiKey + "n");
    client.print("Content-Type: application/x-www-form-urlencodedn");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("nn");
    client.print(postStr);

    Serial.print("Humidity: ");
    Serial.print(output_value);
    Serial.print("%");
    Serial.println("   Send to Thingspeak.");
  } else {
      Serial.println("Did not connect to thingspeak");
    }
  client.stop();

  Serial.println("Waiting...");

  // thingspeak needs minimum 15 sec delay between updates, i've set it to 30 seconds
  delay(10000);
}

此代码之前运行良好,现在不再运行(除了每次重置期间的第一个实例)。我怎样才能第二次成功重新连接到 WiFiClient?这是 NodeMCU 模块的问题吗?
谢谢!
                                       
               

更多回帖

发帖
×
20
完善资料,
赚取积分