文档首页/ 设备接入 IoTDA/ 常见问题/ 设备侧SDK相关问题
更新时间:2024-07-29 GMT+08:00

设备侧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相关问题

  1. 日志中出现诸如mqtt_imp_init: ###please implement mqtt by yourself####此类问题。

    首先检查编译架构中对于__attribute__ ((weak))函数的支持性,如果不支持,建议将这些函数全部注释掉;如果出现link_tcpip_imp_init:###please implement this function by yourself####,建议检查是否实现网络层的适配。

  2. 在使用SDK时发现某些任务执行顺序与任务优先级顺序不符?

    SDK中默认使用的优先级从大到小依次为0-31,用户可根据不同的操作系统自行调整相应任务的优先级。

  3. SDK移植流程主要包括哪些步骤?

    移植过程主要包括操作系统注册到OSAL层以及TCPIP注册到SAL层,同时可以根据需求进行模块化裁剪,详见开发指南

  4. 使用MQTT协议对接华为云时,返回错误码2

    具体日志如下所示

    图1 MQTT链接错误提示

    该问题为网络错误,首先建议用户检查开发板是否已经联网成功,如果网络联通,建议检查所要对接网络的IP地址或域名以及端口号是否正确,如linux环境下,可以ping所要对接的网络地址查看是否ping通。

  5. 客户在对接华为云时,出现网络断连接后,在恢复网络时设备没有自动重连。
    图2 断链没有重连日志提示

    日志中可见PAHO已经退出,设备已经与平台断开连接,主动下线。建议客户修改SDK目录中的network\mqtt\paho_mqtt\port\paho_mqtt_port.c文件中的函数__loop_entry()中的休眠时间1ms调大至100ms,具体为:osal_task_sleep(100),查看是否可以自动重连。

  6. 使用MQTTS对接华为云时,流程卡死在topic订阅阶段,参考日志如下所示。
    图3 流程卡死topic订阅日志提示

    请将iot_config.h文件中的宏CONFIG_PAHO_LOOPTIMEOUT调整为1000。

  7. 开发板使用MQTT对接华为云成功,但切换到MQTTS时对接失败

    可能是开发板内存不足导致,建议测试下开发板剩余内存,建议内存尽量大于60K,如在OpenHarmony L0设备中可以调用接口LOS_MemPoolSizeGet(m_aucSysMem0)获取总内存,LOS_MemTotalUsedGet(m_aucSysMem0)获取已使用内存,做差即可获取到剩余内存,如果移植了shell也可以通过free指令获取到当前内存情况。

  8. 采用MQTT对接华为云的正确日志如下所示,应如何解读?
    图4 MQTT正常建链日志提示

    日志中第3、4行是MQTT协议对接华为云必现日志,若使用MQTTS则会出现第2行日志;如果使用适配sal的tcpip协议则会出现第1行日志;若相应日志没有打印,建议根据文件link_main.c找到对应功能的初始化函数所对应的宏,之后在iotlink_config.h中检查对应的宏是否打开。

  9. 设备断电之后在IoTDA平台仍然可以看到设备在线?

    如果设备没有主动断链通知平台下线,则设备下线时间与代码中的MQTT心跳时间lifetime相关,为1.5倍的心跳时间,在MQTT建立连接时,连接参数中对lifetime进行设置即可。

  10. 目前已经移植了IoT Device SDK Tiny(附代码)的设备清单

    详见移植设备清单列表

IoT Device SDK Java 上报数据报错“Too many publishes in progress”?

该问题一般是并发消息过高导致,可以通过调大MqttConnection.java中的 "MAX_FLIGHT_COUNT" 参数解决。