我使用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请求一次然后总是等待收到的消息?