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功能包的include
和lib
文件夹下。然后即可以在功能包中调用其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} )