esp8266模块软件定时

时间:2024-03-26 10:58:53

        在大多数裸奔的单片机中,我们总是会在主函数main中,添加一个while(1)无限循环,保证程序一直执行不退出。但今天我们要讲的是在事件驱动的esp8266中,一般不能用while循环,更多的时候我们是添加定时器,在定时器的回调函数中添加要执行的代码,并让定时器重复定时来达到循环执行代码的目的。那么我们首先来看看esp8266里的软件定时器吧。
        在esp8266的sdk中,有5个函数来操作软件定时器。请看:
        1.os_timer_arm,该函数是使能毫秒级定时器。函数的定义如下图:
        esp8266模块软件定时
    2.os_timer_arm_us,该函数是使能微秒级的定时器,最高精度为500us.请看函数的定义如下:

esp8266模块软件定时
        在使用该函数之前,需要调用system_timer_reinit来初始化软件定时器。
    3.os_timer_disarm,此函数为取消定时器定时。在定时器初始化之前和定时器结束定时的时候调用。函数定义如下:

esp8266模块软件定时           4.os_timer_setfn,该函数是设置定时器回调函数。在定时器定时到达后,会自动调用设置的回调函数。函数定义如下:
esp8266模块软件定时
    5.system_timer_reinit该函数是重新初始化定时器,当需要使用微妙定时器时调用。函数定义如下:
esp8266模块软件定时         在了解了函数功能之后,我们来写个定时器的demo,进一步来学习下毫秒级定时器的用法。
        首先,定义一个定时器变量用来储存定时器对象。如下图:

esp8266模块软件定时
       注意,此timer必须是个全局变量,如果定义一个局部变量。编译器不会报错,但是程序运行时会出现意想不到的的现象。
      第二步, 我们定义一个定时器回调函数,当定时器到达时,调用该函数。如下图所示:
esp8266模块软件定时
回调函数在每次调用时,简单的打印一下"Hello,are you OK?\n".注意,在回调函数里面,不能消耗太长的时间,更不宜做长时间等待等操作。

第三步,在用户主函数中,初始化定时器和设置定时器定时。本demo设置定时1000ms,并重复定时。代码如下:
esp8266模块软件定时
第四步,保存编译。运行结果如下:

esp8266模块软件定时