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功能远程唤醒照明灯,实验现象如下。