智能家居之旅(7):HomeAssistant开发板的RGB颜色
hello,有谁还记得之前小美的视频?当时做了一个RGB灯,并且说了 RGB的一些开发过程。所以说RGB实体很早之前就已经开发好了,只是一直没有写帖子介绍它的用法。今天就给大家介绍一下 RGB 彩灯怎么上HomeAssistant,然后控制Ai-M61开发板的 RGB 灯的颜色,感觉这个项目用来控制家里的灯条就挺不错的。
彩灯实体创建
1.彩灯实体资源启用
彩灯实体在 HomeAssistant 上描述为 Light,HomeAssistant-C 上默认也是不开启的,所以需要在 homeAssistantDevConfig.h 当中把 #define CONFIG_ENTITY_ENABLE_LIGHT 的值置 1:
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 设备显示
获取 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;
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;
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;
验证结果
控制 RGB
开发板上的 RGB 是直接由引脚控制,想要实现颜色调节的话,就需要开启 PWM 控制,通过控制红绿蓝三基色来实现调色。先要把控制 RGB 的引脚启动 PWM 功能,先看一下 Ai-M61 开发板 RGB 的接线情况:
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);
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);
}
验证结果
因为默认 PWM 为 0,所以烧录之后,灯不会亮,需要设置一下颜色,灯才会亮。
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;
验证结果
总结
本帖子的内容稍微有点跳了,这要求大家需要熟悉 HomeAssistant-C 库RGB 实体还有一些功能需要完善,比如添加 RGB 设置的默认主题,后面再给大家介绍。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由中国颜值的半壁江山转载自安信可科技 微信公众号,原文标题为:智能家居之旅(7):HomeAssistant开发板的RGB颜色,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
Ai-BS21系列烧录指导——开发板or模组
本篇以Ai-BS21-32S_Kit为例指导烧录固件,这是由深圳市安信可科技有限公司开发的蓝牙星闪开发板。该模块核心处理器芯片Hi2821是一款高集成2.4GHzSoCBLE&SLE芯片,支持BLE5.4/SLE1.0,集成RF电路,RF包含功率放大器PA、低噪声放大器、TX/RXSwitch、集成电源管理等模块,支持1M/2M/4M3种带宽,最大支持12Mbit/s速率。
打卡智能家居之旅(5):Ai-WB2 使用HomeAssistant-C库接入HomeAssistant
之前所有写的《智能家居之旅》帖子代码都是基于Ai-M61来开发的,不少大佬跟我反馈说:Ai-M61/62只用来连接MQTT太浪费资源了,Ai-WB2更具性价比!我觉得有道理,所以昨天就把HomeAssistant-C 给做了一次大改,提升了耦合性,目前仓库的master分支也可以支持Ai-WB2了,现在,跟着我来试试吧!
用Ai-WB2开发板做智能家居全彩LED小夜灯
介绍用Ai-WB2开发板做智能家居全彩LED小夜灯的方法及技术要求。
低能耗、低时延、快速度,星闪开发板Ai-BS21-32S-Kit更多场景应用,邀您一起来探索!
万众期待的星闪开发板上架了!Ai-BS21-32S-Kit 低延迟,高效率!话不多说!先回顾下基本参数信息。
安信可AiPi-BW-LEDC小安派基于瑞昱BW20设计,带有灯带控制程序
这次带来的小安派是基于安信可最新发布的BW20-12F模组设计的AiPi-BW-LEDC。BW20-12F是基于瑞昱RTL8711芯片设计的模组(2.4G+5.8G双频WiFi模块,自带BLE5.0蓝牙,可支持Wi-Fi Mesh 组网),BW20系列的SDK是开源的,大家有需要可以在github上获取SDK进行二次开发。AiPi-BW-LEDC中开发了一个灯带控制程序,可以对灯带进行控制和调节。
【IC】安信可最新发布Ai-M61和Ai-M62两款WiFi 6+BLE5.3+X模组,最高主频可达320M
通过长期细致深入的研发设计及反复打磨,安信可重磅新品WiFi 6+BLE5.3+X模组——Ai-M61和Ai-M62两款系列模组惊艳亮相,力求为用户带来性能和体验的全面提升!Ai-M61&Ai-M62系列分别搭载BL618、BL616芯片作为处理器,支持Wi-Fi 802.11b/g/n/ax协议和BLE 5.3协议以及丰富的外围接口。
高性能开发板Ai-M61-32S-Kit助力Wi-Fi6+BLE5.3模组
Ai-M61-32S-Kit是针对Ai-M61-32S模组设计的开发板。Ai-M61-32S是由深圳市安信可科技有限公司开发的Wi-Fi6+BLE5.3模组,该模组搭载BL618芯片作为核心处理器,支持Wi-Fi 802.11b/g/n/ax协议和BLE协议,支持Thread协议。
星闪开发板or模组烧录指导
Ai-BS21-32S_Kit是由安信可科技开发的蓝牙星闪开发板。该模块核心处理器芯片Hi2821是一款高集成2.4GHzSoCBLE&SLE芯片,支持BLE5.4/SLE1.0,集成RF电路,RF包含功率放大器PA、低噪声放大器、TX/RXSwitch、集成电源管理等模块,支持1M/2M/4M3种带宽,最大支持12Mbit/s速率。
Ra-09系列开发板入门教程,标准LoRaWAN协议对接国外 TTN LoRaWAN 开源服务器
本文章将说明如何在TTN中创建应用与节点设备,配置安信可Ra-09模块连接至TTN服务,实现数据发送与接收。
安信可星闪开发板与西门子PLC通信的应用探索
星闪技术作为一项中国原生的、具有竞争力的近距离无线通信技术,通过技术创新和标准体系建设,打破了传统蓝牙和Wi-Fi在特定应用领域的一些局限性,为物联网、车联网、工业互联网等场景带来了更高性能、更安全、更具成本效益的无线连接解决方案。随着相关产品的不断推出和生态系统的持续完善,星闪技术有望在全球范围内产生深远影响,成为未来短距离无线通信领域的重要力量。
安信可推出基于Ai-M61-32S的屏幕驱动开发板,支持2.8/3.5寸等30Pin SPI显示屏
小安派-DSL(AiPi-DSL) 是安信可开源团队专门为 Ai-M61-32S 设计的一款屏幕驱动开发板,支持 2.8/3.5 寸等 30Pin SPI 显示屏、2.4 寸及 1.28 寸等 18Pin SPI 显示屏。
零基础开发小安派-Eyes-S1【入门篇】——工程文件架构
AiPi-Eyes-S1是安信可开源团队为Ai-M61-32S模组设计的开发板,支持WiFi6和BLE5.3,具备丰富的外设接口。开发板集成了多种接口,包括SPI屏幕、DVP摄像头、ES8388音频编解码器,并预留TF卡座和USB接口。开发资源包括入门教程、工程文件说明和烧录配置文件,适合初学者快速上手。
打开智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 实现点灯
上一篇我们介绍了MQTT设备如何接入HomeAssistant,这一篇就给大家讲一下Ai-M61/M62 开发板或者模组怎么通过编程来接入HomeAssistant。这次的帖子会从开发环境搭建开始讲,一直到HomeAssistant 控制Ai-M61-Kit 开发板的蓝灯,会有点长,请耐心看完。
【外设移植】基于AI-WB2-32S开发板的SG90舵机控制案例
介绍Ai-WB2模组驱动舵机控制(SG90)的技术要求和方案。
电子商城
现货市场
服务
可加工PCB板层数1~40,最小线宽/间距内层: 2.5/3mil (H/H OZ base copper);最小线宽/间距外层: 3/3mil (H/H OZ base copper);成品交货尺寸范围:10 * 10mm~570 * 1200mm。板厚范围:0.4mm-10mm。支持通孔板、HDI板、柔性板、刚柔结合板打样、小批量及批量生产。
最小起订量: 1 提交需求>
可加工PCB层数:1-30层;板材类型:FR4板/铝基板/铜基板/刚扰结合板/FPC板/高精密板/Rogers高频板;成品尺寸:5*5mm~53*84cm;板厚:0.1~5.0mm。
最小起订量: 1 提交需求>
登录 | 立即注册
提交评论