ESP8266定时器的使用(基于安信可SDK)

网上挺多ESP8266的教程,对定时器的讲解比较细。咱们就简单粗暴一些吧。直接看代码吧。(好吧,这段时间博客显示不了图片,我就不截图了,直接复制代码吧)

os_timer_disarm(&Send_temp_timer_t);
os_timer_setfn(&Send_temp_timer_t, Send_temp, NULL); //a demo to process the data in uart rx buffer
os_timer_arm(&Send_temp_timer_t, 1000, 1);

以上三个函数就是实现我们定时器的功能,只要配置好了就能用了,嘿嘿,简单吧。咱们一步一步来。

一、定义一个定时器如:os_timer_t     Send_temp_timer_t;; 就是说Send_temp_timer_t;定义成os_timer_t 这个类型。我们跟踪os_timer_t 这个类型看一下他是怎么个回事,#define     os_timer_t        ETSTimer,好吧,那我们直接跟踪,ETSTimer吧。

typedef struct _ETSTIMER_ {
    struct _ETSTIMER_  
    *timer_next;
    uint32_t              
              timer_expire;
    uint32_t            
               timer_period;
    ETSTimerFunc        
        *timer_func;
    void                
                 *timer_arg;
} ETSTimer;

这是ETSTimer这结构体的定义,也就是要对里面的成员变量比如说周期、或者回调事件函数等进行赋值使用。其实一般用定时器的话不必太深究这些。

二、写定时器的回调事件函数,也就是当定时时间到的时候你希望板子去做的事情。咱们就简单得写一个串口发送吧。

char dat[] = "温度:28°C";
char LED_Flag = 0;

void Send_temp(void)

{
espconn_sent(&PhoneConn, dat, sizeof(dat));  //UDP发送
}

好吧,我是通过UDP发送出去的,其实从串口发送也一样。也就是当这个定时的时间到的时候,板子会往外发送温度:28°C这个消息。

三、定时器函数的配置,也就是一开始说的那三个函数。

os_timer_disarm(&Send_temp_timer_t);
os_timer_setfn(&Send_temp_timer_t, Send_temp, NULL); 
os_timer_arm(&Send_temp_timer_t, 1000, 1);

第一行代表停止定时器,也就是不管前面有没有开定时器,我都关闭定时器,相当于清零计时器计数。而里面的形参就是我们用os_timer_t 这个类型定义的Send_temp_timer_t

第二行是回调函数的初始化也就是用它来做什么东西,第一个形参同上,第二个形参就是我们要处理的函数,最后一个形参写NULL,也就是0

第三行第一个形参同上,1000是定时器的周期,它的单位是毫秒,也就是1秒。我们可以在此更改他的定时周期。最后一个1代表一直循环进行。如果我们只想定时一次的话,就填0.

四、在主程序的初始化函数中初始化上面那三个函数就能生成一个定时器。

你可能感兴趣的:(ESP8266定时器的使用(基于安信可SDK))