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

老渔翁 关注 私信
[文章]

基于OpenHarmony的阿里云IoT服务实现

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

                        图1 小凌派RK2206开发板
三、软件设计
主程序设计
在iot_aliyun_example函数中,通过LOS_TaskCreate函数创建iot_aliyun_thread线程,并设置线程优先级、线程堆栈大小等参数。
  1. void iot_aliyun_example()
    {
        unsigned int ret = LOS_OK;
        unsigned int thread_id1;
        unsigned int thread_id2;
        TSK_INIT_PARAM_S task1 = {0};
        TSK_INIT_PARAM_S task2 = {0};

    ret = LOS_QueueCreate("queue", MSG_QUEUE_LENGTH, &m_msg_queue, 0, BUFFER_LEN);
    if (ret != LOS_OK)
    {
        printf("Falied to create Message Queue ret:0x%xn", ret);
        return;
    }

  •     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("Falied to create iot_aliyun_thread ret:0x%xn", ret);
            return;
        }
    }


    阿里云服务程序设计
    iot_aliyun_thread函数中,开发板先连接WIFI,通过WIFI和阿里云IoT平台通信;WIFI连接成功后,初始化网络,初始化MQTT客户端;初始化完成后,成功连接阿里云IoT平台。
    1. int iot_aliyun_thread()
    2. {
    3.     aliyun_msg_t *app_msg = NULL;
    4.     unsigned int addr;
    5.     int ret;

    6.     /*WIFI连接*/
    7.     SetWifiModeOn();

    8.     device_info_init(CLIENT_ID, USERNAME, PASSWORD);
    9.     ret = oc_mqtt_init();
    10.     if (ret != LOS_OK)
    11.     {
    12.         printf("oc_mqtt_init fail ret:%dn", ret);
    13.     }

    14.     while (1)
    15.     {
    16.             LOS_Msleep(100);
    17.     }
    18. }
    四、编译测试登录阿里云
    设备连接阿里云前,需要做一些准备工作;登录阿里云IoT平台,在平台注册个人用户账号,并且需要实名认证后才可以正常使用。如图2所示,为阿里云IoT平台地址:https://free.aliyun.com/product/iotfreetrail
    图片2.png
    2 阿里云IoT平台地址
    开通物联网服务
       在阿里云IoT平台注册个人用户账号并进行登录,登录后需要开通物联网平台服务,点击立即开通,如图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 产品详情
    添加设备
    点击侧边栏设备页面,点击添加设备,如图10所示。
    图片10.png
    10 添加设备

    按照要求填入产品名称和DeviceName,点击确认,如图11所示。
    图片11.png
    11 添加设备详情页

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

    点击进入刚添加的设备,可以查看到设备的详细信息,如图13所示。
    图片13.png
    13 设备详情

    点击查看MQTT连接参数,查看MQTT连接所需的参数,如图14所示。
    图片14.png
    14 MQTT连接参数
    PC上使用WIN + R键打开命令行CMD,执行如下命令获取接入域名的IP地址。如图15所示,通过ping命令可以查询到MQTT域名的IP地址为47.102.164.191

    ping iot-06z00d4dxawzdv7.mqtt.iothub.aliyuncs.com
    图片15.png
    15 查询MQTT域名IP地址
    对应修改代码中的MQTT_SERVER_IP为查询到PCIP地址47.102.164.191MQTT_SERVER_PORT修改为MQTT服务器端口号1883代码如下所示:
    1. #define MQTT_SERVER_IP                          "47.102.164.191"

      #define MQTT_SERVER_PORT                        1883


    根据MQTT连接参数依次修改代码中的CLIENT_IDUSERNAMEPASSWORD,代码如下所示:
    1. #define PRODUCT_KEY                         "hdm1KcttixC"

      #define DEVICE_NAME                         "aliyun"

      #define CLIENT_ID                     "hdm1KctTIxC.aliyun|securemode=2,signmethod=hmacsha256,timestamp=1655280007303|"

      #define USERNAME                      "aliyun&hdm1KctTIxC"

      #define PASSWORD                      "d41441cfae339f4a09ac2bc600b736db80d3d6694f1d58efc16eb8e812d4d295"


    WIFI连接
    修改代码中的SSIDPASSWORD为使用WIFISSID和密匙,用于连接网络,设备通过WIFI访问阿里云IoT平台代码如下所示:
    1. #define SSID                                    "lzdz"

      #define PASSWORD                                "12345678"


    运行结果
    例程代码编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志,串口打印MQTT初始化、连接等日志。
    1. NetworkConnect...

      MQTTClientInit...

      MQTTConnect...

      MQTTSubscribe...



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



    回帖(1)

    jf_78285980

    2022-6-23 10:21:54
    不错的分享
    1

    更多回帖

    我也要说两句 回帖

    相关经验

    ×

    发帖