wdt重置通过esp8266向PubNub发送REST API订阅请求

时间:2017-06-09 13:14:10

标签: rest pubnub nodemcu watchdog arduino-esp8266

我使用this代码将NodeMCU esp8266与PubNub连接起来。发布工作正常,但订阅部分工作一段时间,然后导致控制器重置。代码正确遵循订阅消息时间戳机制。观察订阅代码时,循环完成三个步骤;

//1. connecting to pubsub.pubnub.com
if (!client.connect(host, 80))
  {
    Serial.println("connection failed");
    return;
  }

//2. making and sending the GET request to subscribe
  url = "/subscribe/";
  url += subKey;
  url += "/";
  url += channel;
  url += "/0/";
  url += timeToken;
  //Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");             
  delay(10);

//3. finally listening the received msg response
  while (client.available())
  {
    String line = client.readStringUntil('\r');
    if (line.endsWith("]"))
    {
      Serial.println(line);
      json_handler(string_parser(line)); // handling the received msg
    }
  }

第一步是让控制器复位(软复位),

Soft WDT reset

ctx: cont 
sp: 3ffef920 end: 3ffefcb0 offset: 01b0

>>>stack>>>
3ffefad0:  00000000 3ffefff8 3ffefff8 40204083  
3ffefae0:  402017b8 00000000 3ffefff8 40204083  
3ffefaf0:  00000000 3ffefff8 00000000 40202152  
3ffefb00:  001e8480 3ffe0001 3ffefd38 40202152  
3ffefb10:  00000000 00000040 00000000 00000000

我通过第一步(连接到主机),从void loop()到setup()观察到这一点,并且我收到初始GET响应为[[]," 14970123776801072"],但之后在步骤2中关闭连接,因此我不会从订阅的频道收到任何进一步的消息。我试图不在第2步关闭连接,它似乎运行良好,但有延迟,有时两次收到相同的消息。我知道这不是理想的做法。所以我的问题是:我们是否需要不断建立新连接并发送GET请求以接收来自我们频道的消息并关闭连接?如果是,那么实际导致控制器重置的是什么?

或有没有办法发送订阅GET请求一次然后总是等待收到的消息?

0 个答案:

没有答案