更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com,这是与华为官方共同建立的开发板XR806的试用活动,作为“老鸿蒙”,我怎么能放弃这个机会呢,我报名之后,果然拿到了使用额度。收到开发板后,想做什么样的demo?最近刚好在参加鸿蒙。发展成长计划活动,作为导师,需要接入华为云,上华为云即可。2.从华为云官方仓库中拉取用于对接平台的SDK。阅读华为云官方开发手册,一口气下载SDK。这是值得抱怨的。最重要的一点是,官方sdk从去年开始就没有更新过,不知道能不能用,先用着吧。sdk下载地址:本页https://support.huaweicloud.com/sdkreference-iothub/iot_10_1002.html下面:点击链接跳转到github,直接下载整个zip包。再次声明,作为我的王牌,鸿蒙系统没有文字,连官方demo都没有。我想说这些人在干什么?.下载sdk放在thirdparty目录下:3.使用sdk编写代码。据说官方没有demo,那我们怎么入手呢?幸运的是,我们可以从其他人的经验中学习。大功告成,参考BearPi的文档:https://gitee.com/bearpi/bearpi-hm_nano/tree/master/applications/BearPi/BearPi-HM_Nano/sample/D6_iot_cloud_oc这个文档比较详细,通俗易懂有代码,可以copy过来,有几点需要注意,小熊派官方代码中的url地址需要找平台最新的:那这个地址怎么获取呢,我们需要创建它是华为云上的第一款好产品,至于如何打造一款产品,这里就不赘述了。创建好产品后,点击首页,会有一个访问地址的链接:点击这个链接,可以看到各种协议的url地址和端口:我们使用的是mqtt协议,也就是它没有加密,所以选择这个。还有一个设备需要在创建产品后添加。添加设备使用secretkey方式,即创建设备时填写的secret。当你在这里完成时,你需要记住你。填写secret,然后会得到你的deviceid,用deviceid转换设备信息信息三元组,具体文档也写在熊派的仓库里:再粘贴这里:https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/然后就可以使用熊派了piedemo访问sdk。4.代码修改编译我们在BUILD.gn中这样写:/third_party/iot_link/cJSON/cJSON.c"]cflags=["-Wno-unused-variable"]cflags+=["-Wno-unused-but-set-variable"]include_dirs=[".","//foundation/communication/softbus_lite/os_adapter/include","//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//third_party/lwip/src/include","//third_party/lwip/test/unit","//base/iot_hardware/peripheral/interfaces/kits","//foundation/communication/wifi_lite/interfaces/wifiservice","//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include","//third_party/iot_link/inc","//third_party/iot_link/oc/oc_mqtt/oc_mqtt_tiny_v5","//third_party/iot_link/cJSON","//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTPacket/src","//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTClient-C/src","//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTClient-C/src/liteOS","//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTPacket/samples",]deps=["//third_party/iot_link/network/mqtt/paho_mqtt:pahomqtt_static",]}这里引用了官方SDKJSON和华为的MQTT库,其实就是1.x版本的鸿蒙系统还是不够精简,需要做一些删减,最基础的库会有很多绑定,主要修改点在这里:我们把上面两个箭头注释掉,因为我们不用系统,如果你不不评论,会有冲突,然后小熊带来了一个LITEOS版本的mqtt适配,我们是从小熊那里复制过来的,然后需要做一些修改,不记得修改了哪些,主要是几个系统文件,整理后所有这些,就可以编译成功过半了。5.板子连接无线网络,直接使用XR806官方demo进行修改。主要用的是连接wifi的例子,然后可以先运行这个看看能不能连上wifi。但是官方的例子并没有自动获取ip的代码,所以我们复制小熊仓库获取ip的代码,但是需要稍微修改一下,如下:staticvoidMainThread(void*arg){wifi_connect();dhcp_start(g_lwip_netif);printf("begaintodhcp");OS_Sleep(5);iot_thread_start(NULL);}之后,启动iot的线程,实现平台的登录。第六。经过查找,原来是linux_read函数的问题:在原来的代码中,这个地方的赋值总会出错,导致recv函数直到超时才获取到数据。这个问题很费解,然后想办法绕过这个。题,我们改一下,直接以timeout为参数查询是否有数据:intlinux_read(Network*n,unsignedchar*buffer,intlen,inttimeout_ms){printf("linux_readtimeout_ms=%d\n",timeout_ms);structtimevalinterval={.tv_sec=timeout_ms/1000,.tv_usec=(timeout_ms%1000)*1000};if(interval.tv_sec<0||(interval.tv_sec==0&&interval.tv_usec<=0)){interval.tv_sec=0;interval.tv_usec=100;}//setsockopt(n->my_socket,SOL_SOCKET,SO_RCVTIMEO,(char*)&interval,sizeof(structtimeval));intbytes=0;structpollfdpfd;/*初始化文件描述符。*#POLLPRI对应高优先级数据而#POLLIN对应任何其他数据*thatma/pfd.events=POLLIN|POLLPRI;pfd.revents=0;/*Setthefiledescriptorforpoll.*/pfd.fd=n->my_socket;while(bytes
