引言

为什么要写这个,是因为自己在使用esp8266的pwm调节灯光亮度时遇到一个问题。最后终于解决。

所用器材和平台:

1.一个nodemcu开发板
2.一个LED灯(为了接线方便,我把usb小LED灯的usb插头拆了)
3.云平台:机智云平台SOC方案
4.固件编译环境AiThinker_IDE,
烧录工具flash_download_tools_v3.6.6

缩略:

esp8266的pwm函数功能就不一一介绍了,开发手册上都讲得很清楚,esp8266官网里查找即可

想达到的目标功能:

达到手机可以开关LED灯并且可以调节亮度,当亮度为0时灯必须熄灭。

初始思路:

LED灯的一个引脚连接NodeMCU的3.3V,LED灯的另一个引脚连接NodeMCU的PWM引脚。
最后发现这样连接引脚有问题:关灯,灯不会熄灭啊啊啊啊啊。

不过最后解决啦啊哈哈哈哈。

过程:

在机智云平台创建了两个数据点,第一个是布尔类型的控制灯的开关,第二个是数值类型的控制灯的亮度。
编译固件
刚开始使用的固件代码是机智云官方的SOC方案代码。
在实现可以手机控制开关LED灯的基础上,我添加了机智云库里

的pwm.h头文件

到gizwits_product.c文件这里

同理,在user_main.c中最上边,也是添加上pwm.h头文件(方法同上,图省略)。
因为我设置的pwm引脚是GPIO4。

uint32 io_info[][3] ={{PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4,4}};

就是这样配置。函数中参数就不一一介绍了,开发手册很清楚,不是问题重点。
然后在主函数里先初始化pwm,也就是设置好周期,下图为1000us。

机智云功能函数在gizwits_product.c文件中,调节光亮直接在功能函数中调用pwm.h中的占空比设置函数就可以

pwm_set_duty(0,0);
pwm_start();

解释:
pwm_set_duty中第一个参数是duty数值,代表高电平占空比数值,duty范围为0~22222,参数duty与设置的周期大小有关。
第二个参数是通道值,我初始化时pwm引脚设置用的0通道。
具体可查手册。
duty为0意味着一个周期内有0份为高电平即整个周期全为高电平,因为在上图user_main.c文件中初始化pwm时设置的周期为1000us即频率为1KHz,这样的话一个周期就是22222份。
每次设置pwm_set_duty后边必须紧跟pwm_start();占空比设置才能有效。
如果pwm_set_duty(22222,0);pwm_start();也就是整个周期为高电平。
调光就是利用pwm可以调节高低电平占空比(我的理解是高低电平的百分比),因此设置duty值调光可以实现啦,我好兴奋当时哈哈哈。

LED灯不能熄灭根源:

但是突然发现有一个问题就是,当我在手机APP上把调光亮度值调到0时,发现LED灯并没有熄灭,而是亮度在微微亮。然后我就很疑惑。最后发现是这种设置方式的LED灯pwm不能达到100%。不是空穴来风,这是官方的回答。


理想的熄灭状态时,两个引脚之间没有特别大的电势差,驱动不了LED灯,LED灯就熄灭。
两个原因。
但是pwm占空比没有达到100%,也有可能原因是即使pwm占空比100%,pwm引脚并不能达到3.3V。
LED灯一个引脚为3.3V时候,pwm引脚并不是3.3V,两个引脚有比较大的电势差,使LED灯亮度达到了亮起来。

解决方法:

很简单。
刚开始LED灯一个引脚接3.3V,另一个引脚接pwm引脚,
我把它们的引脚换了一下:
pwm引脚做电源(SDK里的占空比颠倒一下,调光数据点越大,duty数值越大,高电平时间在一个周期内时间越大,LED灯越亮),另一个引脚接GND这样就可以实现没有较大电势差了。

if(STA[0]==1)  //LED灯开启
{pwm_duty_init[0]=currentDataPoint.valueDIM*222.22;  //currentDataPoint.valueDIM数据点设置范围在0-100pwm_set_duty(pwm_duty_init[0],0);pwm_start();
}
else          //LED灯关闭
{pwm_set_duty(0,0);   pwm_start();
}

哈哈哈哈解决。

esp8266的SDK开发pwm有感:解决LED灯不能熄灭,微微亮问题。相关推荐

  1. ESP8266 Non-OS SDK开发探坑之四-用户非易失参数安全存储到flash

    ESP8266 Non-OS SDK开发探坑之四-用户非易失参数安全存储到flash [Starting with ESP8266 - Light a LED] [Starting with ESP8 ...

  2. 嵌入式系统开发设计——按键控制LED灯实现

    一.实验目的 掌握STM32固件库的使用方法: 掌握基于库函数模板的开发方法: 掌握基于固件库进行GPIO端口编程的方法: 4.规范编程格式. 二.实验内容 1.查阅STM32-V5开发板按键.LED ...

  3. 【嵌入式系统开发09】重做LED灯以及串口通信查询

    [嵌入式系统开发09]重做LED灯以及串口通信查询 要求:安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务: 1.LED灯重 ...

  4. 单片机入门:LED灯循环右移点亮(原理图+程序+仿真)

    目录 硬件电路设计 仿真电路设计 程序设计 学习了LED灯的点亮和闪烁后,下面尝试以右移的方式实现LED灯的循环点亮. 硬件电路设计 结合51单片机最小系统的知识,利用AD19画好最小系统电路(未包括 ...

  5. Proteus:单片机LED灯一秒钟的亮灭模拟

    题目概述: 单片机LED灯一秒的亮灭. 编程: #include<reg52.h> sbit LED=P0^0; unsigned char num=0; void main() { LE ...

  6. 单片机p0口接8个LED c51语言,51单片机P1口接8个LED灯,低电平点亮,用定时器1定时250ms,让着8个LED不停闪烁,编写完整的C程序。...

    51单片机P1口接8个LED灯,低电平点亮,用定时器1定时250ms,让着8个LED不停闪烁,编写完整的C程序. 更多相关问题 下列业务应该计入营业外支出的是(). 维生素的生理功能有哪些? 在实务中 ...

  7. 让LED灯按照指定的亮灭模式亮灭

    题目: 让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随即指定.每八个变化为一个循环,每个变化状态的时间值可以根据不同的应用场景选择. 思路:参考3 8 译码器的设置 需要两个计数器 源文件: ...

  8. ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!

    文章目录 1.前言 2. SDK概述 2.1 SDK使用流程 2.2 ESP8266 HDK -- 硬件开发工具 2.3 ESP8266 SDK -- 软件开发工具包 2.3.1 Non-OS SDK ...

  9. ESP8266 RTOS SDK 开发环境搭建

    一.工具链的设置 参考乐鑫官网文档 Get Started - ESP8266 RTOS SDK Programming Guide documentation 二.获取ESP8266_RTOS_SD ...

最新文章

  1. k8s nodeport无法访问_k8s学习之service详解
  2. @PreAuthorize 权限控制的原理
  3. NSArray文件读写
  4. 【题解报告】Leecode367. 有效的完全平方数——Leecode每日一题系列
  5. php mk的支持扩展,Linux部署Redis及PHP-redis扩展
  6. 【转】使用 F#、MapReduce 和 Windows Azure 分析日志文件
  7. java获取access token_微信java 开发4 access_token获取
  8. 正则表达式匹配非负数字
  9. 健康管理项目第九天(套餐预约之占比饼形图、运营数据统计、报表导出 )
  10. 【WebService笔记01】使用JWS实现WebService接口的发布和调用
  11. cocos creator运行正常,微信开发者工具中报错XXX is not defined.
  12. laravel 导出Excel,多维表头
  13. undefined symbol问题的查找、定位与解决方法
  14. [Unity热更新]tolua# LuaFramework(七):lua使用DOTween
  15. 配置分布式集群方案要考虑哪些关键点?
  16. springboot 2.x升级后出现Spring Security – There is no PasswordEncoder mapped for the id “null”的解决方案
  17. MSP430勘误表使用
  18. vue 数字金额转大写方法
  19. sql的介绍——SQL Server数据库管理系统
  20. surface pro7磁盘分区,无需重装系统

热门文章

  1. 特步与AWS合作,“跑”出行业全球品牌发展新“配速”
  2. 山大自考计算机及应用论文答辩,山东大学自考毕业论文答辩流程与准备工作
  3. 旋钮编码开关工作原理
  4. django系列10 --- 表单
  5. SAAS将迎来真正意义上的春天
  6. MacBookPro进水急救
  7. uva1368题解 zyq_198
  8. (python)牛客网(华为机试四)——较难
  9. 【信号】单端信号和差分信号,他们到底是什么东西。
  10. servu文件服务器备份,用SERV_U建立文件备份系统