Blinker 常见问题

萧展鹏
2023-12-01

     https://www.arduino.cn/thread-103782-1-1.html

  • Q:编译例程报错或例程导致设备反复重启
  • A:确保例程支持你选择的设备,更新最新的库并更新原件对应的package, 若仍然无法解决如上问题请联系开发人员。  
  • Q:回调函数中是否可以使用延时或者delay
  • A:使用回调函数是为了更方便梳理程序逻辑,但回调函数中若有阻塞类型的代码(如: while delay 或 Serial读写等)将可能影响设备的正常通信及工作。
    用户在开发过程中务必避免在回调中执行阻塞类型的代码, 请使用标志位等方法在回调外对标志位进行查询检测执行控制。  
  • Q:是否可以实时反馈组件状态
  • A:因为MQTT是一个轻量级的传输协议,不建议用户用于实时更新设备状态使用(如在loop中不断print),这将导致大量通信费用的产生(如阿里云接入设备)。所以我们对设备发送频率进行了限制,我们建议在心跳包中进行组件状态的反馈。用户如果loop中反馈组件状态可能触发报错:MQTT NOT ALIVE OR MSG LIMIT。如果用户确实对数据实时性要求较高可以在组件中增加一个按键组件,当这个按键组件按下时设备反馈当前各组件的状态。
  • Q:各版本SDK支持情况
  • A:目前较稳定支持的SDK为 Arduino/NodeJS/Python, 其他版本SDK(ESP-IDF/Python)将于近期进行更新,部分版本SDK(如micropython)由于其底层库支持不足将会放弃更新。
  • Q:如何将其他项目下的代码合并到blinker中
  • A:blinker主要负责 硬件设备端<->云端<->APP端 三者间的数据交互,并不会影响硬件设备端IO控制。blinker相关代码在硬件设备端会使用相应的网络通信接口(如WiFi/HTTP/Client等)进行通信及一些堆栈空间对通信数据进行解析。用户在代码合并时不占用对应接口并预留足够堆栈空间即可。
  • Q:代码合并时的注意事项
  • A:不要在回调中使用阻塞类型的代码。保证loop中对Blinker.run()的频繁调用,该函数用以保持设备间连接及处理收到的数据;
  • Q:代码合并时如何保证对Blinker.run()的频繁调用
  • A:设备启动联网/获取连接云端信息/和云端数据通信时均是在Blinker.run()调用时完成。建议将Blinker.run放到loop中,且loop中尽量不要设置额外的耗时函数。若有需要设置耗时函数,可以使用Blinker.init()函数(该函数用于检测设备是否完成初始化,即启动联网并成功获取连接云端信息)对设备状态进行判断,当设备完成初始化后再行运行耗时函数。
  • Q:什么是设备不在线(MQTT NOT ALIVE)
  • A:设备不在线这里指的是APP/控制设备不在线硬件设备在启动时默认APP/控制设备不在线,只有当硬件设备收到APP/控制设备(或者语音助手)发来的消息后才认为APP/控制设备在线。如当打开APP对应设备界面时APP会向硬件设备发送心跳包告知设备上线,或者APP向硬件设备发送一条控制信息后硬件设备将认为APP设备在线。在收到APP/控制设备消息120s后仍然没有收到下一条消息时将默认APP设备已下线,此时若再向APP/控制设备反馈数据将触发该报错
  • Q:blinker broker下的设备是否可以使用语音助手
  • A:Blinker最新的Arduino库已支持blinker broker下的设备使用语音助手
  • Q:小爱接入是否可以和米家设备联动
  • A:小爱接入仅使用米家进行同步设备,不能和米家设备联动  
  • Q:语音助手同步后无法正常控制  
  • A:确保使用最新的库,如果仍然无法正常控制,可以查看设备端调试信息。若仍然无法解决,请发帖或用户群咨询开发人员。
  • Q:数据图表不显示
  • A:确保使用最新的库及package,测试例程 例程1 / 例程2
  • Q:ESP32-CAM例程
  • A:https://github.com/blinker-iot/blinker-library/tree/master/examples/Blinker_ESP32_CAM  
  • Q:数据图表突然无数据  
  • A:常见原因为数据储存数量超过限制(普通用户一共只能上传5个不同key的数据),具体可以通过硬件设备端串口调试信息(报错 max device data key size limit)或者APP->开发者->数据管理查询。  
  • Q:如何查看设备端调试信息  
  • A:在设备端代码setup中添加如下代码,IDE中选择设备对应的串口打开串口助手选择相对应的波特率后即可查看设备端调试信息。
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();

 

常见提示/报错

  • Q:Blinker Timer loaded! EEPROM address 1536-2431 is used for Blinker Timer!  PLEASE AVOID USING THESE EEPROM ADDRESS!  
  • A:这只是一个正常的设备启动提示,告知你EEPROM中某些地址将会被blinker库使用。如果你需要使用EEPROM,请避开这些地址即可。这不是导致你设备不能正常连接服务器或者正常使用的原因。具体原因可以通过设备端调试信息进行查询判断。  
  • Q:Maybe you have put in the wrong AuthKey!/ Or maybe your request is too frequently!/ Or maybe your network is disconnected!  
  • A:设备没有从服务器获取到设备登陆信息,目前常见原因有:请求过于频繁/网络环境不稳定请求失败/服务器死机。可以尝试重启设备或者更换热点尝试,服务器死机发生可能性极小,当然如果服务器死机我们会第一时间重启服务。
  • Q:Please set a mode BLINKER_BLE/BLINKER_WIFI/BLINKER_MQTT ! Please check your mode setting.  
  • A:没有设置设备接入类型,在库引用前使用宏定义设置设备接入类型即可。
  • Q:MQTT NOT ALIVE OR MSG LIMIT  
  • A:设备不在线或者超过设备发送频率限制(常见情况如在loop函数中不断反馈组件状态)。
  • Q:data is not a JSON!  
  • A:发送数据格式不是Json格式。Json格式校验时会消耗较大的堆栈,如果堆栈不足时也可能会报这个错误,此时可以尝试将设备设置为非加密接入模式。
 类似资料: