zoukankan      html  css  js  c++  java
  • #2020征文开发板#鸿蒙开发板智能家居项目

    鸿蒙智能家居项目

    目录:

    一、系统介绍 1
    二、功能描述 2

    (1)家电控制功能 2

    (2)配网功能 3

    (3)数据存储功能 3

    (4)MQTT、OneNET接入协议支持 3

    (5)驱动能力 3

    三、代码描述 3

    (1)代码流程 3

    (2)家电控制部分 4

    (3)OneNET初始化部分 5

    (4)LED亮度控制 6

    (5)数据存储 6

    (6)按键处理 7

    一、系统介绍

    本系统硬件采用Hispark WiFi开发板,主控芯片为Hi3861,操作系统为Harmony OS,软件上支持MQTT、OneNET接入协议,驱动开发包括按键驱动、OLED驱动、PWD驱动开发,其它功能模块有NV数据存储、WiFi配网功能。

    整个系统框架如下:

    整个系统主要分为3大部分:

    (1)云平台:这里我使用的是OneNET云平台

    (2)Harmony OS软件开发:在开发板上实现相关功能。

    (3)硬件:使用到的硬件有:LED灯、OLED屏幕、按键。

    整个鸿蒙开发板的软件分为4层:

    (1)应用:实现智能家居的应用逻辑处理部分。

    (2)功能组件:包括MQTT、JSON、数据存储、WiFi配网功能等,为智能家居应用提供关键能力。

    (3)内核:Harmony OS内核提供关键能力。

    (4)驱动:包括PWM驱动、OLED驱动、WiFi驱动、按键驱动等,为硬件控制提供了能力。

    二、功能描述

    (1)家电控制功能

    用户可以通过手机APP或者网页控制开发板的LED亮灭、同时可以控制LED灯的亮度。

    网页界面如下:

    同时还能监控家里的温度情况。

    (2)配网功能

    鸿蒙开发板支持一键配网功能,用户只需要按下user按键,即可进入配网模式。

    (3)数据存储功能

    支持数据存储功能,可以存储配网设置的账户密码等关键数据。

    (4)MQTT、OneNET接入协议支持

    支持MQTT协议、OneNET接入协议,可实现远程控制、远程监测数据。

    (5)驱动能力

    支持PWM驱动、I2C驱动等,可实现外围硬件的驱动能力。

    三、代码描述

    (1)代码流程

    整个代码文件目录如下:同时还能监控家里的温度情况。

    (2)配网功能

    鸿蒙开发板支持一键配网功能,用户只需要按下user按键,即可进入配网模式。

    (3)数据存储功能

    支持数据存储功能,可以存储配网设置的账户密码等关键数据。

    (4)MQTT、OneNET接入协议支持

    支持MQTT协议、OneNET接入协议,可实现远程控制、远程监测数据。

    (5)驱动能力

    支持PWM驱动、I2C驱动等,可实现外围硬件的驱动能力。

    三、代码描述

    (1)代码流程

    整个代码文件目录如下:

    (2)家电控制部分

    对接收到得网络数据进行解析,这里我用得json数据格式。数据解析处理函数如下:

    void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size)
    
    {
    
        cJSON *recvjson;
    
     
    
        printf("recv data is %.*s\n", recv_size, recv_data);
    
     
    
        //进行json解析
    
        recvjson = cJSON_Parse((const char *)recv_data);
    
     
    
     
    
        if(recvjson != NULL)
    
        {
    
            if(cJSON_GetObjectItem(recvjson, "ledSwitch") != NULL)
    
            {
    
                if(cJSON_GetObjectItem(recvjson, "ledSwitch")->valueint == 1 )
    
                {
    
                    //GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
    
                    PwmStart(WIFI_IOT_PWM_PORT_PWM0, led_pwm, 65530);
    
                    led_status = 1;
    
                }else if(cJSON_GetObjectItem(recvjson, "ledSwitch")->valueint == 0 )
    
                {
    
                    //GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
    
                    PwmStart(WIFI_IOT_PWM_PORT_PWM0, 65520, 65530);
    
                    led_status = 0;
    
                }
    
            }
    
            if(cJSON_GetObjectItem(recvjson, "ledLD") != NULL)
    
            {
    
                //获取亮度
    
                led_ld = cJSON_GetObjectItem(recvjson, "ledLD")->valueint;
    
     
    
                led_pwm = 65530 - ((led_ld * 65520) / 100);
    
     
    
                if(led_status == 1)
    
                {
    
                    PwmStart(WIFI_IOT_PWM_PORT_PWM0, led_pwm, 65530);
    
                }
    
     
    
                //
    
     
    
                printf("led_ld is %d, led_pwm is %d \r\n", led_ld, led_pwm);
    
            }
    
            cJSON_Delete(recvjson);
    
        }
    
     
    
        *resp_data = NULL;
    
        *resp_size = 0;
    
    }
    

    查看更多章节

    作者:wx5fd0b40c24952

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

  • 相关阅读:
    Ubuntu 16.04 LTS安装好之后需要做的15件事
    双目立体视觉
    Win7、Ubuntu双系统正确卸载Ubuntu系统
    推荐一个计算机视觉图书:python计算机视觉编程
    深度学习从被监督走向互动
    详细解读神经网络十大误解,再也不会弄错它的工作原理
    不为人知的springboot的技巧
    并发情况下引发的血案
    slor6.6 在linux下的安装以及启动失败解决办法
    springmvc源码阅读2--dispatcherServlet及谈如何找源码入口
  • 原文地址:https://www.cnblogs.com/HarmonyOS/p/14172640.html
Copyright © 2011-2022 走看看