• #2020征文开发板# Onenet平台+开发板开关灯控制


    目录:
    Onenet平台EDP配置
    Hi3861开发板准备
    总体测试流程
    源码包

    OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。

    采用Onenet平台:多协议接入-》EDP,通过edp协议完成控制命令的下发(下发开/关灯命令)、数据流信息的上传(灯的开/关状态)等通信流程。

    EDP (Enhanced Device Protocol增强设备协议)是OneNET平台根据物联网特点专门定制的完全公开的基于TCP的协议,可以广泛应用到家居、交通、物流、能源以及其他行业应用中。
    

    整体流程大致如下:

                      1、Onenet平台创建EDP产品、设备、数据流、开关灯应用;
    
                      2、Hi3861开发板连接到EDP设备;
    
                      3、通过Onenet EDP应用下发控制命令(开/关灯);
    
                      4、开发板解析命令做出对应的动作(开/关灯),并且上传灯的状态值,更新数据流信息;
    
                      5、Onenet应用读取数据流的状态值,更新展示;
    

    参考官方文档:https://open.iot.10086.cn/doc/multiprotocol/

    Onenet平台EDP配置

    1.进入onenet平台控制台https://open.iot.10086.cn/console/,选择多协议接入-》EDP;

    2.添加产品led、添加设备device1;

    3.添加数据流,因为我使用的三色灯扩展板,创建3条数据流:redled、greenled、yelloled;

    4.应用管理-》添加应用led;

    5.编辑应用led,添加红绿黄三原色灯的开关,调整属性,红灯的配置如下,EDP命令内容“redled:{V}”(其余以此类推);

    Hi3861开发板准备

    1.移植Onenet edp sdk,官网链接:https://open.iot.10086.cn/doc/multiprotocol/book/develop/edp/device/doc-tool.html;

    移植过程中注意点(附件压缩包中edp_c是我移植好的压缩包):

        1)增加宏定义:_LINUX;
    
        2)可以复用源码自带的cJSON,在//third_party/edp_c/BUILD.gn中包含:"//third_party/cJSON/";
    
        3)强转for循环中的变量为有符号数,在for循环里面,不能用无符号32整形数据作为判断条件;
    
        4)修改宏定义#define BUFFER_SIZE         (0x01<<20)为#define BUFFER_SIZE         1024;本次实验中包字节数较小,默认申请1MB,运行时报错内存溢出;
    
        5)自定义实现assert宏定义,因为编译时报错未找到原因就先自定义实现替代;
    
        6)还有很多定义未使用的变量,类似这种修改“valuestring = valuestring; remain_len = remain_len;”即可;
    

    2.根据sdk中的示例Main.c,编写edp测试源码(附件压缩包中edp_test.c是测试源码);

        1)建立tcp连接,平台EDP监听地址ip:183.230.40.39,port:876;
    
        2)与平台建立EDP连接,可以调用函数EdpPacket* PacketConnect1(const char* devid, const char* auth_key),传入设备ID和APIKey;  
    
        char src_dev[16] = "657055845";
        char src_api_key[64] = "NO5yPB4JzAypKLfXzLx6V0aUxg4=";
    
        EdpPacket* send_pkg;
        /* 利用sdk 中EdpKit.h 中PacketConnect1 方法封包连接协议 */
        send_pkg = PacketConnect1(src_dev, src_api_key);  
        /* 向设备云发送连接请求 */
        int ret = DoSend(sockfd, (const char*)send_pkg->_data, send_pkg->_write_pos);
        if(ret <= 0)
        {   
            printf("Dosend failed.\n");
            return NULL;
        }
        /* 使用完后必须删除send_pkg , 否则会造成内存泄漏 */
        DeleteBuffer(&send_pkg);
    

        3)接收命令请求数据,解析命令,执行开关灯动作;例如:接收到字符串“redled:1”代表红灯开,“redled:0”代表红灯关;
    
    /* 解包 由设备云到设备的EDP协议包, 命令请求消息 */
    UnpackCmdReq(pkg, &cmdid, &cmdid_len, &cmd_req, &cmd_req_len);
    
    ......
    
    /*
       根据解析出的命令,执行灯的开/关
       GPIO_10: RED
       GPIO_11: GREEN
       GPIO_12: YELLOW */
    if(strcmp(cmd_str, "redled") == 0)
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, cmd_val);
    else if(strcmp(cmd_str, "greenled") == 0)
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, cmd_val);
    else if(strcmp(cmd_str, "yellowled") == 0)
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, cmd_val);
    
        4)调用EdpPacket* PacketSavedataSimpleString(const char* dst_devid, const char* input, uint16 msg_id),组装以分号分隔的简单字符串形式,上传数据到平台,用来更新数据流(灯的开/关状态);例如:组装字符串“,;redled,1”代表当前红灯亮,“,;redled,0”代表红灯灭;
    
    /* 打包 设备到设备云的EDP协议包, 存储数据(以分号分隔的简单字符串形式) */
    send_pkg = PacketSavedataSimpleString(NULL, cmd_resp, 0);    //没有转发设备,第一个参数为NULL
    DoSend(sockfd, (const char*)send_pkg->_data, send_pkg->_write_pos);
    DeleteBuffer(&send_pkg);
    
        5)采用AT命令的方式触发edp测试,增加命令“AT+EDPTEST”,方便测试;
    
    const at_cmd_func g_at_edp_func_tbl[] = {
        {"+EDPTEST", 8, HI_NULL, HI_NULL, HI_NULL, (at_call_back_func)at_exe_edp_test_cmd},
    };
    
    void AtEdpExampleEntry(void)
    {
        hi_at_register_cmd(g_at_edp_func_tbl, sizeof(g_at_edp_func_tbl)/sizeof(g_at_edp_func_tbl[0]));
    }
    

    总体测试流程

    1.编译固件,启动开发板,首先是连接wifi,保证网络畅通;
    2.执行AT+EDPTEST命令,连接Onenet平台,连接成功设备显示在线;

    解锁更多章节

    作者:HarryP0tter
    想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

  • 相关阅读:
    Add Two Numbers
    Reverse Linked List II
    Reverse Linked List
    Remove Duplicates from Sorted List
    Remove Duplicates from Sorted List II
    Partition List
    Intersection of Two Linked Lists
    4Sum
    3Sum
    2Sum
  • 原文地址:https://www.cnblogs.com/HarmonyOS/p/14134124.html
Copyright © 2020-2023  润新知