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

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();
}

附件: 点击打开链接

你可能感兴趣的:(使用ESP8266的PWM功能,写了一个简单的呼吸灯程序)