• 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。
2、 巧用eclipes编辑器,官方教程在在Windows下搭建esp32开发环境,打印 “Hellow World”。
3、 认识基本esp32的GPIO接口,开始点亮您的第一盏 LED和中断回调实现按键功能 。
4、体会esp32的强大的定时器功能, 实现定时2s闪烁一盏LED灯。
5、接触实践esp32的pwm宽度脉冲功能, 实现呼吸效果闪烁一盏LED灯。
6、smartConfig和微信airKiss在esp32的实现,一键配网轻松快捷连接路由器。
7、利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。
8、esp32上实现本地 UDP 客户端和服务端角色,在局域网内实现通讯。
9、esp32上实现本地 TCP 客户端和服务端角色,可断线重连原路返回数据。
10、乐鑫esp32 SDK编程利用rmt驱动ws2812七彩灯,实现彩虹渐变效果。
11、入门 乐鑫esp-adf 音频框架开发,esp32造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。
12、开源一个微信公众号airkiss配网esp32以及局域网发现功能的工程,分享一个airkiss配网小工具。
13、esp32 内置 dns 服务器,无需外网访问域名返回指定网页。
14、esp32 sdk编程实现门户强制认证,连接esp32热点之后,自动强制弹出指定的登录界面。
15、认识本地离线语音唤醒识别框架 esp-skainet ,实现较低成本的硬件语音本地识别控制。
16、学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?
17、全网首发,乐鑫esp32 sdk直连京东微联·小京鱼 · IoT开放平台,实现叮咚音响语音智能控制。
18、入门京东微联·小京鱼的控制面板H5开发,读懂vue语法,做自己的控制页面。
19、重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!
20、一篇好文,开发过程中编译esp32固件太大,无法正常启动?教你如何自定义分区表partitions.csv。
21、 esp32蓝牙配网blufi的高度封装,集成简单、使用简单、容易上手,提高开发效率!
22、讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等!
23、安信可 esp32-a1s 音频开发板移植最新 esp-adf 音频框架,小试牛刀如何实现在线文字转语音播放。
25、分享在 esp32 SDK实现冷暖光色温平滑调节的封装,轻松集成到您的项目去。

前言

技术需要沉淀,很久没更新esp32的博文了,下个月的 esp32-s2 就要量产了,据说这是一个全新的芯片。已经在乐鑫 tao宝店铺预售了,我也预了一块,先玩玩吧。后面再给大家写些评论;

最近一个月在忙 TB02 模块的开发,包括使用文档手册,都已经差不多了,感觉泰凌的代码 就是 很烂,一堆宏,学起来吃力,没有C语言基础是入门不了的;(纯个人观点)

做了很多灯具接入各大云平台开发,接触的绝对多大数都是色温调光什么的。于是乎,这种外设是最常用的,所以,有必要给大家或自己以后的项目总结这样的模块,提高开发效率;

一、冷暖光的PWM关系;

我们在买灯具时候,一般看我们的灯支持怎么样的调节,比如只是单色,冷暖色,还是RGB七彩控制的。

一般地,家庭也就单色和冷暖光为多,而 RGB 是那些舞台音乐场景为多。所以,智能家居的灯具涉及,以单色和冷暖光为多,以 冷暖光为例,那些灯具的色温是怎么定义的? PWM 又是如何输出这样的效果呢? 这里,我一一为大家阐述:


2.1、色温的定义

任何一种属性都有单位,比如温度有摄氏度,而色温的单位是 卡尔文 ,简称 K,下面一图说明了:

色温数值越大,看到的效果越冷白;
    
误解:色温越大,就越暖光;

而我们常买的灯具又是如何产生这样的效果呢? 聪明的开发者,采用冷白灯珠和暖光灯具各自产生的亮度不一样,就有了以上的效果!下面是我平时开发中常用的2钟灯珠类型,3.3v即可点亮;


2.2、PWM与指定的色温亮度的计算

既然有2个灯珠同时在亮,各自的亮度不同来调节色温亮度,那么我们好奇的是如何通过 pwm 产生这样的关系呢?

很多人也许会这样说:色温大小就是暖色灯珠的亮度明暗,而亮度大小就是冷白灯珠的亮度明暗,这样的说话是错误的!

对于 PWM 和 色温亮度的计算的公式,博主接触到很多公式,这里以乐鑫开源的为例,如下:

  • color_temperature :用户预想的灯具的色温数值,范围[0,100]
  • brightness :用户预想的灯具的亮度数值,范围[0,100]
  • 计算过程如下,得到的cold_tmpPWM冷灯珠的占空比,warm_tmpPWM冷灯珠的占空比:
    uint8_t warm_tmp = color_temperature * brightness / 100;uint8_t cold_tmp = (100 - color_temperature) * brightness / 100;

看了上面的计算步骤,是否很简单?我们可以假想一下:

  • 效果1 中性光
         入参 color_temperature = 50 ,brightness = 100 ;
         代入公式后得到:warm_tmp:50 ,cold_tmp :50 ;

  • 效果2 最冷光
         入参 color_temperature = 100 ,brightness = 100 ;
         代入公式后得到:warm_tmp:100 ,cold_tmp :0;

  • 效果3 最暖光
         入参 color_temperature = 0,brightness = 100 ;
         代入公式后得到:warm_tmp:0,cold_tmp :100 ;

效果 预想的各路PWM输出 以上公式算出来的PWM输出 对比结果
中性光 2路一样亮度的输出 warm_tmp:50 ,cold_tmp :50 符合
最冷光效果 冷灯珠100亮度,暖灯珠0亮度 warm_tmp:100 ,cold_tmp :0 反了
最暖光效果 冷灯珠 0亮度,暖灯珠100亮度 warm_tmp:0,cold_tmp :100 反了

以上步骤,为啥结论是反了?因为上上图可以看到:色温数值越大表示越冷效果,意味着色温越大,其暖灯珠的PWM高电平占空比越小! 那么我们如何纠正这个错误呢?

这不用我来说吧?把入参的 color_temperature 修改为即可:

color_temperature = 100 - color_temperature;

二、 RGB/HSV

这个应该是最简单的啦!博主读书的时候,经常接触这样的模型转换,下面给大家贴贴转换代码把?

HSV模型转RGB

static esp_err_t light_driver_hsv2rgb(uint16_t hue, uint8_t saturation, uint8_t value,uint8_t *red, uint8_t *green, uint8_t *blue)
{uint16_t hi = (hue / 60) % 6;uint16_t F = 100 * hue / 60 - 100 * hi;uint16_t P = value * (100 - saturation) / 100;uint16_t Q = value * (10000 - F * saturation) / 10000;uint16_t T = value * (10000 - saturation * (100 - F)) / 10000;switch (hi){case 0:*red = value;*green = T;*blue = P;break;case 1:*red = Q;*green = value;*blue = P;break;case 2:*red = P;*green = value;*blue = T;break;case 3:*red = P;*green = Q;*blue = value;break;case 4:*red = T;*green = P;*blue = value;break;case 5:*red = value;*green = P;*blue = Q;break;default:return ESP_FAIL;}*red = *red * 255 / 100;*green = *green * 255 / 100;*blue = *blue * 255 / 100;return ESP_OK;
}

RGB模型转 HSV

static void light_driver_rgb2hsv(uint16_t red, uint16_t green, uint16_t blue,uint16_t *h, uint8_t *s, uint8_t *v)
{double hue, saturation, value;double m_max = MAX(red, MAX(green, blue));double m_min = MIN(red, MIN(green, blue));double m_delta = m_max - m_min;value = m_max / 255.0;if (m_delta == 0){hue = 0;saturation = 0;}else{saturation = m_delta / m_max;if (red == m_max){hue = (green - blue) / m_delta;}else if (green == m_max){hue = 2 + (blue - red) / m_delta;}else{hue = 4 + (red - green) / m_delta;}hue = hue * 60;if (hue < 0){hue = hue + 360;}}*h = (int)(hue + 0.5);*s = (int)(saturation * 100 + 0.5);*v = (int)(value * 100 + 0.5);
}

三、函数说明

  • light_driver_set_hue(uint16_t hue); //设置HSV模型的H

  • light_driver_set_saturation(uint8_t saturation); //设置HSV模型的S

  • light_driver_set_value(uint8_t value); //设置HSV模型的V

  • light_driver_set_color_temperature(uint8_t color_temperature); //设置色温

  • light_driver_set_brightness(uint8_t brightness); //设置俩亮度

  • light_driver_set_hsv(uint16_t hue, uint8_t saturation, uint8_t value); //设置HSV模型

  • light_driver_set_ctb(uint8_t color_temperature, uint8_t brightness); //设置色温亮度

  • light_driver_set_switch(bool status); //设置 开关

四、其他

  • 一般地,不能同时调节 RGB 和 冷暖灯珠的;
  • 具体的使用参考我的demo吧,也欢迎大家留言:
    https://github.com/xuhongv/StudyInEsp32/tree/master/17_light_utils_pwm

另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

  • 玩转esp8266带你飞、加群QQ群,不喜的朋友勿喷勿加:434878850
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!

乐鑫Esp32学习之旅 24 分享在 esp32 SDK实现冷暖光色温RGB/HSV平滑调节的封装,轻松集成到您的项目去。(附带Demo)相关推荐

  1. 乐鑫Esp32学习之旅28 分享在 esp32 SDK实现驱动 Flash W25Q32 的封装,扩大容量存储更多的资源。(开源源码工程)。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...

  2. 乐鑫esp8266学习rtos3.0笔记:分享在 esp8266 C SDK实现冷暖光色温平滑调节的封装,轻松集成到您的项目去。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于C SDK的ESP8266开发技术全系列笔记 一.N ...

  3. 乐鑫Esp32-S2学习之旅① 入门 ESP32-S2 环境搭建 ,分享如何直连苹果智能家居 HomeKit 平台,轻松语音 Siri 控制!

    本系列博客学习由非乐鑫官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于乐鑫ESP32 芯片模组 C SDK二次开发的技 ...

  4. 乐鑫Esp32-S2学习之旅② ESP32-S2 控制 ws2812b 实现五彩斑斓的效果,代码开源!

    本系列博客学习由非乐鑫官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于乐鑫ESP32 芯片模组 C SDK二次开发的技 ...

  5. 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  6. 乐鑫Esp32学习之旅27 带你在Windows10平台下用自带的Linux安装 ESP8266/ESP32 环境,再无需额外安装虚拟机了。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  7. 乐鑫Esp32学习之旅① 爬坑学习新旅程,虚拟机Linux环境搭建esp32环境,打印 “Hellow World”。(2021年6月已更新)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...

  8. 乐鑫Esp32学习之旅 乐鑫 ESP-S2/S3 模组的实现 USB 无线网卡上网,为你的台式机装上无线WiFI上网吧。(附带源码)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...

  9. 乐鑫Esp32学习之旅 安信可 ESP32-Cam 摄像头开发板二次开发 C SDK编程,拍照图片通过有线串口传到上位机PC端。(附带设备端+PC端源码)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...

最新文章

  1. 什么时候使用临时表?
  2. Linux下VTK、ITK的安装及运行 转载
  3. 微信支付 企业转账 小程序发红包 提现 发红包 企业支付等遇到的问题
  4. mii-tool与ethtool的用法详解
  5. python库文件安装_python安装库包出现问题
  6. Linux运维常见问题解决集锦【转】
  7. SpringBoot 2.1.5(37)---SpringBoot 2.1.5 项目启动运行方式
  8. 【刷题】LOJ 6005 「网络流 24 题」最长递增子序列
  9. 《程序是怎样跑起来的》第七章
  10. unity3d 连接mysql_我学院:Unity3D连接MySql数据库的方法
  11. 蓝凌OA前台任意文件读取漏洞利用
  12. 看各路单词APP不顺手 索性自己写一个背单词系统
  13. 阿里云的服务器,网站域名没有备案时为什么不可以访问?
  14. AI之AutoML:autosklearn/Auto-Sklearn(基于scikit-learn库的自动化的机器学习工具)的简介、安装、使用方法之详细攻略
  15. 读书笔记||函数探幽
  16. Raspbian镜像无头烧录
  17. 爬楼梯算法 一个小孩练习爬台阶,一共10级台阶,小孩可以一次向上选择爬1-3级
  18. chrome修复_使用Google的新Chrome主题修复暗模式
  19. 城市场景中自动驾驶车辆基于高精度地图的视觉语义定位
  20. matlab设置坐标轴/字体/颜色

热门文章

  1. SAP-PM设备模块-PM主数据之设备BOM
  2. 我在CSDN的第一篇博客-iOS开发-关于Debug的一些技巧(NSLog方面)
  3. TCP粘包 | 硬核图解
  4. 如何提高员工的忠诚度
  5. SMT/IC贴片元器件封装类型的识别
  6. tools: subl :保存为GBK
  7. 博士申请 | 英国华威大学计算机大数据团队招收数据挖掘方向全奖博士生
  8. 机智云开发平台一键生成小程序,低成本将智能产品快速推向市场
  9. Python中文件操作(IO流)及文件备份
  10. 云原生网络利器--Cilium 总览