设备侧SDK相关问题
IoT Device SDK C启动失败?
C版SDK启动失败一般是openssl、paho库文件编译失败、或者没有使用export LD_LIBRARY_PATH=./lib/加载库文件。可参考IoT Device SDK(C)使用指南中的“准备工作”。
IoT Device SDK Java启动失败?
IoT Device SDK Java启动失败一般是未安装JDK(需1.8及以上),或者未安装Maven。
Java SDK中有多个demo,该参考哪一个demo?
直连设备建议参考“device_demo”(包含bootstrap设备发放功能);如果是普通网关,或者是泛协议接入网关对子设备进行管理,请参考“gateway_demo”。
C版 SDK中有多个demo,该参考哪一个demo?
C版SDK中的demo是分不同场景的,直连设备建议参考“device_demo”;如果需要集成boostrap发放功能,请参考“bootstrap_demo”;如果是普通网关,或者是泛协议接入网关,请参考“gateway_demo”。
C版 SDK连接时返回错误码4是什么意思?
返回错误码4是账号名或者密码输入有误。其他连接失败时返回的错误码请参考MQTTAsyn.h头文件中的错误码描述。
IoT Device SDK 和IoT Device SDK Tiny有什么区别?
相比于IoT Device SDK,Tiny版本更加轻量,适用于内存以及磁盘空间更小的设备,且一般很少挂载子设备,在编译中没有使用动态链接库,代码提供了操作系统抽象层,可适配多种OS,例如FreeRTOS、linux、NovaOS、ucos_ii、OpenHarmony LiteOS-M等;除MQTT(S)还支持LwM2M,CoAP协议,Tiny使用的mbedtls加密,IoT Device SDK C采用的openssl加密。详细请参考IoT Device SDK介绍。
IoT Device SDK C Tiny相关问题
- 日志中出现诸如mqtt_imp_init: ###please implement mqtt by yourself####此类问题。
首先检查编译架构中对于__attribute__ ((weak))函数的支持性,如果不支持,建议将这些函数全部注释掉;如果出现link_tcpip_imp_init:###please implement this function by yourself####,建议检查是否实现网络层的适配。
- 在使用SDK时发现某些任务执行顺序与任务优先级顺序不符?
SDK中默认使用的优先级从大到小依次为0-31,用户可根据不同的操作系统自行调整相应任务的优先级。
- SDK移植流程主要包括哪些步骤?
移植过程主要包括操作系统注册到OSAL层以及TCPIP注册到SAL层,同时可以根据需求进行模块化裁剪,详见开发指南。
- 使用MQTT协议对接华为云时,返回错误码2
具体日志如下所示
图1 MQTT链接错误提示
该问题为网络错误,首先建议用户检查开发板是否已经联网成功,如果网络联通,建议检查所要对接网络的IP地址或域名以及端口号是否正确,如linux环境下,可以ping所要对接的网络地址查看是否ping通。
- 客户在对接华为云时,出现网络断连接后,在恢复网络时设备没有自动重连。
图2 断链没有重连日志提示
日志中可见PAHO已经退出,设备已经与平台断开连接,主动下线。建议客户修改SDK目录中的network\mqtt\paho_mqtt\port\paho_mqtt_port.c文件中的函数__loop_entry()中的休眠时间1ms调大至100ms,具体为:osal_task_sleep(100),查看是否可以自动重连。
- 使用MQTTS对接华为云时,流程卡死在topic订阅阶段,参考日志如下所示。
图3 流程卡死topic订阅日志提示
请将iot_config.h文件中的宏CONFIG_PAHO_LOOPTIMEOUT调整为1000。
- 开发板使用MQTT对接华为云成功,但切换到MQTTS时对接失败
可能是开发板内存不足导致,建议测试下开发板剩余内存,建议内存尽量大于60K,如在OpenHarmony L0设备中可以调用接口LOS_MemPoolSizeGet(m_aucSysMem0)获取总内存,LOS_MemTotalUsedGet(m_aucSysMem0)获取已使用内存,做差即可获取到剩余内存,如果移植了shell也可以通过free指令获取到当前内存情况。
- 采用MQTT对接华为云的正确日志如下所示,应如何解读?
图4 MQTT正常建链日志提示
日志中第3、4行是MQTT协议对接华为云必现日志,若使用MQTTS则会出现第2行日志;如果使用适配sal的tcpip协议则会出现第1行日志;若相应日志没有打印,建议根据文件link_main.c找到对应功能的初始化函数所对应的宏,之后在iotlink_config.h中检查对应的宏是否打开。
- 设备断电之后在IoTDA平台仍然可以看到设备在线?
如果设备没有主动断链通知平台下线,则设备下线时间与代码中的MQTT心跳时间lifetime相关,为1.5倍的心跳时间,在MQTT建立连接时,连接参数中对lifetime进行设置即可。
- 目前已经移植了IoT Device SDK Tiny(附代码)的设备清单
详见移植设备清单列表。
IoT Device SDK Java 上报数据报错“Too many publishes in progress”?
该问题一般是并发消息过高导致,可以通过调大MqttConnection.java中的 "MAX_FLIGHT_COUNT" 参数解决。