개발 환경
ESP32를 사용하기 위한 환경 구성 방법은 아래의 링크를 통해 진행한다.
단, 링크에 들어가기 전에 이번 글에서 사용한 모듈은 "esp32 wroom devkit v1"이기 때문에 프로젝트 생성시 Board 항목에 아래 사진과 같이 "uPesy ESP32 Wroom DevKit"을 입력한다.
그럼 다시 아래 링크를 통해 개발환경 구성을 진행한다.
https://codecanvas-lab.tistory.com/10
[ESP32] 자동차 CAN Hacking - PlatformIO 환경 구성(2)
개발 환경 이전 포스팅에서 구매한 ESP32C3 SuperMini를 본격적으로 가지고 놀기 위해, 개발 환경을 구성해 보자. ESP32는 아래와 같이 두 가지 환경을 제공한다. Arduino IDE PlatformIO(Visual Studio Code의 Extent
codecanvas-lab.tistory.com
회로 구성
타이머 인터럽트를 구현하기 전에 우선 정상적으로 동작하는지 확인하기 위해 기판에 장착된 LED를 활용할 것이다.
이것을 사용하기 위해서는 회로도를 확인해야 한다.
우선 LED의 위치는 아래 사진에 빨간 네모 박스로 표시한 곳에 존재한다.
아래 회로도를 보면 해당 LED는 GPIO2번 포트에 연결된 것을 알 수 있다.
예제 코드
#include <Arduino.h>
uint8_t led = HIGH;
int timerPeriod = 500000;
hw_timer_t *timer = NULL;
void timerSetting();
void IRAM_ATTR onTimer();
void setup() {
timerSetting();
pinMode(2, OUTPUT); // LED 핀 출력 설정
}
void loop() {
}
void timerSetting() {
timer = timerBegin(0, 80, true);
timerAttachInterrupt(timer, &onTimer, true); // 타이머 등록
timerAlarmWrite(timer, timerPeriod, true); // 타이머 주기 설정
timerAlarmEnable(timer); // 타이머 활성화
}
void IRAM_ATTR onTimer() {
digitalWrite(2, led);
led = (led == HIGH) ? LOW : HIGH;
}
timerBegin() 함수에서 두 번째 인자인 "80"은 프리스케일 값이다. 프리스케일은 분주비를 뜻하는데, 기본적(defaul)으로 80 MHz로 동작하는데 분주비를 80을 주면 1 MHz로 타이머가 동작한다. 이는 1초에 100만 번의 카운터가 있다는 뜻이 된다.
그리고 타이머 주기(카운터)를 설정하는 timerAlarmWrite() 함수의 인자인 timerPeriod에 위 코드처럼 50만 번을 주게 되면 0.5초에 한 번씩 타이머가 동작하게 된다.
timerAttachInterrupt() 함수는 타이머 동작시 호출할 함수를 등록한다. 위 코드에선 onTimer()가 된다.
IRAM_ATTR은 처리 함수를 IRAM(Instruction RAM)에서 동작하도록 하는 속성이다. IRAM_ATTR이 없으면 함수가 flash memory에서 동작하기 때문에 속도가 느리다.
위에서 보는 것처럼 타이머 인터럽트를 통해 동작하는 코드가 삽입되어 있기 때문에 void loop() 함수는 아무것도 작성되지 않아도 프로그램이 종료되지 않고 동작한다.
이처럼 타이머를 사용하면 서로 다른 기능을 분리하여 구현할 수 있고(병렬처리) 주기적으로 동작이 필요한 부분을 따로 만드는데 활용할 수 있다.
동작 영상
위와 같이 GPIO2번에 연결된 파란색 LED가 깜빡 거리는 것을 확인할 수 있다.
'프로그래밍 > ESP32' 카테고리의 다른 글
[ESP32] 자동차 CAN Hacking - C-CAN에서 데이터 훔치기(4) (1) | 2024.02.15 |
---|---|
[ESP32] 자동차 CAN Hacking - MCP2515 사용하기(3) (1) | 2024.02.08 |
[ESP32] 자동차 CAN Hacking - PlatformIO 환경 구성(2) (0) | 2024.02.01 |
[ESP32] 자동차 CAN Hacking - 보드선정 및 구매(1) (1) | 2024.01.27 |