更多信息请访问:Harmonyos技术社区https://harmonyos.51cto.com,与华为官方共同打造的IoT开发板套件实现了华为云物联网平台的物联网设备连接,设备与云端的双向消息通信,设备管理,远程控制和监控等功能。准备工作1.搭建开发环境和编译环境。参考官方文档,这里不再赘述。参考链接如下:Window开发环境Ubuntu编译环境2、OpenHarmony2.2源码源码获取,参考:源码获取说明3、LYEVK-3861物联网开发板套件LYEVK-3861开发板4、MQTT依赖库MQTT协议:使用三方MQTT协议库作为底层支持,嵌入式版本是一个小而可用的c实现库。稍加移植和修改,cJSON就可以在OHOS系统上使用:openHarmony2.2L0版本的内核本身就支持cJSON,不需要移植。介绍LYEVK3861开发板与华为云物联网平台通过MQTT协议对接。所用模块包括主控板、主板、可燃气体感应板。设备启动后会自动连接热点,获取网络时间,显示上次上报的温度数据,然后定时上报温度数据。初始化接口设备信息voiddevice_info_init(char*client_id,char*username,char*password);设置设备信息,调用oc_mqtt_init()前设置设备信息。华为物联网平台初始化为oc_mqtt_init(void);华为物联网平台初始化函数,需要在使用华为物联网平台功能前调用。影子数据回调响应函数voidmqtt_shadow_rsp_cb(void(*cmd_rsp_cb)(uint8_t*recv_data,size_trecv_size,uint8_t**resp_data,size_t*resp_size));影子数据回调响应函数,设备接入华为IoT平台后,获取设备最新报告属性值的回调响应函数。数据处理接口设备消息上报intoc_mqtt_profile_msgup(char*deviceid,oc_mqtt_profile_msgup_t*payload);表示当设备无法按照产品模型中定义的属性格式上报数据时,可以调用该接口将设备的自定义数据上报给平台,平台会将设备上报的消息转发给华为云的应用服务器或其他云服务进行存储和处理。设备影子数据获取到c_mqtt_profile_getshadow(char*deviceid,oc_mqtt_profile_shadowget_t*payload);设备端调用,获取最新上报给平台的数据。设备将属性数据报告到oc_mqtt_profile_propertyreport(char*deviceid,oc_mqtt_profile_service_t*payload);用于设备根据产品模型定义的格式向平台上报属性数据。属性上报和消息上报的区别参见网关批量上报属性数据的消息通信说明:intoc_mqtt_profile_gwpropertyreport(char*deviceid,oc_mqtt_profile_device_t*payload);用于批量设备向平台上报属性数据。网关设备可以通过该接口同时上报多个子设备的属性数据。属性设置的响应结果为c_mqtt_profile_propertysetresp(char*deviceid,oc_mqtt_profile_propertysetresp_t*payload);属性查询响应结果为c_mqtt_profile_propertygetresp(char*deviceid,oc_mqtt_profile_propertygetresp_t*payload);PASSWORD,访问这里,填写注册设备后生成的设备ID(DeviceId)和密钥(DeviceSecret),生成连接信息(ClientId,Username,Password)。WifiConnect("CBG","chinasoft");device_info_init(CLIENT_ID,USERNAME,PASSWORD);oc_mqtt_init();mqtt_shadow_rsp_cb(ocShadowCallback);//注册推送数据的设备影子回调函数上传数据时需要组装数据首先,然后通过oc_mqtt_profile_propertyreport报告数据。代码示例如下:获取影子数据华为物联网平台支持获取设备影子数据。先拼接请求,通过oc_mqtt_profile_getshadow发送请求。收到响应后,会将接收到的数据通过回调函数发送到队列中,读取队列消息后进行后续处理。代码示例如下:staticvoidgetShadowMsg(void){intret;oc_mqtt_profile_shadowget_tpayload;payload.object_device_id=USERNAME;charrequest[10]={0};sprintf(request,"R%d",rand()%10000);payload。request_id=request;payload.service_id="wktmp";ret=oc_mqtt_profile_getshadow(CLIENT_ID,&payload);}voidocShadowCallback(uint8_t*recv_data,size_trecv_size,uint8_t**resp_data,size_t*resp_size){app_msg_t*app_msg;intret=0;app_msg=malloc(sizeof(app_msg_t));app_msg->msg_type=en_msg_shadow;app_msg->msg.cmd.payload=(char*)recv_data;app_msg->msg.cmd.len=recv_size;ret=osMessageQueuePut(mid_MsgQueue,&app_msg,0U,0U);if(ret!=0){free(recv_data);}*resp_data=NULL;*resp_size=0;}在编译调试登录华为云平台前,需要在该平台。插入IoTDA并单击立即使用。创建产品时,在设备接入页面可以看到概览界面,显示了华为云平台接入的协议和域名信息,根据需要选择MQTT通信需要的信息。接入协议(端口号):MQTT1883在侧边栏选择产品页面,点击右上角“创建产品”选择所属资源空间,并根据需要填写产品名称,选择MQTT协议,数据格式为JSON,并填写厂商名称,选择行业和添加设备类型,点击右下角“确定”如图:创建完成后,选择“查看详情”,在产品页面会自动生成刚刚创建的产品,点击“查看”可以查看创建的具体信息。在商品详情页点击自定义模型,在弹出页面添加新服务,自定义服务ID:点击服务ID下拉菜单下的“添加属性”,填写相关信息:注册设备并点击侧边栏的“设备”,进入设备页面,点击右上角的“注册设备”,勾选对应的资源空间并选择刚刚创建的产品,注意设备认证类型选择“secretkey”,按要求填写secretkey。记录设备ID和设备key注册后,在设备页面点击“AllDevices”可以看到新建的设备,设备处于inactive状态。设备绑定连接平台前需要获取CLIENT_ID、USERNAME、PASSWORD,访问这里,填写注册设备时生成的设备ID和设备密钥生成连接信息(ClientId、Username、Password),并修改对应的pos代码的离子。网络调试示例代码编译烧录后,按下开发板上的RESET键,通过串口助手查看日志。首先会打印上次上报的温度信息,然后打印当前的温度信息。Todayis:Wes,preTempis:32Todayis:Wes,Tempis:28平台上的设备显示为在线,点击设备右侧的“查看”进入设备详情页面,可以看到上报的数据。在华为云平台的消息跟踪页面,可以查看到平台与设备的数据交互:设备重连请求影子数据时,平台下发的信息如下:设备只需要回调即可处理响应。综上所述,以上就是一个比较简单的设备连接云端和云端交互的过程。设备与云端的交互方式还有很多,比如直接从平台下发控制命令,或者通过第三方应用通过平台下发设备控制命令。以上都可以自己阅读官方文档和相关功能来实现。购买开发板LYEVK-3861开发板套件:https://developer.huawei.com/consumer/cn/market/prod-detail?productId=8b2d9f0cd85445e0ace0410736977695&shopId=641dc12fabac47cdab3f03e7a更多信息请访问:与华为鸿蒙科技共建社区https://harmonyos.51cto.com
