안녕하세요.
이전 글에서 Arduino Nano 33 IoT를 이용한 Beacon을 만들어 보았습니다.
단순하게 아날로그 센서값을 보낼 때는 큰 문제가 없습니다. 그런데 가스센서 (EXSEN 제품)의 정확도를 높이기 위해 Auto Calibration(보정) 위한 데이터를 저장하고 불러오는 EEPROM 소스코드는 작동하지 작동하지 않았습니다.
아두이노 코드이긴 하나, EEPROM을 가지고 있는 AVR Based board 보드에서 사용 가능한 소스코드였습니다. 그래서 Arduino Nano 33 IoT 제품에서는 테스트할 수 없는 건가 하며 검색하던 중에 ATSAMD21 and ATSAMD51 버전으로도 Flash Memory를 EEPROM처럼 작동하게 만들어 놓은 오픈소스가 있어 사용해 보았습니다.
1. FlashStorage Library for Arduino
The FlashStorage library aims to provide a convenient way to store and retrieve user's data using the non-volatile flash memory of microcontrollers.
The flash memory, due to it's properties, is generally used to store the firmware code, but it can also be used to store user data.
FlashStorage 라이브러리는 마이크로컨트롤러의 비휘발성 플래시 메모리를 이용해 사용자 데이터를 저장하고 검색하는 편리한 방법을 제공하는 것을 목표로 합니다.
일반적으로 플래시 메모리는 속성은 펌웨어 코드를 저장하는 데 사용되지만 사용자 데이터를 저장하는 데에도 사용할 수 있습니다.
- 참조 사이트 2 내용 중 -
2. 사용방법
1) 라이브러리 다운로드 하기
https://github.com/cmaglie/FlashStorage 사이트에 가서 "<> Code" 눌러 Download ZIP을 통해 소스를 다운로드합니다.
2) Sketch에 Lib 추가하기
"Sketch -> Include Library -> Add .ZIP Library"를 눌러 추가합니다.
3) EEPROM.h 파일 대체하기
만약 소스상 EEPROM.h으로 되어 있다면, FlashAsEEPROM.h로 변경해서 빌드하면 다른 코드 변경 없이 가능합니다.
#include <EEPROM.h> <- #include <FlashAsEEPROM.h>
4) 사용방법
FlashAsEEPROM.h 파일에 extern EEPROMClass EEPROM; 으로 선언되어 있기 때문에 아래와 같이 바로 사용하면 됩니다.
//읽기
EEPROM.read(address)
//쓰기
EEPROM.write(address, value)
3. 마무리
위의 가스 센서 소스코드에서만 사용 가능한 것이 아니라 ATSAMD21 and ATSAMD51 버전의 Arduino에서 사용가능합니다. 이것은 코드상 EEPROM.h API를 동일하게 맞춰 놓았기 때문입니다.
사용 시 유의사항 한 가지는 FlashMemory의 수명이 있기 때문에 너무 자주 Write 명령을 수행한다면 영구적으로 FlashMemory를 사용할 없을 수도 있다는 것입니다. 사이트에서는 약 10,000 정도라고 말하고 있으므로, 프로그램상 자주 Write을 하는 것이 아닌 보정을 위한 값 혹은 부팅 시 필요한 환경 값을 저장하는 용도로 사용하면 어떨까 합니다.
감사합니다.
<참고 사이트>
1. EEPROM Library
https://docs.arduino.cc/learn/built-in-libraries/eeprom/
2. FlashStorage library for Arduino
https://github.com/cmaglie/FlashStorage
3. EXSEN/RX-9
'Embedded > Arduino' 카테고리의 다른 글
Arduino Nano iot 33를 이용한 센서 데이터 전송 Beacon 만들어 보기 (2) | 2024.10.16 |
---|---|
Arduino nano 33 iot Bluetooth와 SoftwareSerial.h 문제관련 (0) | 2024.08.25 |
Arduino Nano 33 IoT bootloader blocked 된 경우 (벽돌이 된 경우;;;)- 복구방법 링크 추가 (0) | 2024.08.22 |
아두이노 나노(Arduino Nano)와 아두이노 나노 33 IoT에 FreeRTOS에서 올리기 (0) | 2024.07.16 |
아두이노 나노(Arduino Nano) 33 IoT Web Server에서 데이터 JSON으로 출력하기 (0) | 2024.07.03 |