基于啟航KS_IoT智能開發套件進行智能燈光控制實驗
1.智能燈光控制背景
智能燈光控制在當今的生活中應用非常廣泛,給人們的生活帶來了很多便利,比如路燈能夠自動判斷白天和黑夜來減少人為的進行路燈控制;智能夜燈能夠在夜晚感應人體達到夜晚自動開啟,減少人們半夜摸開關打開燈光的煩惱。不管是什么樣的應用場景,都需要開發人員了解其基本的工作原理,這樣才能不斷的創造更有價值的智能燈光控制。本次實驗主要講述基于軟通動力啟航KS_IoT智能開發套件智能燈光控制,讓開發者在學習過程中找到開發的樂趣,從而創造更多實用的應用場景。
2.軟通動力啟航KS_IoT智能開發套件介紹
軟通動力啟航KS_IoT智能開發套件(以下簡稱:啟航KS)是一款基于海思Hi3861V100芯片設計的高性能物聯網開發套件,支持OpenHarmony。此開發套件充分考慮物聯網感知層設備的多樣性,具有功能豐富、集成度高、性能穩定、應用場景廣、開發成本低、布局合理等特點,支持開發者快速設計相關物聯網的應用產品。
3.智能燈光控制實驗
3.1.實驗對象
對OpenHarmony軟件開發愛好者。
3.2.實驗目的
通過本次實驗開發者對智能燈光的控制會有深刻的了解,同時對整個開發流程也會有更深刻的體驗,在后續的實驗學習中將會更容易上手。
3.3.實驗說明
啟航KS包括1塊核心板和4塊擴展板,本次實驗只需要1塊核心板就能完成,本次實驗核心板涉及到的功能說明如下:
- USB_Type-C:用于供電、代碼下載及調試
- OLED顯示:用于界面顯示
- S1按鍵:用于界面內容選擇控制
- SW1按鍵:智能燈光控制功能開關(按下:開啟該功能,彈起:關閉該功能)
- 光電開關:用于白天和黑夜檢測
- 光照燈:用于實驗現象展示(燈光亮起、燈光熄滅)
核心板功能區分布圖如下:

3.4.實驗現象
實驗前提
- 準備好通動力啟航KS_IoT智能開發套件
- 了解軟通動力啟航KS_IoT智能開發套件_硬件使用指導手冊
- 完成軟通動力啟航KS_IoT智能開發套件_軟件開發環境搭建
- 現象1:智能燈光控制【黑夜模式】
實驗流程

實驗現象

現象2:智能燈光控制【白天模式】
實驗流程

實驗現象

3.5.實驗操作
3.5.1.監測原理
光電開關是用硫化鎘或硒化鎘等半導體材料制成的特殊電阻器,其工作原理是基于內光電效應。光照愈強,阻值就愈低,隨著光照強度的升高,電阻值迅速降低。
3.5.2.硬件接口
光電開關硬件原理:

光照燈硬件原理:

功能說明如下:
光敏傳感器使用的GPIO接口為GPIO06,用跳線帽連接下圖中紅色方框位置IO6。

光電開關聯動光照燈D6,需要按下SW1。當光電開關感應到夜晚時,打開光照燈;當光電開關感應到白天時,關閉光照燈。

3.5.3.智能燈光控制軟件實現
實現流程:

1、光電開關GPIO初始化
設置光電開關IO口功能。
設置光電開關IO口方向為輸入。
- int32_t IssInitPhotoSensitive(void)
- {
- int32_t state = HI_ERR_FAILURE;
- state = hi_io_set_func(PHOTOSENSITIVE_GPIO_NAME, PHOTOSENSITIVE_GPIO_FUNC);
- RUNTIME_ERR_RET_FAIL(state != HI_ERR_SUCCESS, “PHOTOSENSITIVE_GPIO_NAME IoSetFunc error”);
- state = IoTGpioSetDir(PHOTOSENSITIVE_GPIO_IDX, HI_GPIO_DIR_IN);
- RUNTIME_ERR_RET_FAIL(state != HI_ERR_SUCCESS, “PHOTOSENSITIVE_GPIO_NAME IoTGpioSetDir error”);
- return HI_ERR_SUCCESS;
- }
2、光照燈GPIO初始化
設置光電開關IO口功能;
設置光電開關IO口方向為輸出。
- uint32_t IssInitLampLedConfig(void)
- {
- uint32_t state = HI_ERR_FAILURE;
- // set pin function
- state = hi_io_set_func(HI_IO_NAME_GPIO_2, HI_IO_FUNC_GPIO_2_GPIO);
- RUNTIME_ERR_RET_FAIL(state != HI_ERR_SUCCESS, “set GPIO2 func failure,state=0x%x”, state);
- state = IoTGpioSetDir(HI_GPIO_IDX_2, IOT_GPIO_DIR_OUT);
- RUNTIME_ERR_RET_FAIL(state != HI_ERR_SUCCESS, “set GPIO2 dir failure,state=0x%x”, state);
- state = hi_io_set_pull(HI_IO_NAME_GPIO_2, HI_IO_PULL_DOWN);
- RUNTIME_ERR_RET_FAIL(state != HI_ERR_SUCCESS, “set GPIO2 pull failure,state=0x%x”, state);
- return HI_ERR_SUCCESS;
- }
3、獲取光電開關數據
讀取光電數據;將獲取的數據存儲在envInfo->photoSensitive中,方便進行模式判斷。
- int32_t IssReadPhotoSensitive(BoardEnvInfoValue *envInfo)
- {
- int32_t state = HI_ERR_FAILURE;
- IotGpioValue value = HI_GPIO_VALUE0;
- state = IoTGpioGetInputVal(PHOTOSENSITIVE_GPIO_IDX, &value); // 獲取光電數據
- if (state != HI_ERR_SUCCESS) {
- envInfo->photoSensitive = -1;
- }
- RUNTIME_ERR_RET_FAIL(state != HI_ERR_SUCCESS, “PHOTOSENSITIVE_GPIO_NAME IoTGpioSetDir error”);
- envInfo->photoSensitive = value;
- return state;
- }
4、進行模式判斷,并控制控制
獲取光電數據,并進行模式判斷;
黑夜模式:控制顯示內容為“night”, 打開燈光;
白天模式:控制顯示內容為“day”,關閉燈光。
- void IssDrawMenuItem002(BoardEnvInfoValue info, uint8_t new)
- {
- static uint8_t oldState = 0xff;
- if ((info.photoSensitive != oldState) || (new == 1)) {
- oldState = info.photoSensitive;
- IssClearScreenMiddleArea();
- if (info.photoSensitive == IOT_GPIO_VALUE1) { // 黑夜模式
- IssOledShowStr(0, 4, “night”, 1); // 控制顯示內容為“night”
- IssInitLampLedON(); // 打開燈光
- } else { // 白天模式
- IssOledShowStr(0, 4, “day”, 1); // 控制顯示內容為“day”
- IssInitLampLedOff(); // 關閉燈光
- }
- }
- }
4.進階實驗
通過本次實驗開發者對光電開關檢測和光照燈的控制有了深刻的了解,建議開發者在后續學習中,可以根據光照強度來調節光照燈的強弱,同時還可以利用啟航KS的Wi-Fi功能連接HAP,利用HAP開發更智能的燈光控制。
進階實驗:利用Wi-Fi功能遠程喚醒照明燈,實驗現象如下。
