0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

智能家居之旅(7):HomeAssistant开发板的RGB颜色

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2024-07-03 16:39 次阅读

hello,有谁还记得之前小美的视频?当时做了一个RGB灯,并且说了 RGB的一些开发过程。所以说RGB实体很早之前就已经开发好了,只是一直没有写帖子介绍它的用法。今天就给大家介绍一下 RGB 彩灯怎么上HomeAssistant,然后控制Ai-M61开发板的 RGB 灯的颜色,感觉这个项目用来控制家里的灯条就挺不错的。

wKgZomaFDkSAftXLABCGnGpLyrQ663.gif

彩灯实体创建

1.彩灯实体资源启用

彩灯实体在 HomeAssistant 上描述为 Light,HomeAssistant-C 上默认也是不开启的,所以需要在 homeAssistantDevConfig.h 当中把#define CONFIG_ENTITY_ENABLE_LIGHT的值置 1:

wKgaomaFDkSAf-z9AAAUWLY7XDU90.jpeg

2.Light 实体创建

彩灯(Light)实体的创建位置和其他实体一样,就是在 MQTT 连接成功的事件里面,这里就不多说了,需要说明的是,彩灯实体会比其他实体多很多的控制主题,有开关、亮度、颜色等等。HomeAssistant-C 中,默认只给开关功能提供默认的主题,所以在创建实体的时候,除了 name、unique_id 参数之外,还需要给颜色控制灯主题赋值参数,例如:

static ha_lh_entity_t rgb_light = {

.name = "彩灯",

.unique_id = "light_rgb01",

.rgb.rgb_command_topic = "light_rgb01/set",

.rgb.rgb_state_topic = "light_rgb01/state",

};

homeAssistant_device_add_entity(CONFIG_HA_ENTITY_LIGHT, &rgb_light);

HA 设备显示

wKgZomaFDkyAUegxAABen5rzpd472.jpeg

获取 HomeAssistant 的控制指令

在 HomeAssistant-C 当中,暂时定义好了 Light 的三个控制事件:

HA_EVENT_MQTT_COMMAND_LIGHT_SWITCH,//light 灯的开关事件

HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE,//light 灯的 RGB 颜色下发事件

HA_EVENT_MQTT_COMMAND_LIGHT_BRIGHTNESS,//light 灯的亮度数据下发事件

在这里只对

HA_EVENT_MQTT_COMMAND_LIGHT_SWITCH 和 HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE 这两个事件来控制 RGB,在 HomeAssistant 事件回调函数当中(这里的函数名为:ha_event_cb),添加以下内容:

case HA_EVENT_MQTT_COMMAND_LIGHT_SWITCH:

break;

case HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE:

break;

wKgaomaFDkyAEZQiAACwjS6Vxkw84.jpeg

1.读取 HA 的开关控制命令

HomeAssistant 平台的下发开关控制之后,会触发 HA_EVENT_MQTT_COMMAND_LIGHT_SWITCH 事件,所以在

HA_EVENT_MQTT_COMMAND_LIGHT_SWITCH 下,打印开关信息,实现有开关下发就输出信息,然后返回当前开关状态:

case HA_EVENT_MQTT_COMMAND_LIGHT_SWITCH:

LOG_I("<<<<<<<<<< HA_EVENT_MQTT_COMMAND_LIGHT_SWITCH %s", ha_dev->entity_light->command_light->light_state?"ON":"OFF");

homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_LIGHT, ha_dev->entity_light->command_light, ha_dev->entity_light->command_light->light_state);

break;

验证结果

wKgZomaFDlKAGNhOAABREG_yJPw53.jpeg

2.读取 HA 的颜色更新命令

同样的,HomeAssistant 平台设置颜色时,会触发HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE事件,这时就需要在这个事件当中获取颜色 RGB 的颜色值,在这个事件下添加以下内容,把颜色 R,G,B 的值打印出来并同步给 HA:

case HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE:

LOG_I("<<<<<<<<<< HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE,RGB=%d,%d,%d", ha_dev->entity_light->command_light->rgb.red, ha_dev->entity_light->command_light->rgb.green, ha_dev->entity_light->command_light->rgb.blue);

// device_rgb_update_color(ha_dev->entity_light->command_light->rgb.red, ha_dev->entity_light->command_light->rgb.green, ha_dev->entity_light->command_light->rgb.blue);

homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_LIGHT, ha_dev->entity_light->command_light, ha_dev->entity_light->command_light->light_state);

break;

验证结果

wKgaomaFDlKAKxVgAABmhotp-4E55.jpeg

控制 RGB

开发板上的 RGB 是直接由引脚控制,想要实现颜色调节的话,就需要开启 PWM 控制,通过控制红绿蓝三基色来实现调色。先要把控制 RGB 的引脚启动 PWM 功能,先看一下 Ai-M61 开发板 RGB 的接线情况:

颜色GPIOPWM 通道红灯IO12PWM0绿灯IO14PWM2蓝灯IO15PWM3

1.初始化 RGB 引脚

已经知道引脚配置之后,直接在主函数当中初始化 RGB 引脚,在初始化阶段添加以下代码

struct bflb_device_s* gpio;

gpio = bflb_device_get_by_name("gpio");

bflb_gpio_init(gpio, 12, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);

bflb_gpio_init(gpio, 14, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);

bflb_gpio_init(gpio, 15, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);

pwm = bflb_device_get_by_name("pwm_v2_0");

//100Hz

struct bflb_pwm_v2_config_s cfg = {

.clk_source = BFLB_SYSTEM_XCLK ,

.clk_div = 40,

.period = 1000,

};

bflb_pwm_v2_init(pwm, &cfg);

bflb_pwm_v2_channel_positive_start(pwm, PWM_CH0);

bflb_pwm_v2_channel_positive_start(pwm, PWM_CH2);

bflb_pwm_v2_channel_positive_start(pwm, PWM_CH3);

bflb_pwm_v2_start(pwm);

wKgZomaFDlSATHqyAADWSnqUmAg66.jpeg

2.调色函数

因为 R,G,B 的值最高只有 255,对应 PWM 占空比 100%,所以我们在调色的时候,就需要把目标颜色的 RGB 值计算出相对性的占空比,然后赋值给 PWM 占空比控制函数。因为我们使用的 PWM 的频率是1KHz,所以我们在计算占空比的时候,需要 乘以 1000,因为我们就能达到下面这个函数:

void device_rgb_update_color(uint8_t red, uint8_t green, uint8_t blue)

{

uint16_t color_red_period = 1000*red/255;

uint16_t color_green_period = 1000*green/255;

uint16_t color_blue_period = 1000*blue/255;

bflb_pwm_v2_stop(pwm);

bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, 0, color_red_period);

bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH2, 0, color_green_period);

bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, 0, color_blue_period);

bflb_pwm_v2_start(pwm);

}

使用这个函数的时候,只需要把 R,G,B 三个数值按顺序赋值就行了。

3.RGB 的亮灭

有了调色的函数之后,灭掉所有灯,只需要把颜色值全部设置成 0,亮的时候,就把 R,G,B 重新赋值就行了:

//控制RGB

if (!ha_dev->entity_light->command_light->light_state) {

device_rgb_update_color(0, 0, 0);

}

else {

if (ha_dev->entity_light->command_light!=NULL)

device_rgb_update_color(ha_dev->entity_light->command_light->rgb.red, ha_dev->entity_light->command_light->rgb.green, ha_dev->entity_light->command_light->rgb.blue);

}

wKgaomaFDlSAcH-UAAB4hwFrkp059.jpeg

验证结果

因为默认 PWM 为 0,所以烧录之后,灯不会亮,需要设置一下颜色,灯才会亮。

wKgZomaFDlWAb7FoAAtKtvNdC_U288.gif

4.设置颜色

设置颜色就更简单了,只需要把 R,G,B 值传

给 device_rgb_update_color 函数就行。

case HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE:

LOG_I("<<<<<<<<<< HA_EVENT_MQTT_COMMAND_LIGHT_RGB_UPDATE,RGB=%d,%d,%d", ha_dev->entity_light->command_light->rgb.red, ha_dev->entity_light->command_light->rgb.green, ha_dev->entity_light->command_light->rgb.blue);

// device_rgb_update_color(ha_dev->entity_light->command_light->rgb.red, ha_dev->entity_light->command_light->rgb.green, ha_dev->entity_light->command_light->rgb.blue);

homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_LIGHT, ha_dev->entity_light->command_light, ha_dev->entity_light->command_light->light_state);

device_rgb_update_color(ha_dev->entity_light->command_light->rgb.red, ha_dev->entity_light->command_light->rgb.green, ha_dev->entity_light->command_light->rgb.blue);

break;

wKgZomaFDlWAR6joAABdXVFHqf023.jpeg

验证结果

wKgaomaFDlaAESmvAA8ylTPpDHA361.gif

总结

本帖子的内容稍微有点跳了,这要求大家需要熟悉 HomeAssistant-C 库RGB 实体还有一些功能需要完善,比如添加 RGB 设置的默认主题,后面再给大家介绍。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RGB
    RGB
    +关注

    关注

    4

    文章

    785

    浏览量

    58189
  • 智能家居
    +关注

    关注

    1924

    文章

    9388

    浏览量

    182045
收藏 人收藏

    评论

    相关推荐

    智能家居之旅(15):HA传感器采集主板低功耗设计的遭遇

    ):HomeAssistant-C传感器实体使用方法 智能家居之旅7):HomeAssistant开发
    的头像 发表于 09-05 10:27 191次阅读
    <b class='flag-5'>智能家居</b><b class='flag-5'>之旅</b>(15):HA传感器采集主板低功耗设计的遭遇

    机智云ESP8266开发板RGB彩灯控件

    随着智能家居技术的迅猛发展,RGB彩灯控件正逐渐成为现代家庭不可或缺的一部分。在这一潮流中,机智云(Gizwits)的ESP8266开发板RGB彩灯控件以其先进的物联网技术和多样化的灯
    的头像 发表于 08-09 08:10 182次阅读
    机智云ESP8266<b class='flag-5'>开发板</b><b class='flag-5'>RGB</b>彩灯控件

    如何用一块免费的PCB完成2元USB小夜灯控制器?

    使用HomeAssistant-C库接入HomeAssistant 智能家居之旅(6):HomeAssistant-C传感器实体使用方法
    的头像 发表于 07-30 10:33 156次阅读
    如何用一块免费的PCB<b class='flag-5'>板</b>完成2元USB小夜灯控制器?

    智能家居之旅(9):HomeAssistant 的开关实体具象化

    (。・∀・)ノ゙嗨,时隔一个月,又开始关于 HA 的帖子了,前期介绍了一些实体的使用方法,后面的帖子会结合相应的硬件介绍,把实体真正应用起来,方便各位小伙伴在家里自己做一个智能家居。 本文概要
    的头像 发表于 07-08 16:50 207次阅读
    <b class='flag-5'>智能家居</b><b class='flag-5'>之旅</b>(9):<b class='flag-5'>HomeAssistant</b> 的开关实体具象化

    智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 实现点灯

    上一篇我们介绍了MQTT设备如何接入HomeAssistant(打卡智能家居之旅(2):设备接入HomeAssistant的方法),这一篇就给大家讲一下Ai-M61/M62
    的头像 发表于 06-07 10:07 367次阅读
    <b class='flag-5'>智能家居</b><b class='flag-5'>之旅</b>(3):Ai-M61/M62 接入<b class='flag-5'>HomeAssistant</b> 实现点灯

    打卡智能家居之旅(2):设备接入HomeAssistant的方法

    上次我们在安装HomeAssistant的时候(打卡智能家居学习之旅(1):了解HomeAssistant),顺便把MQTT 集成安装好了。 为什么要装MQTT 集成呢?Wi-Fi 设
    的头像 发表于 06-07 09:36 895次阅读
    打卡<b class='flag-5'>智能家居</b><b class='flag-5'>之旅</b>(2):设备接入<b class='flag-5'>HomeAssistant</b>的方法

    打卡智能家居学习之旅(1):了解HomeAssistant

    大家好,说起智能家居,大家会想到什么呢?小安的脑海里就出现了钢铁侠的家:有电子智能管家,能够控制家里的灯、开关等所有电子电器,当人回家的时候自动开灯,并且已经按照设定好时间烧了热水。 但是现实
    的头像 发表于 05-21 09:07 363次阅读
    打卡<b class='flag-5'>智能家居</b>学习<b class='flag-5'>之旅</b>(1):了解<b class='flag-5'>HomeAssistant</b>

    智能家居系统的开发-基于米尔瑞萨RZ/G2UL开发板

    本篇评测由电子工程世界的优秀评测者“Bruceou”提供。1、项目背景智能家居控制系统,是以智能家居系统为平台,家居电器及家电设备为主要控制对象,利用综合布线技术、网络通信技术、自动控制系统、音频
    的头像 发表于 05-17 08:01 797次阅读
    <b class='flag-5'>智能家居</b>系统的<b class='flag-5'>开发</b>-基于米尔瑞萨RZ/G2UL<b class='flag-5'>开发板</b>

    【Longan Pi 3H 开发板试用连载体验】基于 Longan Pi 3H 开发板完成智能家居控制小型项目

    和存储空间显示为4GB+32G,如图 三、项目计划 我的试用项目是基于 Longan Pi 3H 开发板完成智能家居控制小型项目目标如下: 通过 Longan Pi 3H 开发板实现模拟家庭设备控制(如
    发表于 04-02 22:37

    基于FreeRTOS+LVGL V8智能家居仪表盘设计

    用野火启明6M5开发板制作了一个基于 FreeRTOS 和 LVGL V8 的智能家居仪表盘,颜值较高,也可以作为桌面摆件使用
    的头像 发表于 01-22 14:10 3602次阅读
    基于FreeRTOS+LVGL V8<b class='flag-5'>智能家居</b>仪表盘设计

    开源项目!教你如何复刻自平衡赛车机器人、智能家居中控、竞技机器人先进模糊控制器等

    。 在那个年龄,我们没有真正的手表,但我们总是喜欢在纸上画出自己的手表,仿佛它真的能告诉我们时间。 为了弥补童年的遗憾,作者找到了一个智能手表的开源项目——NWatch,并把他移植到了R128开发板
    发表于 12-26 09:17

    你相信光吗?开源一个能进行虚拟光渲交互的全志D1s智能家居中控

    本文所介绍产品demo是在立创开源平台的开源作品**《全志D1s智能家居中控虚拟光渲交互(86盒)》**,项目选用RISC-V核心的全志D1s作为主控进行开发,并通过家庭WIFI内网,实现设备间
    发表于 12-14 15:26

    飞腾派折腾初见成效,HomeAssistant顺利运行!

    ,提升易用性才能更好的使用。我们朋友在搞智能家居,前端时间还跟我沟通了一些关于智能家居控制主机的事情,他代理云起智能设备做智能家装项目,有时候客户会有些设备接入需求,
    发表于 11-09 11:37

    【XR806开发板试用】留言功能开发

    XR806开源鸿蒙开发板是一款基于XR806芯片设计,高度集成WiFi/BLE/常用外设,可供开发者进行方案评估、DIY或小规模产品研发,可广泛应用于智能家居智能楼宇、
    的头像 发表于 10-08 10:58 512次阅读

    智能家居管理系统设计资料

    智能家居管理系统设计(原理图+APP+源代码等)使用51单片机作为主控 提供完整源码 可实现智能家居控制网上下载的资源 侵权删!
    发表于 10-07 08:22