ESP8266 NONOS 3.0软件定时器实现流水灯
已经搭建好了ESP8266开发环境,我们先实现一下最基本的功能,用软件定时器实现流水灯功能。
我们参考ESP8266 Non-OS SDK API 参考提供的接口进行开发即可。手册下载地址:https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_cn.pdf
要实现流水灯我们首先需要进行GPIO的配置。查看原理图我们的LED连接的是ESP8266的GPIO4引脚和GPIO5引脚,所以我们需要先设置这两个GPIO口的功能。
首先调用PIN_FUNC_SELECT函数配置GPIO功能
接下来使用GPIO_OUTPUT_SET函数控制GPIO输出高电平或低电平就可以实现对GPIO的输出控制。
配置好了GPIO我们接着需要配置软件定时器,首先创建一个定时器结构体 static os_timer_t LedTimer;
接下来使用 os_timer_disarm(&LedTimer)取消定时器,然后调用os_timer_setfn(&LedTimer,(ETSTimerFunc *)(LedTask),NULL)进行定时器的相关设置,最后调用 os_timer_arm(&LedTimer,1000,1)使能软件定时器。
功能代码如下:
static os_timer_t LedTimer;
void LedTask(void)
{
static char State = 0;
if(State == 0)
{
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);
GPIO_OUTPUT_SET(GPIO_ID_PIN(5),0);
State = 1;
}
else
{
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);
GPIO_OUTPUT_SET(GPIO_ID_PIN(5),1);
State = 0;
}
}
void ICACHE_FLASH_ATTR
user_init(void)
{
os_printf("SDK version:%s\n", system_get_sdk_version());
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U,FUNC_GPIO5);
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);
GPIO_OUTPUT_SET(GPIO_ID_PIN(5),0);
os_timer_disarm(&LedTimer); //取消定时器定时
os_timer_setfn(&LedTimer,(ETSTimerFunc *)(LedTask),NULL);
os_timer_arm(&LedTimer,1000,1);
}
然后进行编译下载就完成了流水灯的功能,安装环境以及下载设置请参考上篇文章。