专栏名称: 安信可科技
全球领先的联网模组、智能家居等物联网硬件方案提供商。
目录
相关文章推荐
算法爱好者  ·  ​200 ... ·  昨天  
大众网青岛  ·  恭喜!他们结婚了,网友:多少人的青春回忆! ·  2 天前  
大众网青岛  ·  恭喜!他们结婚了,网友:多少人的青春回忆! ·  2 天前  
九章算法  ·  寻找一个leetcode刷题搭子 ·  2 天前  
九章算法  ·  「九点热评」Meta开始帮对家无偿裁员! ·  2 天前  
算法爱好者  ·  突发!4 个程序员被抓,维护赌博网站每月赚 ... ·  2 天前  
51好读  ›  专栏  ›  安信可科技

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

安信可科技  · 公众号  ·  · 2024-07-01 11:59

正文

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_SWITC H 下,打印开关信息,实现有开关下发就输出信息,然后返回当前开关状态:


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 的接线情况:


颜色 GPIO PWM 通道
红灯 IO12 PWM0
绿灯 IO14 PWM2
蓝灯 IO15 PWM3










请到「今天看啥」查看全文