Arduino MKR 1310 저전력 사용해보기 (Using low power on Arduino MKR 1310 with ArduinoLowPower.h)
[embedded/IoT] - Arduino MKR 1310 배터리 연결하기 (Arduino MKR 1310 with Batteries)
일전에 MKR 1310보드를 배터리로 연결할 수 있도록
PMIC(Power Management IC)를 추가했는데
아무래도 배터리를 사용하려면 항시전원보다는
저전력을 유지하는게 사용기간을 늘릴수 있으니
사용하지 않을때는 Sleep 하게해서
전력을 아낄수 있게 해볼까합니다
ESP 모듈들은 자체적으로 DeepSleep을 지원하던데
얘는 없나봐요?
아니면 못찾은건가...
대신 대안으로 찾은 LowPower 라이브러리 를 많이 사용하는것 같아
이용해 보기로 했습니다
아쉽게도 Arduino Uno 등 일반적인 아두이노는 지원하진 않습니다
우선 관련라이브러리를 추가해 줍니다
https://zelkun.tistory.com/entry/012-Arduino-아두이노-library-라이브러리-추가하기
라이브러리를 설치하고 예제를 MKR 1310 보드에
업로드해서 테스트를 진행합니다
5개의 예제가 있는데요
저는 마지막 TimedWakeup 을 이용했습니다
/*
TimedWakeup
This sketch demonstrates the usage of Internal Interrupts to wakeup a chip in sleep mode.
Sleep modes allow a significant drop in the power usage of a board while it does nothing waiting for an event to happen. Battery powered application can take advantage of these modes to enhance battery life significantly.
In this sketch, the internal RTC will wake up the processor every 2 seconds.
Please note that, if the processor is sleeping, a new sketch can't be uploaded. To overcome this, manually reset the board (usually with a single or double tap to the RESET button)
This example code is in the public domain.
*/
#include "ArduinoLowPower.h"
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
// Uncomment this function if you wish to attach function dummy when RTC wakes up the chip
// LowPower.attachInterruptWakeup(RTC_ALARM_WAKEUP, dummy, CHANGE);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
// Triggers a 2000 ms sleep (the device will be woken up only by the registered wakeup sources and by internal RTC)
// The power consumption of the chip will drop consistently
LowPower.sleep(2000);
}
void dummy() {
// This function will be called once on device wakeup
// You can do some little operations here (like changing variables which will be used in the loop)
// Remember to avoid calling delay() and long running functions since this functions executes in interrupt context
}
예제코드를 보면 LED_BUILTIN 핀을 출력모드로 Setup 하고
Loop에서 켜고 끄는걸 반복하는데요
Loop 마지막에
LowPower.sleep(2000); 이 눈에 띄네요
2초간 대기상태로 sleep 시키고 LED를 켜지게 돼있습니다
코드에서는 확인이 안되지만
ESP의 DeepSleep과는 다르게
Sleep하고 깨어날때는 Setup이 아니고
Loop를 순화하기 때문에
만약 Setup부터 다시 진행해야한다면
약간의 편법을 이용해야하는 불편함이 있습니다
035. Arduino 아두이노 리셋 시키기 - Arduino software reset
리셋버튼을 이용하는 방법으로
리셋핀 연결은 위의 아두이노 리셋시키기 포스트를 참고 바랍니다..
#include "ArduinoLowPower.h"
void resetFunc(void);
int resetPin = 7;
boolean init_chk = true;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if(!init_chk) {
resetFunc();
} else {
init_chk = false;
}
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
// Triggers a 2000 ms sleep (the device will be woken up only by the registered wakeup sources and by internal RTC)
// The power consumption of the chip will drop consistently
LowPower.sleep(2000);
}
void resetFunc(){
pinMode(resetPin, OUTPUT);
digitalWrite(resetPin, HIGH);
delay(1000);
digitalWrite(resetPin, LOW);
}
변경된 소스
최초 실행시에만 init_chk 변수가 true로
2번째 loop부터 resetFunc 함수를 호출해서
보드를 리셋시키도록 해봤습니다
다만, 실제 보드에 업로드를 해보진 않아서
제대로 동작하는지는 테스트를 못해봤습니다
mkr보드가 하나뿐인데, 이미 사용중이라서요...
// Uncomment this function if you wish to attach function dummy when RTC wakes up the chip
LowPower.attachInterruptWakeup(RTC_ALARM_WAKEUP, dummy, CHANGE);
void dummy() {
// This function will be called once on device wakeup
// You can do some little operations here (like changing variables which will be used in the loop)
// Remember to avoid calling delay() and long running functions since this functions executes in interrupt context
}
참고로 dummy함수는
Setup함수 내부의 주석처리된 InterruptWakeup 에서 사용하는거라
주석을 풀고 dummy 함수에 내용을 추가해도 동작하지 않습니다
뭔가 주석을 풀면 깨어날때 dummy를 실행할 것 같은 느낌이지만
주석을 읽어보면 RTC라고 명시하고 있어
rtczero 라이브러리와 함께 이용해야 하는것 같아요
아쉽지만 본 포스트에서는 다루지 않습니다
1. https://docs.arduino.cc/hardware/mkr-wan-1310
2. https://github.com/arduino-libraries/ArduinoLowPower
3. https://docs.arduino.cc/tutorials/mkr-wifi-1010/powering-with-batteries
4.https://www.arduino.cc/reference/en/libraries/rtczero/
5. https://docs.arduino.cc/tutorials/mkr-wifi-1010/rtc-clock
Arduino MKR 1310 배터리 연결하기 (Arduino MKR 1310 with Batteries) (0) | 2023.01.29 |
---|---|
Arduino MKR 1310 사용해보기 (with TTN) (0) | 2022.06.26 |
LoRa)The Things Network Gateway 추가 (0) | 2020.03.02 |
LoRa)Dragino MCU Update Single_pkt_fwd_v004.hex (0) | 2020.03.02 |
LoRa)Dragino LG-01 ROUTER firmware Update(4.3.7) (0) | 2020.03.02 |
댓글 영역