乐鑫esp8266学习rtos3.0笔记第9篇:整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。(附带demo)


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

1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。
2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。
3、 Esp8266之 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。
4 、Esp8266之 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。
5 、Esp8266之 原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。
6 、Esp8266之 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。
7 、Esp8266之 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。
8、 Esp8266之 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。
9、 Esp8266进阶之路第1篇: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
10、 Esp8266进阶之路第2篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
11、 Esp8266进阶之路第3篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
12、 Esp8266进阶之路第4篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
13、 Esp8266进阶之路第5篇: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
14、 Esp8266进阶之路第6篇: esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
15、 Esp8266进阶之路第7篇: esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、 Esp8266进阶之路第8篇: esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、 Esp8266进阶之路第9篇: esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 Esp8266进阶之路第10篇: esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 Esp8266进阶之路第11篇esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
20、 Esp8266进阶之路第12篇深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。
21、 Esp8266进阶之路第13篇浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
22、 Esp8266进阶之路第14篇esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。。
23、 Esp8266进阶之路第15篇再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
24、 Esp8266进阶之路第16篇渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
25、 Esp8266进阶之路第17篇深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
26、 Esp8266进阶之路第18篇RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
27、 Esp8266进阶之路第19篇跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
28、 Esp8266进阶之路第20篇教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
29、 Esp8266进阶之路第21篇百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。
30、 Esp8266进阶之路第22篇乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
31、 Esp8266进阶之路第23篇当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。
32、 Esp8266进阶之路第24篇细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。
33、 Esp8266进阶之路第25篇如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
34、 Esp8266进阶之路第26篇乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。
35、 Esp8266进阶之路第27篇乐鑫esp8266芯片借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。
36、 Esp8266学习rtos3.0笔记第1篇认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译?
37、 Esp8266学习rtos3.0笔记第2篇你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。
38、 Esp8266学习rtos3.0笔记第3篇 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。
39、 Esp8266学习rtos3.0笔记第4篇 带你捋一捋市面上的微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。
40、 Esp8266学习rtos3.0笔记第5篇 基于乐鑫idf框架,研究出超稳定、掉线重连、解决内存泄露问题的Mqtt框架!支持esp8266和esp32!
41、 Esp8266学习rtos3.0笔记第6篇 esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网基础之上增加dns域名解析!
42、 Esp8266学习rtos3.0笔记第7篇 我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们!
43、 Esp8266学习rtos3.0笔记第8篇 esp8266-12模块基于rtos3.0版本扫描周围获取附近可用的 Wi-Fi 热点路由器信息,同样适合esp32。
44、 Esp8266学习rtos3.0笔记第9篇 整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。。


  • 很多人怎么联系我一起学习进步,下面打个小小公告和干货无偿分享:

玩转esp8266带你飞、加群付费QQ群,提高门槛,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32

在这里插入图片描述


一、前言;


     整理上半年有关于 esp8266 rtos3.0 的一些项目后,发现有几个较为常用的外设封装,看到群里的人还在开发,我也就分享出来了;

     代码基本不是自己敲的,但是很多是加入了自己的元素,以及封装了一下子,使用起来很舒服,博客很多demo自己辛苦整理出来的,我不想有些人伸手党一样地拿去,知识是付费的,也是有人看不惯于是来喷我,呵呵。

     所以,往后的这些博文大家支持的话,点个赞就可以了!有收费的纯属是手工费或脑力费,觉得不值,就 “ALT + F4 ” 关闭网页即可!


二、站在巨人的肩膀上;


     这句话,我最早应该在大学时候的一本书看到的!讲到的是很多知识和框架都是前辈已经整理好了,并不用自己辛辛苦苦地敲写各种协议,各种封装,这大大提高我们的开发效益;

     打个比方,我们在收割稻谷的时候,传统的都是人工收割,我记得小时候拉着手推车去拉稻谷!现在不一样了,有一条龙服务了,有人专门做稻谷收割机,直接才操作机器就可以了,不用大费心机劳力去收割,这让我们很舒服而且效率很快;

     上面的比方,那些专门做稻谷收割机的人就是 巨人,我们就是站在他们的肩膀上收取稻谷,中间的过程我们不必理会,这使得我们的效率大大提供;当然了,你得付费;

     说了这么多,我无非是要告诉大家一个道理:我们开始学习时候不需要理会底层的东西,先统筹下巨人所研究出来的成功实践,再慢慢细嚼其中的原理精华。


三、按键驱动,长按短按;


     源代码从官网京东微联工程中提取,我已经整理好成组件,并且下面只分析如何使用:

  1. 首先得初始化拿到句柄,传入参数 GPIO,下降沿触发;
  2. 定义短按回调函数,注意有三个选项:BUTTON_PUSH_CBBUTTON_RELEASE_CBBUTTON_TAP_CB ,注意事项我在代码使用注释提到了。当然,最好你是亲自实践下你就知道了!
  3. 定义长按回调函数,我一般是设置2s长按;

     下面是全部使用代码;



#define BUTTON_GPIO 4

//短按函数
static void ButtonShortPressCallBack(void *arg)
{
    ESP_LOGI(TAG, "ButtonShortPressCallBack  esp_get_free_heap_size(): %d ", esp_get_free_heap_size());
}
//长按函数
static void ButtonLongPressCallBack(void *arg)
{
    ESP_LOGI(TAG, "ButtonLongPressCallBack  esp_get_free_heap_size(): %d ", esp_get_free_heap_size());
}

/**
 * @description: 按键驱动
 * @param {type} 
 * @return: 
 */
void TaskButton(void *pvParameters)
{
    //定义一个 gpio 下降沿触发
    button_handle_t btn_handle = button_dev_init(BUTTON_GPIO, 1, BUTTON_ACTIVE_LOW);
    // 50ms按钮短按
    // BUTTON_PUSH_CB 表示按下就触发回调函数,如果设置了长按,这个依然会同时触发!
    // BUTTON_RELEASE_CB 表示释放才回调,如果设置了长按,这个依然会同时触发!
    // BUTTON_TAP_CB 此选项释放才回调,如果设置了长按,这个不会同时触发!
    button_dev_add_tap_cb(BUTTON_PUSH_CB, ButtonShortPressCallBack, "TAP", 50 / portTICK_PERIOD_MS, btn_handle);4
    // 设置长按 2s后触发
    button_dev_add_press_cb(0, ButtonLongPressCallBack, NULL, 2000 / portTICK_PERIOD_MS, btn_handle);

    vTaskDelete(NULL);
}


四、平滑PWM调光;


     PWM平滑调光,也许很多人并不知道什么意思。在照明行业,这个是许多开发者在乎的一种效果,像 esp32 就自带这么一种算法叫做 LEDC,全称是 LED control 顾名思义就是专为 LED控制设计的,具体的大家可以来这里我之前写的博客,或者去官网看看;

     而在 esp8266上实现,需要自己写算法,而乐鑫前期是提供这样的代码方案,到后面就没了;为了在项目 3.0 SDK 上达到这样的效果,我移植旧版的过来,发现并不是很顺利,平滑程度是眼镜看不到,也许是变得太快了;

     所以,我在其算法上加上一些延迟,这个算法怎么加,我们必须知道:当我们从0调节到100是从灭到最亮的过程,一般设置是瞬间到从灭到最亮的,而为了看到平活效果,我们可以把 从灭到最亮中间分成若干段,就是 0到100分成若干段,每一点一点去设置,比如:

0% --> 15% --> 30% --> 45% --> 65% --> 80% --> 95% --> 100%

     这样我们肉眼起码看到是慢慢在变的,其实在一段一段在设置;

     而重要的是,当亮度越来越小的时候,我们的眼看到的效果是越来越不明显了,所以我在此监听到 在 20%亮度以下,延迟再加大点。

void user_light_set_duty(uint32_t duty, uint8_t channel)
{
     if (duty != light_param.pwm_duty[channel])
    {
        pwm_set_duty(channel, duty);
        light_param.pwm_duty[channel] = duty;
        if (duty < 20)
        {
            vTaskDelay(15 / portTICK_RATE_MS);
        }
        else
        {
            vTaskDelay(20 / portTICK_RATE_MS);
        }
    }
}


     说了这么多理论,我下面写下如何使用,下面有通道设计,以及周期等设计,以及我是默认是5通道,但是你可以自由设置;

     周期越大,平滑调节效果越明显,如果硬件允许,我建议设置为 1000 ;

     头文件定义的方法使用见注释吧;



//一共设计的通道
#define PWM_CHANNEL 5
//周期,同样是深度
#define PWM_PERIOD 100

#define PWM_0_OUT_IO_NUM 12 //白光 通道0
#define PWM_1_OUT_IO_NUM 13 //暖光 通道1
#define PWM_2_OUT_IO_NUM 14 //红色灯 通道2
#define PWM_3_OUT_IO_NUM 15 //绿色灯 通道3
#define PWM_4_OUT_IO_NUM 5  //蓝色灯 通道4

/**
 * @description: 平滑设置全部通道
 * @param {type} 
 * @return: 
 */
void light_set_aim_all(uint32_t cw, uint32_t ww, uint32_t r, uint32_t g, uint32_t b);

/**
 * @description: 平滑设置通道2 红色灯
 * @param {type} 
 * @return: 
 */
void light_set_aim_r(uint32_t r);

/**
 * @description: 平滑设置通道3 绿色灯
 * @param {type} 
 * @return: 
 */
void light_set_aim_g(uint32_t g);

/**
 * @description: 平滑设置通道4 蓝色灯
 * @param {type} 
 * @return: 
 */
void light_set_aim_b(uint32_t b);

/**
 * @description: 平滑设置通道0 白色灯
 * @param {type} 
 * @return: 
 */
void light_set_aim_cw(uint32_t cw);

/**
 * @description: 平滑设置通道1 暖色灯
 * @param {type} 
 * @return: 
 */
void light_set_aim_ww(uint32_t ww);

五、自定义保存路由器信息,自动重连路由器;


     最后一个要分享的是在 esp8266 rtos3.0 上实现自动重连路由器,要知道,在 esp8266 rtos3.0 上并不是像 2.0 一样,当你上次连接成功路由器之后,你下次断电重启设置 station 模式会自动连接路由器。在 esp8266 rtos3.0 上需要自己来保存,不知道以后乐鑫会不会优化一下这个问题;

     所以,有这样的需求,我是自己敲了一个组件出来,简单来说就是提供保存路由器ssid和密码,以及清理路由器ssid和密码,以及自动连接路由器接口;

     相信从头文件大家可以看到如何使用了!我个人建议就是 配网成功后就保存路由器信息,每次重启就调用 routerStartConnect(); 即可,看返回函数是否可以连接路由器,否则进去配网模式;


/**
 * @description:  自动连接路由器
 * @param {type}  是否成功连接! false:获取ssid失败!true:成功自动连接路由器
 * @return: 
 */
bool routerStartConnect();

/**
 * @description: 清理wifi路由器连接信息
 * @param {type} 
 * @return: 
 */
void router_wifi_clean_info(void);

/**
 * @description: 保存路由器信息
 * @param {type} 
 * @return: 
 */
void router_wifi_save_info(uint8_t *ssid, uint8_t *password);


六、其他;


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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半颗心脏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值