当前位置: 代码迷 >> 综合 >> Ros集成IOTHUB csdk(私有云)
  详细解决方案

Ros集成IOTHUB csdk(私有云)

热度:67   发布时间:2023-10-16 17:35:56.0

IOTHUB CSDK地址
本文测试的是3.21版本:下载地址

此处针对我的项目需要做以下调整:

(1)修改服务器地址

sdk文件夹/sdk_src/internal_inc/qcloud_iot_common.h中搜索1883,找到:

#define QCLOUD_IOT_MQTT_DIRECT_DOMAIN "iotcloud.tencentdevices.com"
#define MQTT_SERVER_PORT_TLS 8883
#define MQTT_SERVER_PORT_NOTLS 1883

因为我使用的是私有云,不是腾讯公有云,因此我需要将iotcloud.tencentdevices.com修改为我的私有云地址,若修改成域名,需要配置hosts,亲测可以改成ip地址
8883表示证书认证的端口,1883表示密钥认证的端口

(2)修改代码中连接的服务器地址

sdk文件夹/iot_hub/sdk_src/protocol/mqtt/mqtt_client.c中搜索(大约在368行)

    int size =HAL_Snprintf(pClient->host_addr, HOST_STR_LENGTH, "%s.%s", pParams->product_id, QCLOUD_IOT_MQTT_DIRECT_DOMAIN);if (size < 0 || size > HOST_STR_LENGTH - 1) {
    IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE);}

上面表示将服务器地址改为product_id.QCLOUD_IOT_MQTT_DIRECT_DOMAIN,但是我们只希望是QCLOUD_IOT_MQTT_DIRECT_DOMAIN,因此改为

    int size =HAL_Snprintf(pClient->host_addr, HOST_STR_LENGTH, "%s", QCLOUD_IOT_MQTT_DIRECT_DOMAIN);if (size < 0 || size > HOST_STR_LENGTH - 1) {
    IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE);}

(3)修改CMakeLists.txt

因为本文使用的是密钥认证,因此可以不使用STL
sdk文件夹/CMakeLists.txt中修改

set(FEATURE_AUTH_WITH_NOTLS OFF)

set(FEATURE_AUTH_WITH_NOTLS ON)

(4)修改device_info.json

主要需要根据自己的iothub控制台里面的设备信息修改
productId、deviceName和deviceSecret

(5)编译并移植头文件和库文件

运行sh cmake_build.sh会编译成功
并在output/release.include文件夹下生成头文件,在output/release/lib文件夹下生成库文件
分别将头文件和库文件复制到ros功能包的includelib文件夹下。然后即可以在功能包中调用其api,功能包的CMakeLists.txt中需要添加以下内容

set(link_libiot_sdkiot_platform
)set(lib -Wl,--start-group ${link_lib} -Wl,--end-group)
set(LINK_DIR lib/)
link_directories(${LINK_DIR}/usr/lib/)target_link_libraries(可执行文件名 ${lib}  )
  相关解决方案