ESP8266_04管脚控制与软件定时器

ESP8266_01搭建开发环境

ESP8266_02程序的编译与下载

ESP8266_03SDK与Makefile的基本用法

ESP8266_04管脚控制与软件定时器

ESP8266_05 ESP8266有几个串口?

ESP8266_06硬件定时器与IO中断

ESP8266_07基于PWM的呼吸灯

ESP8266_08基于flash的数据掉电保护

ESP8266_09基于IIC控制的OLED屏幕

ESP8266_10 ESP8266的STATION模式

ESP8266_11 ESP8266的UDP广播

ESP8266_12 ESP8266客户端模式下的TCP通信

ESP8266_13服务器端模式下的TCP通信

ESP8266_14 SOFTAP模式下的服务器端和客户端

ESP8266_15天气预报之TCP的GET操作

ESP8266_16天气预报之JSON数据的生成与解析

ESP8266_17简单网络时间协议-SNTP

ESP8266_18 MQTT协议接入ONENET平台

ESP8266_19MQTT协议接入ONENET平台_订阅主题

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作

ESP8266_21基于ESP8266的一键配网

ESP8266_22基于自身ADC的电压采样

ESP8266_23基于硬件定时器的红外遥控器解码

         这一节主要有两部分内容:1、管脚的控制;2、软件定时器的使用。

         先说定时器,ESP8266内部的定时器分为软件定时器和硬件定时器。手册中指出硬件定时器其实就跟单片机里的timer一样,而软件定时器纯粹由软件实现,咱们可以理解为单片机里面类似for循环之类的循环延时函数。

         定时器理解了,管脚控制就简单了,先上一下我这里的模块原理图:

         原理很简单,板上有一个三色的LED,所以这里实现一个定时实现LED开关的程序。先说GPIO的用法,分俩步。使用之前包含“user_interface.h”文件:

         1、设置管脚为普通的GPIO模式

         PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);

         函数PIN_FUNC_SELECT的功能是选择管脚功能,第一个参数是管脚的名字,第二个参数看起来像管脚编号,但其实是管脚对应的功能。

         在编译器中选中FUNC_GPIO12,按F3,会打开eagle_soc.h文件,在这个文件里你会发现,无论是FUNC_GPIO12,FUNC_GPIO13,还是多少,对应的宏定义都是3:

         #define FUNC_GPIO12                     3

         2、设置管脚方向和电平

         gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0):

         该函数的功能是设置GPIO属性,共有四个参数,没有用到的填0即可。

         第一个参数,设置输出为高的位;

         第二个参数,设置输出为低的位;

         第三个参数,设置使能输出的管脚;

         第四个参数,设置使能输入的管脚。

         所以上面一行代码的意思是:设置GPIO12和GPIO13为输出,12输出高,13输出低。同理,下面一行代码的意思是:设置GPIO12为输入。

         gpio_output_set(0, 0, 0, BIT12):

         注:参考手册2c-esp8266_sdk_api_guide_cn_v1.5.4的152页。

 

         然后是软件定时器的使用,使用之前包含如下两个头文件:

         #include "ets_sys.h"       //内有timer结构体的定义

         #include "osapi.h"

        使用方法也很简单,共分四步:

        1、定义一个软件定时器的结构体

        os_timer_t LED_timer;             //定义一个软件定时器的结构体,用于实现周期操作

         2、关掉该定时器的定时功能

         os_timer_disarm(&LED_timer);      //配置之前,先关闭

         3、设置该定时器的回调函数。使用定时器,必须设置回调函数。

         os_timer_setfn(&LED_timer, (os_timer_func_t *)LED_TURN, NULL);

         该函数共有三个参数:

         第一个,你要设置哪个定时器?LED_timer

         第二个,定时器定时时间到了之后,要执行哪个函数:LED_TURN

         第三个,回调函数的参数,没有的话写NULL即可。

         完了,也很简单。等等!定时的时长是多少?别急。

         4、使能定时器,并设置时长,是否循环执行。

         os_timer_arm(&LED_timer, 3000, 1);

         该函数共有三个参数:

         第一个,你要使能哪个定时器?         LED_timer

         第二个,时长多长?                                 3000,单位是毫秒。另有微秒的函数,可自行研究。

         第三个,这三秒定时的功能只运行一次,还是循环执行? 1,循环;0,一次。

         第三步里,提到了一个函数LED_TURN,这个函数就是开启或关闭LED的函数:

void LED_TURN()

{

         static state_flag = 0;

         if(state_flag == 0)

         {

                   //GPIO12拉高,GPIO13拉低

                   gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0);

                   state_flag = 1;

         }

         else

         {

                   gpio_output_set(BIT13, BIT12, BIT12|BIT13, 0);

                   state_flag = 0;

         }

}

         到此,软件定时器的用法说完了。

         注:参考手册2c-esp8266_sdk_api_guide_cn_v1.5.4的23页。

         注意事项:手册建议,不要在程序中使用while(1)  实现死循环,非常危险。

         依次clean和build一下,生成bin文件,下载后可看到板上的LED,依次亮灭。

          程序下载链接:https://pan.baidu.com/s/1fDc4ap2TeazjP_nQL7ZtVg 
          提取码:9onb 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Arduino ESP8266有多个定时器可用,其中最常用的是硬件定时器软件定时器。 硬件定时器ESP8266有两个硬件定时器,分别是timer0和timer1。这些定时器的频率是固定的,在ESP8266上分别为80MHz和160MHz。这些定时器可以用来实现精确的定时操作,例如延迟、PWM等。 软件定时器软件定时器是通过编写代码来模拟一个定时器的方式实现的。这种定时器的精度比硬件定时器低,但是可以在任何GPIO引脚上使用。软件定时器通常使用定时中断来实现,当计时器达到设定的时间时,会触发一个中断。在中断处理程序中,可以执行所需的操作。 以下是一个使用软件定时器的例子: //定义一个计时器 unsigned long timer = 0; //定义定时器时间 unsigned long interval = 1000; void setup() { //初始化串口 Serial.begin(9600); } void loop() { if (millis() - timer > interval) { //如果计时器达到了定时器时间 timer = millis(); //重置计时器 Serial.println("Hello World!"); //输出Hello World! } } 在这个例子中,我们使用了Arduino的内置函数millis()来获取当前时间。当计时器达到设定的时间时,我们重置计时器并执行所需的操作。这个例子每隔1秒输出一次“Hello World!”。 总结: 硬件定时器软件定时器都有各自的优缺点,具体使用哪种定时器取决于应用的要求。使用定时器可以让我们在Arduino ESP8266上实现精确的定时操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值