当前位置: 首页 > 科技观察

基于OpenHarmony的阿里云物联网服务实现

时间:2023-03-15 17:28:21 科技观察

了解更多开源请访问:开源基础软件社区https://ost.51cto.com一、MQTT协议简介MQTT(MessageQueuingTelemetryTransport)是一个客户端基于服务器的消息发布/订阅传输协议,是ISO标准(ISO/IECPRF20922)下基于发布/订阅范式的消息协议。MQTT工作在TCP/IP协议栈之上,是一种发布/订阅消息协议,专为硬件性能较低、网络条件不理想的远程设备而设计。由于MQTT协议具有轻量、简单、开放的特点,因此有着非常广泛的应用。它在许多情况下广泛用于物联网(IoT),包括在受限环境中使用。MQTT协议已广泛应用于卫星链路通信传感器、医疗设备、智能家居以及一些小型化设备。阿里云是国内主流的云平台,提供免费试用的物联网平台。上一篇已经详细介绍了使用小灵派RK2206开发板实现基于OpenHarmony的阿里云物联网服务,目前已经成功上线阿里云。本文将在此基础上,继续讲解小灵派RK2206开发板与阿里云平台数据交互的实现。小灵派RK2206开发板采用瑞芯微高性能、高性价比的RK2206芯片。RK2206芯片是一款低功耗、高集成度的MCU无线局域网处理器,可应用于物联网、可穿戴设备、家庭自动化、云连接等不同应用领域。小灵派RK2206开发板内置-在WIFI模块和丰富的外部接口。使用小灵派RK2206开发板可以轻松实现MQTT物联网的各种应用。2、硬件电路设计如图1所示,是小灵派RK2206开发板支持的对外接口。本文使用小灵派RK2206开发板内置WIFI与MQTT服务器通信。图1小灵派RK2206开发板三、软件设计主程序设计。在iot_aliyun_example函数中,通过LOS_TaskCreate函数创建iot_aliyun_thread和message_thread线程,并设置线程优先级、线程栈大小等参数。voidiot_aliyun_example(){unsignedintret=LOS_OK;无符号整数thread_id1;无符号整数thread_id2;TSK_INIT_PARAM_Stask1={0};TSK_INIT_PARAM_Stask2={0};ret=LOS_QueueCreate("队列",MSG_QUEUE_LENGTH,&m_msg_queue,0,BUFFER_LEN);if(ret!=LOS_OK){printf("无法创建消息队列ret:0x%x\n",ret);返回;}task1.pfnTaskEntry=(TSK_ENTRY_FUNC)iot_aliyun_thread;task1.uwStackSize=10240;task1.pcName="iot_aliyun_thread";task1.usTaskPrio=24;ret=LOS_TaskCreate(&thread_id1,&task1);if(ret!=LOS_OK){printf("创建iot_aliyun_thread失败ret:0x%x\n",ret);返回;}task2.pfnTaskEntry=(TSK_ENTRY_FUNC)message_thread;task2.uwStackSize=2048;task2.pcName="消息线程";task2.usTaskPrio=25;ret=LOS_TaskCreate(&thread_id2,&task2);if(ret!=LOS_OK){printf("无法创建message_threadret:0x%x\n",ret);return;}}在阿里云服务编程的iot_aliyun_thread函数中,开发板先连接WIFI,通过WIFI与阿里云物联网平台通信;WIFI连接后为成功,初始化网络,初始化MQTT客户端;初始化完成后,连接阿里云物联网平台成功的程序进入主循环,在消息队列中阻塞等待信息,取出数据上报信息到达阿里云平台。intiot_aliyun_thread(){aliyun_msg_t*app_msg=NULL;无符号整数地址;intret;/*WIFI连接*/SetWifiModeOn();device_info_init(CLIENT_ID,USERNAME,PASSWORD);ret=oc_mqtt_init();if(ret!=LOS_OK){printf("oc_mqtt_init失败ret:%d\n",ret);}while(1){ret=LOS_QueueRead(m_msg_queue,(void*)&addr,BUFFER_LEN,LOS_WAIT_FOREVER);if(ret==LOS_OK){app_msg=addr;switch(app_msg->msg_type){caseen_msg_report:aliyun_deal_report_msg(&app_msg->report);休息;默认值:中断;}免费(app_msg);app_msg=NULL;}else{LOS_Msleep(100);}}}数据处理在程序设计message_thread函数中,每5秒向消息队列写入数据,不断累加处理数据。voidmessage_thread(){aliyun_msg_t*app_msg=NULL;整数数据=0;while(1){app_msg=malloc(sizeof(aliyun_msg_t));if(app_msg!=NULL){app_msg->msg_type=en_msg_report;app_msg->report.data=data++;if(LOS_QueueWrite(m_msg_queue,(void*)app_msg,sizeof(aliyun_msg_t),LOS_WAIT_FOREVER)!=LOS_OK){printf("%sLOS_QueueWrite失败\n",__func__);免费(应用程序消息);}}LOS_Msleep(5000);}}4.编译测试前面几篇文章已经详细介绍了如何登录阿里云、创建产品和添加设备,本文不再赘述。点击AddFunction进入公共实例,点击侧边栏的产品页面,点击AddCustomFunction,如图2。图2添加自定义函数输入自定义函数的名称,点击OK,如图3、图3添加自定义功能详情自定义功能添加成功后,可以查看添加的自定义功能信息,点击发布即可上线,如图4。图4发布自定义功能WIFI连接修改SSID和PASSWORD代码中使用WIFISSID和key连接网络,设备通过WIFI接入阿里云物联网平台。代码如下:#defineSSID"lzdz"#definePASSWORD"12345678"运行结果例程代码编译写入开发板后,按下开发板的RESET键,通过串口软件查看日志,并打印MQTT初始化和通过串口连接等日志。NetworkConnect...MQTTClientInit...MQTTConnect...MQTTSubscribe...现在登录阿里云物联网平台,点击进入设备详情页面,可以看到设备当前状态为在线。如图5所示。图5设备在阿里云物联网平台上线。此时在侧边栏选择设备,点击进入设备详情,选择对象模型数据页面,即可看到小灵派RK2206开发板上报的数据,如图6所示。图6阿里云资料显示了解更多开源信息,请访问:开源基础软件社区https://ost.51cto.com。