基于OpenHarmony的OneNET移动云IoT服务实现 - HarmonyOS技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

老渔翁 关注 私信
[文章]

基于OpenHarmony的OneNET移动云IoT服务实现

一、MQTT协议简介
MQTT(消息队列遥测传输)是一个基于客户端-服务器的消息发布/订阅传输协议,是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。MQTT工作在TCP/IP协议栈上,是为硬件性能低下的远程设备以及网络状况不理想的情况下而设计的发布/订阅型消息协议。由于MQTT协议的轻量、简便、开放的特点使它适用范围非常广泛。在很多情况下,包括受限的环境中使用,广泛应用于物联网(IoT)。MQTT协议在卫星链路通信传感器、医疗设备、智能家居、及一些小型化设备中已广泛使用。
OneNET移动云为国内主流的云平台,提供免费试用的物联网平台,本文使用小凌派RK2206开发板实现基于OpenHarmonyOneNET移动云IoT服务。小凌派RK2206开发板采用瑞芯微高性能、高性价比的RK2206芯片。RK2206芯片是一款低功耗、高集成的MCU无线局域网处理器,它可以应用于不同的应用领域,如物联网、可穿戴设备、家庭自动化、云连接等。小凌派RK2206开发板内置WIFI模块,外部接口丰富,使用一个小凌派RK2206开发板就能够轻松实现MQTT物联网多种应用。
二、硬件电路设计
如图1所示,为小凌派RK2206开发板支持的外部接口,本文使用小凌派RK2206开发板内置的WIFIMQTT服务器通信。
图片1.png

1 小凌派RK2206开发板
三、软件设计主程序设计
iot_onenet_example函数中,通过LOS_TaskCreate函数创建iot_onenet_thread线程并设置线程优先级、线程堆栈大小等参数
  1. static void iot_onenet_example()
  2. {
  3.     unsigned int ret = LOS_OK;
  4.     unsigned int thread_id1;
  5.     TSK_INIT_PARAM_S task1 = {0};

  6.     task1.pfnTaskEntry = (TSK_ENTRY_FUNC)iot_onenet_thread;
  7.     task1.uwStackSize = 10240;
  8.     task1.pcName = "iot_onenet_thread";
  9.     task1.usTaskPrio = 24;
  10.     ret = LOS_TaskCreate(&thread_id1, &task1);
  11.     if (ret != LOS_OK)
  12.     {
  13.         printf("Falied to create iot_onenet_thread ret:0x%xn", ret);
  14.         return;
  15.     }
  16. }
IoT OneNET服务程序设计
iot_onenet_thread函数中,开发板先连接WIFI,通过WIFIOneNET IoT平台通信;WIFI连接成功后,初始化网络,初始化MQTT客户端,设置命令接收回调函数;初始化完成后,成功连接OneNET IoT平台
  1. void iot_onenet_thread()
  2. {
  3.         unsigned int data = 0;

  4.     /*wifi连接*/
  5.         SetWifiModeOn();

  6.     device_info_init(ONENET_INFO_DEVID, ONENET_INFO_PROID, ONENET_INFO_AUTH, ONENET_INFO_APIKEY, ONENET_MASTER_APIKEY);
  7.     onenet_mqtt_init();
  8.     onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb);
  9.        
  10.     while (1)
  11.     {
  12.         onenet_mqtt_upload_digit("data", data++);

  13.         sleep(1);
  14.     }
  15. }
四、编译测试登录OneNET平台
设备连接OneNET平台前,需要做一些准备工作;登录OneNET平台,在平台注册个人用户账号,并且需要实名认证后才可以正常使用。如图2所示,为OneNET平台地址:https://open.iot.10086.cn
图片2.png

2 OneNET平台地址
创建产品
OneNET平台注册个人用户账号并进行登录,登录后进入控制台首页,点击全部产品服务,选择多协议接入,如图3所示。
图片3.png



图3 控制页台面

进入多协议接入页面,点击添加产品按键,添加产品,如图4所示。
图片4.png

图4 多协议接入页面

进入添加产品页面,按照要求填写产品信息,点击确定,如图5所示。
图片5.png

5 添加产品

添加产品成功后,进入产品概况页面,可以看到创建的产品,如图6所示。
图片6.png

6 产品概况
添加设备
点击侧边栏设备列表页面,点击添加设备,如图7所示。
图片7.png

7 添加设备

按照要求填入设备名称和鉴权信息,点击添加设备,如图8所示。
图片8.png
8 添加设备详情页

成功创建设备后,侧边栏点击设备列表,可以查看到创建的设备信息,如图9所示。
图片9.png
9 设备列表页面

点击详情,进入刚添加的设备,可以查看到设备的详细信息,点击添加APIKey,按照要求填写APIKey,如图10所示。
图片10.png
10 添加APIKey
代码设备信息修改
点击侧边栏产品概况页面,查看产品IDMaster-APIkey,如图11所示。
图片11.png
11 产品IDMaster-APIkey

对应修改如下代码中的值,其中,ONENET_INFO_PROID为产品IDONENET_MASTER_APIKEYMaster-APIkey
  1. #define ONENET_INFO_PROID "535158"
  2. #define ONENET_MASTER_APIKEY "RhPzbaX813t=Uyjxb9Cyf=GdXhw="

点击侧边栏设备列表页面,点击进入设备详情页面,查看设备ID详情,如图12所示。
图片12.png

12 设备ID详情

对应修改如下代码的值,其中,ONENET_INFO_DEVID为设备IDONENET_INFO_AUTH为鉴权信息,ONENET_INFO_APIKEYAPIKey
  1. #define ONENET_INFO_DEVID "970784873"
  2. #define ONENET_INFO_AUTH "oneNet2022"
  3. #define ONENET_INFO_APIKEY "E=fejcLgjl2tuyw=Aqy2aBTMRFc="
WIFI连接
修改代码中的SSIDPASSWORD为使用WIFISSID和密匙,用于连接网络,设备通过WIFI访问阿里云IoT平台代码如下所示:
  1. #define SSID                                    "lzdz"
  2. #define PASSWORD                                "12345678"
运行结果
例程代码编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志,串口打印MQTT初始化、连接等日志。
  1. NetworkConnect...
  2. MQTTClientInit...
  3. MQTTConnect...
  4. MQTTSubscribe...

此时登录OneNET平台,点击进入设备详情页面,可以看到设备的当前状态为在线。如图13所示。
图片13.png
13 设备上线OneNET平台

点击进入设备详情页面,点击数据流展示页面,可以查看到开发板上报的数据在不断刷新。
14 数据上报OneNET平台

进入命令下发页面,点击下发命令按键,下发命令,如图15所示。
图片15.png
15 下发命令

选择字符串命令,下发hello到开发板,如图16所示。
图片16.png
16 下发字符串命令

此时,开发板串口会打印接收到的字符串信息,如下所示。
  1. recv data is hello

  • 图片11.png

回帖(2)

一曲作罢

2022-7-27 15:13:37
很棒的教程,感谢分享
1
  • 老渔翁: 很高兴得到您的认同,再加油加油,继续可以和大家一起分享OperHarmony!

玩硬件的女孩纸

2022-7-27 18:08:51
感谢分享
1
  • 老渔翁: 很高兴得到您的认同,再加油加油,继续可以和大家一起分享OperHarmony!

更多回帖

×
发帖