1. 程式人生 > 實用技巧 >#2020徵文-開發板#鴻蒙開發板智慧家居專案

#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