0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ESP-WROOM-02タイマー(定期的処理)

Last updated at Posted at 2019-04-20

やりたかったこと

「ESP-WROOM-02を使って,定期的に加速度センサから値を得る」という機能を実装しようと思い,タイマーについて調べてみました.

実装(msecタイマー)

msecタイマーの実装に必要最低限なものは以下の通りです.

#include <Arduino.h>
extern "C" {
  #include "user_interface.h"
}

ETSTimer timer;
int Interval = 5;//タイマーの周期.単位はmsec.

void setup(){
    system_timer_reinit();
    os_timer_setfn(&timer, sample, NULL);
    os_timer_arm(&timer,Interval, true);
}

void loop(){
    yield();
}

void sample(void*){
    //割り込み処理をしたい内容を記述
}

上記のようなコードで,msec単位のタイマー割り込みが可能です.

実装(μsecタイマー)

ESP-WROOM-02ではμsecタイマーも実装されています.

#define USE_US_TIMER
#include <Arduino.h>
extern "C" {
  #include "user_interface.h"
  #include "osapi.h"
}

ETSTimer timer;
int Interval = 1000;//タイマーの周期.単位はμsec.

void setup(){
    system_timer_reinit();
    os_timer_setfn(&timer, sample, NULL);
    os_timer_arm_us(&timer,Interval, true);
}

void loop(){
    yield();
}

void sample(void*){
    //割り込み処理をしたい内容を記述
}

Espressif Systems社の仕様書によると,最高でも精度は500μsecと記載されています.msecがESP-WROOM-02タイマーの限界と言ってもいいでしょう.

注意点

system_timer_reinit();

必ず初期化を行いましょう.当初はこの行をすっ飛ばして実装していたのですが,微小なラグが蓄積されていってしまいます.

更にμsecでのタイマーを実装する際にこの初期化を忘れると,μsecではなくmsecでタイマー処理されてしまいます.気をつけて下さい.

まとめ

とりあえずタイマーの実装を行いました.あとは個々人でsample関数の中身を書いてみてください.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?