Embedded/Arduino

Arduino Nano 33 IoT에 EEPROM 없는 기능을 FlashMemory로 대체하기

변화의 물결1 2024. 10. 18. 16:13

 

 

안녕하세요.

 

 이전 글에서 Arduino Nano 33 IoT를 이용한 Beacon을 만들어 보았습니다.

 

 

 

Arduino Nano iot 33를 이용한 센서 데이터 전송 Beacon 만들어 보기

안녕하세요.  Arduino Nano iot 33을 가지고 Beacon과 유사한 하게 작동하는 것을 테스트해 보았습니다.그런데, 타업체 BLE 스캐너(BLE to WiFi(MQTT)) 제품이 있는데, UUID를 자체를 센서데이터로 보내는 것

remnant24c1.tistory.com

 

 

 단순하게 아날로그 센서값을 보낼 때는 큰 문제가 없습니다. 그런데 가스센서 (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

https://github.com/EXSEN/RX-9   

 

 

 

반응형