使用ESP8266的PWM功能,写了一个简单的呼吸灯程序

来源:互联网 发布:艾德软件 编辑:程序博客网 时间:2024/04/28 08:17
1.使用乐鑫官网的esp8266_nonos_sdk_v1.5.4_16_05_20,用ESP8266的PWM功能,写了一个简单的呼吸灯程序

2.驱动IO口分别为GPIO12 13 14

3.使用的模块为nodemcu(ESP-12D)

4.此呼吸灯我目前是用共阴极的灯珠实现的

5.原生SDK修改之处:
    a.将 driver_lib 和 examples/IoT_Demo 下的文件剪切到 app目录下

    b.修改app/user/user_main.c文件



/****user_main.c*****/#include "ets_sys.h"#include "osapi.h"#include "user_interface.h"#include "user_light.h"#include "gpio.h"LOCAL os_timer_t os_timer;LOCAL uint8 set_duty=0;            /** PWM占空比变量 */LOCAL uint8 dir=1;                /** 占空比加减标志 */static void ESP8266_PWM_RUN(void){    if (1==dir)    {        set_duty ++;        if ( set_duty >= 100 )        {            dir=0;        }    }    else    {        set_duty --;        if ( set_duty <= 0 )        {            dir=1;        }    }       pwm_set_duty(set_duty,0);       pwm_set_duty(set_duty,1);       pwm_set_duty(set_duty,2);       pwm_start();    }static void PWM_Init(void){    uint32 io_info[3][3]={                                                // 该参数在ESP8266 SDK的user_light.h中        {PWM_0_OUT_IO_MUX,PWM_0_OUT_IO_FUNC,PWM_0_OUT_IO_NUM},          //GPIO12        {PWM_2_OUT_IO_MUX,PWM_2_OUT_IO_FUNC,PWM_2_OUT_IO_NUM},            //GPIO13        {PWM_3_OUT_IO_MUX,PWM_3_OUT_IO_FUNC,PWM_3_OUT_IO_NUM}            //GPIO14       };       uint32 duty[3]= {0};       pwm_init(1000,duty,3,io_info);                            //配置PWM的周期为1000us,占空比为0,PWM通道数量为3       os_timer_disarm(&os_timer);       os_timer_setfn(&os_timer,(os_timer_func_t*)(ESP8266_PWM_RUN),NULL);       os_timer_arm( &os_timer,30,1);    }void user_rf_pre_init(void){}void user_init(void){   PWM_Init();}

附件:点击打开链接

原创粉丝点击