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

    文章

    820

    浏览量

    61522
  • 智能家居
    +关注

    关注

    1942

    文章

    9944

    浏览量

    195516
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【匠芯创D133CBS KunLun Pi开发板试用体验】1、开发板开箱及介绍

    、音频、显示、调试接口等,方便用户查找和连接: 总结 本次评测的D133CBS KunLun Pi 开发板集成度高,接口丰富,适合工业控制、智能家居等多种应用场景。开箱体验良好,配套资源齐全,便于开发者快速上手和功能验证,是一
    发表于 09-05 13:49

    如何快速开发符合Matter标准的智能家居设备?

    Matter是由亚马逊、苹果、谷歌等国际生态巨头携手CSA联盟(原Zigbee联盟)针对智能家居行业开发的一种开源性的互操作标准,其允许运行在不同通信协议下的、不同类别及品牌的智能家居设备能在同一
    的头像 发表于 08-07 17:35 2221次阅读
    如何快速<b class='flag-5'>开发</b>符合Matter标准的<b class='flag-5'>智能家居</b>设备?

    树莓派 Zero 2 W 是开启智能家居生活的理想之选!

    想尝试智能家居自动化,又不想花费太多?树莓派Zero2W或许正是你开启智能家居之旅所需的理想设备。小板子大潜力想打造一个智能家居?这想法超棒!一旦掌握了技巧,自动化控制灯光、插座、传感
    的头像 发表于 06-24 16:24 541次阅读
    树莓派 Zero 2 W 是开启<b class='flag-5'>智能家居</b>生活的理想之选!

    ESP32-C3开发板全面支持小智AI!烧录实战指南来了!

    本文将详细解析基于乐鑫ESP32-C3芯片的ZXAIEC43开发板烧录“小智”AI语音系统的全流程。该方案代码完全开源,支持深度定制开发,适用于智能玩具、潮玩手办及智能家居控制等多元场
    的头像 发表于 06-13 18:01 3460次阅读
    ESP32-C3<b class='flag-5'>开发板</b>全面支持小智AI!烧录实战指南来了!

    Matter 智能家居的通用语言

    企业正在测试 134 种独特的 Matter 产品。 在消费者对智能家居设备无缝互操作性需求的推动下,Matter的广泛采用将吸引更多的开发者。
    发表于 05-19 15:35

    明远智睿SSD2351开发板智能家居智能核心

    随着科技的不断发展,智能家居逐渐走进人们的生活,为人们带来更加便捷、舒适、智能的生活体验。明远智睿的SSD2351开发板作为智能家居系统的智能
    发表于 05-07 18:59

    探秘明远智睿SSD2351开发板在HMI领域的独特魅力

    。 SSD2351开发板的四核1.4GHz处理器具备强大的图形处理能力,能够流畅地运行各种复杂的HMI界面。无论是绚丽的动画效果,还是高清的图像显示,都能完美呈现。在工业控制、智能家居等领域的HMI应用中,用户可以
    发表于 04-30 18:15

    Linux文件系统打包及镜像制作,触觉智能RK3562开发板演示

    本文介绍Linux开发板文件系统打包及镜像制作的方法,演示Linux文件系统打包及镜像制作,适用于想将配置好的系统环境打包成镜像批量烧录。触觉智能RK3562开发板演示,搭载4核A53处理器,主频
    的头像 发表于 04-28 16:45 766次阅读
    Linux文件系统打包及镜像制作,触觉<b class='flag-5'>智能</b>RK3562<b class='flag-5'>开发板</b>演示

    智能家居Mesh组网方案:实现智能化生活的无缝连接NRF52832

    随着科技的不断进步,智能家居智能家电已经渗透到我们生活的方方面面。然而,由于产品种类的增多和商家的众多,用户在使用智能家居产品时往往会感到困惑和不便。在这样的背景下,如何实现全屋各个单品之间的互通
    发表于 04-15 14:07

    明远智睿 SSD2351 开发板:开启创新开发之旅

    在当今数字化时代,嵌入式开发技术日新月异,各种开发板层出不穷。而明远智睿的 SSD2351 开发板,凭借其独特的优势,成为了众多开发者开启创新开发
    的头像 发表于 03-31 17:21 957次阅读

    重大突破?这个系统,让智能家居生态屏障土崩瓦解

    Zigbee、蓝牙、WiFi、LAN。今天我要给大家带来一份超有趣的教程,让你用树莓派、HomeAssistant、小米设备和HomeKit打造属于自己的智能家居
    的头像 发表于 03-29 09:43 1505次阅读
    重大突破?这个系统,让<b class='flag-5'>智能家居</b>生态屏障土崩瓦解

    【幸狐Omni3576边缘计算套件试用体验】安装homeassistant的体验记录

    一.前言HomeAssistant介绍:Home Assistant(简称 HA)是一款开源的智能家居集成平台,具有以下核心特性: 跨平台支持 支持接入5000+种智能设备(Zigbee
    发表于 03-19 11:58

    智能家居项目设计

    智能家居,内涵多个模块,板子电路和PCB设计
    发表于 03-14 17:54 6次下载

    【贝启科技BQ3568HM开源鸿蒙开发板深度试用报告】2 - 智能家居中控屏界面设计:打造便捷的家居控制体验

    引言 上个帖子介绍了贝启科技BQ3568HM开源鸿蒙开发板的简单情况,今天进行正式的软件开发。 在智能家居日益普及的今天,一个直观、易用的中控屏界面对于用户来说至关重要。今天,我将向大家介绍我所完成
    发表于 01-24 16:11

    瑞芯微开发板/主板Android配置APK默认开启性能模式方法

    本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU
    的头像 发表于 01-17 15:32 1091次阅读
    瑞芯微<b class='flag-5'>开发板</b>/主板Android配置APK默认开启性能模式方法