2020征文-開發板 鴻蒙開發板智能家居項目
https://harmonyos.51cto.com/#zz
鴻蒙智能家居項目
一、系統介紹
本系統硬件采用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)家電控制部分
對接收到得網絡數據進行解析,這里我用得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初始化部分

(4)LED亮度控制
這里LED的亮度我采用PWM控制的方式,PWM初始化代碼如下:

控制亮度的代碼部分:
(5)數據存儲
這里我使用NV來存儲配網時的賬戶和密碼,代碼如下:

(6)按鍵處理
這里我使用的是中斷觸發方式來相應按鍵。
中斷注冊:

當用戶按下按鍵時,立即啟動配網功能,中斷響應函數:

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任
https://harmonyos.51cto.com/#zz