更多内容请访问:https://harmonyos.51cto.com,与华为官方共同打造的鸿蒙技术社区1.前面的话老实说,腾讯云互联网的物联网平台一直是我最喜欢的物联网云太平平台。除了腾讯的品质背书,提供的SDK也相当好用。还有一个腾讯连连小程序,可以帮忙做界面和调试功能。后端API有java、c++、Golang、js、python等语言版本,非常方便,是上云首选。2.首先下载sdk。我们先找到官方的sdk。在浩瀚的文档中看到熟悉的身影:文档地址在这里,谢谢带走:https://cloud.tencent.com/document/product/1081/48356下载好sdk后,熟练的放入第三方文件夹。不得不提的是OpenHarmony的2.x版本比1好用,x版本的代码结构清晰多了。1.实现几个重要的接口,这时候还是需要看文档,因为有些功能需要自己实现。具体有哪些?这里:https://cloud.tencent.com/document/product/1081/48389是写在这个文档里面的,我们需要实现这些接口,这里说一两个:仔细看看,霍,还有很多都是好人,但不要怕,都是打工仔,谁怕谁?,我二话不说就写了,结果给我写了:写完这些就可以准备编译了吗?nonono,BUILD.gn文件我们还没有制作出来,话不多说,我教你怎么写。#Copyright(c)2020HuaweiDeviceCo.,Ltd.#LicensedundertheApacheLicense,Version2.0(“许可证”);#youmaynotusethisfileexceptincompliancewiththeLicense.#YoumayobtainacopyoftheLicenseat##http://www.apache.org/licenses/LICENSE-2.0##Unlessrequiredbyapplicablelaworagreedtoinwriting,software#distributedundertheLicenseisdistributedonan"ASIS"BASIS,#WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.#SeetheLicenseforthespecificlanguagegoverningpermissionsand#limitationsundertheLicense.import("//build/lite/config/component/lite_component.gni")导入("//build/lite/ndk/ndk.gni")config("qcloud_sdk_config"){include_dirs=["sdk_src/internal_inc","sdk_src/library","include","include/exports","//kernel/liteos_m/kernel/include",#"//third_party/cmsis","//third_party/mbedtls/include","//third_party/mbedtls/include/mbedtls",]}cflags=["-Wno-unused-variable"]cflags+=["-Wno-unused-but-set-variable"]cflags+=["-Wno-unused-parameter"]cflags+=["-Wno-sign-compare"]cflags+=["-Wno-unused-function"]cflags+=["-Wno-return-type"]qcloud_sdk_sources=["sdk_src/network/socket/network_socket.c","sdk_src/network/tls/network_tls.c""sdk_src/network/network_interface.c","sdk_src/utils/utils_list.c","sdk_src/utils/utils_base64.c","sdk_src/utils/qcloud_iot_ca.c","sdk_src/utils/utils_aes.c""sdk_src/utils/utils_getopt.c","sdk_src/utils/utils_hmac.c","sdk_src/utils/utils_md5.c","sdk_src/utils/utils_sha1.c","sdk_src/utils/json_parser.c""sdk_src/utils/json_token.c","sdk_src/utils/string_utils.c","sdk_src/utils/utils_ringbuff.c","sdk_src/utils/qcloud_iot_log.c","sdk_src/utils/qcloud_iot_device.c","sdk_src/utils/utils_timer.c","sdk_src/protocol/mqtt/mqtt_client_common.c","sdk_src/protocol/mqtt/mqtt_client_connect.c","sdk_src/protocol/mqtt/mqtt_client_net.c","sdk_src/protocol/mqtt/mqtt_client_publish.c","sdk_src/protocol/mqtt/mqtt_client_subscribe.c","sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c","sdk_src/protocol/mqtt/mqtt_client_yield.c","sdk_src/protocol/mqtt/mqtt_client.c","sdk_src/services/data_template/data_template_action.c","sdk_src/services/data_template/data_template_client.c","sdk_src/services/data_template/data_template_client_common.c","sdk_src/服务/data_template/data_template_client_json.c","sdk_src/services/data_template/data_template_client_manager.c","sdk_src/services/data_template/data_template_event.c","platform/os/liteos_m/HAL_Device_liteos_m.c","platform/os/liteos_m/HAL_OS_liteos_m.c","platform/os/liteos_m/HAL_TCP_liteos_m.c","platform/os/liteos_m/HAL_Timer_liteos_m.c",#"./os/liteos_m/HAL_TLS_mbedtls_liteos_m.c",#"./tls/mbedtls/HAL_DTLS_mbedtls.c","platform/tls/mbedtls/HAL_TLS_mbedtls.c",]lite_library("qcloud_sdk_static"){target_type="static_library"sources=qcloud_sdk_sourcespublic_configs=[":qcloud_sdk_config"]}lite_library("qcloud_sdk_shared"){target_type="shared_library"sources=qcloud_sdk_sourcespublic_configs=[":qcloud_sdk_config"]}ndk_lib("qcloud_ndk"){if(board_name!="hi3861v100"){lib_extension=".so"deps=[":qcloud_sdk_shared"]}else{deps=[":qcloud_sdk_static"]}head_files=["//third_party/iot_link/network/mqtt/paho_mqtt/paho"]}完成后可以试试看有没有error.2.把逻辑写在main里,处理事情。我们拿官方sdk里的灯光demo,直接新建一个demo文件夹,把文件放上文件放入:自己写BUILD.gn,之前连接过华为云。你真聪明,我不用多说了:#Copyright(c)2020NanjingXiaoxiongpaiIntelligentTechnologyCo.,Ltd.#LicensedundertheApacheLicense,Version2.0(the"License");#youmaynotusethisfileexceptincompliancewiththeLicense.#YoumayobtainacopyoftheLicense##http://www.apache.org/licenses/LICENSE-2.0##Unlessrequiredbyapplicablelaworagreedtoinwriting,software#distributedundertheLicenseisdistributedonan"ASIS"BASIS,#WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.#SeetheLicenseforthespecificlanguagegoverningpermissionsand#limitationsundertheLicense.static_library("q"cloud_thread[#"){}.c","light_data_template_sample.c"]cflags=["-Wno-unused-variable"]cflags+=["-Wno-unused-but-set-variable"]include_dirs=[".","//foundation/通信/softbus_lite/os_adapter/include","//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//base/iot_hardware/peripheral/interfaces/kits","//third_party"]deps=["//third_party/qcloud-iot-explorer-sdk-embedded-c-3.2.0:qcloud_sdk_static",#"//third_party/qcloud-iot-explorer-sdk-embedded-c-3.2.0/external_libs/mbedtls:mbedtls_static",]}然后在sample编译中的sdk中打开这个文件夹:就这样,代码的编写就完成了,很开心。3.在云平台上创建设备其实官方文档对创建设备的过程确实写的很详细,几乎不需要额外的处理。这里是官方的智能灯接入指南:https://cloud.tencent.com/document/product/1081/41155官方定义了很多对象模型。事实上,我们的产品可能不是由官方对象模型定义的。这时候我们就需要自己定义产品的属性、事件和动作。仔细阅读官方文档。可以看懂https://cloud.tencent.com/document/product/1081/34916,获取对象模型,创建设备,记录设备的productid,deviceid和connectionkey,和华为不太一样云平台同理,腾讯云的产品密钥是平台生成的,而华为云平台是自己定义设备的密钥,在创建设备时上传。4.编译,运行编译的过程很顺利,这里就不多废话了。但是运行的时候有一种情况,就是mutex不够用。折腾了一晚上也没找到解决办法。后来问了侯哥才明白:啊,不对,下面这位哥说的对,大家可以去他的主页关注一下:https://harmonyos.51cto.com/user/posts/13519852哥侯哥真是大神,一两句话就帮我搞定了,感谢侯哥的帮助:那我就把我的mutex相关代码改成posix接口,修改前是:void*HAL_MutexCreate(void){osMutexAttr_tattr;osMutexId_tmutex;charmutexName[RT_NAME_MAX];staticuint32_tmutex_v;attr.name=mutexName;attr.cb_mem=&mutex_v;attr。如果(0!=err_num){HAL_Printf("destroymutexfailed");}}voidHAL_MutexLock(_IN_void*mutex){interr_num;err_num=osMutexAcquire((osMutexId_t)mutex,osWaitForever);if(0!=err_num){HAL_Printf("lockmutexfailed");}}voidHAL_MutexUnlock(_IN_void*mutex){interr_num;err_num=osMutexRelease((osMutexId_t)mutex);if(0!=err_num){HAL_Printf("unlockmutexfailed");}}intHAL_MutexTryLock(_IN_void*mutex){interr_num;err_num=osMutexAcquire((osMutexId_t)mutex,osNoWait);if(0!=err_num){HAL_Printf("trylockmutexfailed");}returnerr_num;}改完之后是这样的:void*HAL_MutexCreate(void){//osMutexAttr_tattr;//osMutexId_tmutex;charmutexName[RT_NAME_MAX];staticuint32_p_mutex_t;mutex=HAL_Malloc(sizeof(pthread_mutex_t));pthread_mutexattr_tattr;intret=pthread_mutex_init(mutex,&attr);//osMutexNew(&attr);//if(NULL==mutex){if(ret!=0){HAL_Printf("createmutexfailed\n");}returnmutex;}voidHAL_MutexDestroy(_IN_void*mutex){interr_num;err_num=pthread_mutex_destroy(mutex);if(0!=err_num){HAL_Printf("destroymutexfailed");}}voidHAL_MutexLock(_IN_void*mutex){interr_num;err_num=pthread_mutex_lock(mutex);if(0!=err_num){HAL_Printf("lockmutexfailed");}}voidHAL_MutexUnlock(_IN_void*mutex){interr_num;err_num=pthread_mutex_unlock(mutex);if(0!=err_num){HAL_Printf("unlockmutexfailed");}}intHAL_MutexTryLock(_IN_void*mutex){interr_num;structtimespecabsTimeout={0,0};err_num=pthread_mutex_timedlock(mutex,&absTimeout);if(0!=err_num){HAL_Printf("trylockmutexfailed");}returnerr_num;}使用的时候记得在头文件中添加:#include处理完这个异常情况,就可以登录腾讯云平台发送和顺利接收数据。.云平台控件显示可以直接看动画,控件还是很及时的:6.总结其实连接腾讯云还是挺简单的,最新版SDK的打印比以前好多了。OpenHarmony2.x版本进行了优化。东西少,记得去年这个时候1.x版本还是很难对接的。给OpenHarmony团队点个赞,也给腾讯云团队点个赞。现在开始玩吧。更多信息请访问:与华为官方Harmonyos共同打造的技术社区https://harmonyos.51cto.com
