#2020征文-开发板#鸿蒙开发板智能家居项目 原创 精华

hardfault
发布于 2020-12-21 19:51
浏览
6收藏

鸿蒙智能家居项目

 

一、系统介绍 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

 

二、功能描述 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配网功能。

整个系统框架如下:

  #2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

整个系统主要分为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灯的亮度。

网页界面如下:

  #2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

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

 

(2)配网功能

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

 

(3)数据存储功能

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

 

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

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

 

(5)驱动能力

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

 

三、代码描述

(1)代码流程

整个代码文件目录如下:

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

代码流程图如下:

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

 

 

(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;

}

 

 

(3)OneNET初始化部分

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

(4)LED亮度控制

这里LED的亮度我采用PWM控制的方式,PWM初始化代码如下:

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

控制亮度的代码部分:

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

 

(5)数据存储

这里我使用NV来存储配网时的账户和密码,代码如下:

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

 

(6)按键处理

这里我使用的是中断触发方式来相应按键。

中断注册:

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

当用户按下按键时,立即启动配网功能,中断响应函数:

#2020征文-开发板#鸿蒙开发板智能家居项目 -鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2020-12-22 09:42:57修改
2
收藏 6
回复
举报
3条回复
按时间正序
/
按时间倒序
张荣超_九丘教育
张荣超_九丘教育

很棒啊,赞!

回复
2020-12-21 20:22:29
鸿蒙开发者社区官方账号
鸿蒙开发者社区官方账号

征文大赛正在火热进行中,楼主这么优秀的文章真的不考虑参加吗?

 

例如这篇在标题开头添加“#2020征文-开发板#“,
再找到相应的专栏位置投稿,


就可以参加比赛啦!

 

详细步骤可以点击链接https://harmonyos.51cto.com/posts/1940进行了解

用更多的文章来赢取更多的奖励和人气吧!期待楼主后续的活跃表现。

回复
2020-12-22 09:35:47
wx660e90fc691cb
wx660e90fc691cb

作者源码开源吗,想求一下源码和教程学习。


回复
2024-4-7 01:23:53
回复
    相关推荐