blinker会自动获取设备状态,通常用户不需要做任何处理,但当你错误编写程序时,可能会造成状态反馈失败或者不及时的问题,这时blinker App就会显示该设备 离线。为了帮助开发者更好的调试程序,这里我对blinker app的判断逻辑,及调试方法做一些讲解。
blinker App如何判断设备是否在线?
blinker App在 App打开时、进入设备页面时、在设备页面中每隔一定时间 会向设备发送心跳请求,内容为{“get”:”state”}。
设备收到请求后,会返回{“state”:”online”},app接收到这个返回,即会显示设备在线。
app中显示设备离线,并不等于设备没有连接上mqtt,但可以肯定的是:你的设备没有响应或者错误响应了app发出的心跳请求。
哪些情况可能照成显示离线?
1. 程序没有成功上传到开发板
解决办法:重新上传,上传后打开串口监视器,确认程序正确运行
2. 程序中没有设置正确的ssid和密码,导致没有连接上网络
解决办法:设置后再重新上传程序,上传后打开串口监视器,确认程序正确运行
3. 程序错误,导致程序运行不正确
解决办法:先使用并理解blinker例程,再自由发挥
4. 开发板供电不足
解决办法:换电源、换USB口 或者 在vcc和gnd间并电容
对于程序错误造成的离线,如何调试?
在程序初始化时添加debugAll,获取更详细的调试信息。
arduino程序如下:
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
}
然后通过串口调试,查看设备是否正确接收到{“get”:”state”}并响应{“state”:”online”}
如何修复错误?
笨办法:逐句注释掉自己写的代码,看看是那一句造成的反馈错误
正常的办法:理解blinker程序逻辑,通过调试信息,分析程序哪里造成了反馈错误或不及时