■ 1. GP8403은 어떤 보드인가요?

Adafruit GP8403 브레이크아웃 보드는 I2C(Inter-Integrated Circuit) 통신으로 받은 디지털 명령을 2채널 아날로그 전압으로 정밀하게 바꿔 주는 DAC(Digital-to-Analog Converter, 디지털-아날로그 변환기)입니다.

​

일반적인 DAC 모듈은 한계가 분명합니다. 최대 출력 전압이 입력 전원 전압인 3.3V나 5V를 넘을 수 없습니다.

​

GP8403은 DAC 칩과 함께 DC/DC(Direct Current to Direct Current, 직류-직류) 부스트 컨버터를 보드에 내장해서 이 한계를 넘었습니다. 그래서 일반적인 마이크로컨트롤러 전원만으로도 다음 두 가지를 할 수 있습니다.

​

✔ 최대 0~10V 범위의 아날로그 출력

✔ 외부 회로에 공급할 수 있는 12V / 최대 100mA 보조 전원 출력

​

그래서 저전압 개발 보드를 산업용 장비, OP 앰프(Operational Amplifier, 연산 증폭기), 오디오 처리 장비, 넓은 전압 범위의 계측기와 연결해 주는 다리 역할을 합니다.

​

▶ 일반 DAC(MCP4725 / MCP4728 등)와 GP8403 비교

[최대 아날로그 출력 전압]

  • 일반 DAC: 입력 로직/전원 전압인 3.3V 또는 5V로 제한됩니다.
  • GP8403: 최대 0~10V까지 출력할 수 있습니다. 0~5V 범위는 소프트웨어로 선택합니다.

​

[전원 생성 기능]

  • 일반 DAC: 전원 생성 기능이 없어 외부 전원 레일에 전적으로 의존합니다.
  • GP8403: DC/DC 부스트 컨버터가 내장되어 12V를 최대 100mA까지 출력합니다.

​

[주요 활용 분야]

  • 일반 DAC: 저전압 센서 에뮬레이션, 기본 3.3V/5V 제어 신호
  • GP8403: 산업용 0~10V 액추에이터, OP 앰프 바이어스, 고전압 오디오 제어

━━━━━━━━━━━━━━━━━━━━

■ 2. 기술 사양과 실제 성능

안정적인 제어 루프와 임베디드 시스템을 설계하려면 칩 사양이 실제 동작에서 어떤 의미인지 알아 둬야 합니다.

​

▶ 분해능과 입력

  • 표준 I2C 인터페이스로 12비트 디지털 값을 입력받습니다. 2의 12제곱인 4096단계로, 0x000부터 0xFFF까지입니다.
  • 0~10V 모드: 1 LSB(Least Significant Bit, 최하위 비트) = 10V ÷ 4095 ≈ 약 2.44mV / 단계
  • 0~5V 모드: 1 LSB = 5V ÷ 4095 ≈ 약 1.22mV / 단계
  • → 0~5V 모드에서는 더 세밀하게 전압을 조정할 수 있습니다.

​

▶ 아날로그 출력 범위

  • 서로 독립된 2개 채널이 있습니다.
  • 각 채널은 내부 제어 레지스터로 0~5V 또는 0~10V 출력을 설정합니다.

​

▶ 내장 전원

  • 온보드 DC/DC 부스트 컨버터가 DAC 출력 드라이버에 전원을 공급합니다.
  • 외부 센서나 신호 처리 회로용으로 최대 100mA까지 쓸 수 있는 12V 보조 출력 단자도 제공합니다.

​

▶ 정밀도

  • 출력 전압 오차는 일반적으로 0.2%입니다.
  • 선형성 오차는 일반적으로 0.1%입니다.
  • → 10V 풀스케일 출력에서 0.2% 오차는 약 ±20mV입니다. 정상 상태 바이어스 설정, 산업용 제어 루프, 액추에이터 위치 제어에는 충분한 정확도입니다. 다만 고정밀 과학 계측용이라면 소프트웨어 보정을 추가하는 것이 좋습니다.

​

▶ 시간 특성과 동작 환경

  • 콜드 스타트 기동 시간은 2ms 미만입니다.
  • 동작 온도 범위는 산업용 수준인 -40℃ ~ 85℃입니다.

​

▶ 보호 기능과 물리 사양

  • GND(Ground, 접지) 단락 보호 기능이 내장되어 있습니다.
  • 크기: 25.5mm x 22.8mm x 12.0mm (1.0" x 0.9" x 0.5")
  • 무게: 3.6g (0.1oz)
  • 마운팅 홀 4개
  • → 벤치 테스트, 핫플러그, 현장 설치 중에 출력 핀이 실수로 GND와 단락될 수 있습니다. 이때 칩이 과전류 상태를 감지해 보호 모드로 들어가고 출력 드라이버를 멈춥니다. 덕분에 칩 손상이나 회로 파손을 막을 수 있습니다.

​

⚠ 꼭 알아 둘 점

DAC 출력단에는 칩 제조사 권장대로 10µF 필터 커패시터가 달려 있습니다. 이 커패시터는 고주파 노이즈를 억제하고 출력을 안정적으로 유지해 줍니다. 하지만 RC(Resistor-Capacitor, 저항-커패시터) 시정수 때문에 신호의 슬루율(변화 속도)이 제한됩니다.

그래서 GP8403은 DC 바이어스 설정, 기준 전압 생성, 느린 동적 제어에 적합합니다. 빠른 사인파나 오디오 합성 같은 고주파 AC(Alternating Current, 교류) 파형을 만드는 용도로는 맞지 않습니다.

━━━━━━━━━━━━━━━━━━━━

■ 3. 핀 배치와 하드웨어 연결

GP8403은 프로토타이핑부터 양산 환경까지 대응할 수 있도록 세 가지 연결 방식을 제공합니다.

​

▶ STEMMA QT / Qwiic 커넥터

  • 보드 좌우에 JST(Japan Solderless Terminal) SH 4핀 STEMMA QT 커넥터가 하나씩 있습니다.
  • 납땜 없이 I2C로 연결할 수 있습니다.
  • 표준 케이블로 호환 보드끼리 쉽게 데이지 체인 연결할 수 있습니다.

​

▶ 4핀 터미널 블록 (2.5mm, 납땜 완료)

  • 튼튼한 2.5mm 피치 나사식 터미널 블록이 PCB(Printed Circuit Board, 인쇄 회로 기판)에 미리 납땜되어 있습니다.
  • 다음 네 단자에 전선을 직접 단단히 고정할 수 있습니다.
  • 출력 채널 0(OUT0)
  • 출력 채널 1(OUT1)
  • 승압된 12V 전원 출력
  • GND

​

▶ 6핀 헤더 영역 (0.1" 표준 헤더 동봉)

  • 0.1" 피치 브레드보드용 헤더가 납땜되지 않은 상태로 함께 들어 있습니다.
  • 6핀 패드 열에 헤더를 납땜하면 브레드보드나 만능기판에 꽂아 쓸 수 있습니다.

​

▶ 로직 레벨과 I2C 버스 관련 참고 사항

보드의 I2C 로직은 입력 하이 레벨 전압 2.7V ~ 5.5V의 넓은 범위에서 동작합니다. 또 I2C 로직부가 승압된 아날로그 출력 드라이버와 분리되어 있습니다. 그래서 다음 보드들을 레벨 시프터 없이 I2C 버스에 바로 연결할 수 있습니다.

  • 3.3V 마이크로컨트롤러: 라즈베리 파이, Pico RP2040, ESP32 등
  • 5V 보드: 아두이노 UNO 등

​

💡 데이지 체인 연결 팁

STEMMA QT 보드에는 SCL/SDA 라인에 풀업 저항이 기본으로 달려 있습니다. 한 I2C 버스에 여러 보드를 연결하면 이 풀업 저항들이 병렬로 연결되어 전체 버스 저항이 낮아집니다. 호스트 마이크로컨트롤러의 I2C 드라이버가 늘어난 풀업 전류를 충분히 감당할 수 있는지 꼭 확인하세요.

━━━━━━━━━━━━━━━━━━━━

■ 4. 여러 보드 연결과 I2C 주소 설정

아날로그 채널이 2개보다 더 필요하다면 하드웨어 주소 점퍼를 바꿔 보세요. 여러 GP8403 보드를 같은 I2C 버스에 신호 충돌 없이 연결할 수 있습니다.

​

▶ 설정 방법

① PCB를 뒤집어 A0, A1, A2라고 표시된 주소 선택용 솔더 점퍼 3개를 찾습니다.

② 솔더 브리지를 연결해서 보드마다 서로 다른 3비트 주소 조합을 지정합니다.

③ STEMMA QT 케이블이나 브레드보드 배선으로 I2C 버스를 데이지 체인 연결합니다.

④ 호스트 소프트웨어에서 각 보드의 점퍼 상태에 맞는 주소로 인스턴스를 초기화합니다.

A0, A1, A2 점퍼 조합으로 한 I2C 버스에 GP8403 보드를 최대 8개까지 함께 연결할 수 있습니다. 그러면 정밀 아날로그 출력 채널을 최대 16개까지 독립적으로 쓸 수 있습니다.

━━━━━━━━━━━━━━━━━━━━

■ 5. NVM(Non-Volatile Memory, 비휘발성 메모리)과 부팅 시 기본 전압 설정

GP8403에는 NVM이 내장되어 있어 원하는 기본 출력 전압을 내부 레지스터에 영구 저장할 수 있습니다. 이후 전원을 켜거나 리셋하면 DAC가 NVM에서 이 값을 자동으로 불러옵니다. 호스트 컨트롤러의 명령을 기다리지 않고 설정된 전압을 바로 출력합니다.

​

⚠ 플랫폼 주의 사항

NVM에 기본값을 쓸 때는 일반적인 I2C 레지스터 쓰기를 사용하지 않습니다. 대신 SCL/SDA 라인으로 제조사 고유의 비트뱅잉 펄스 시퀀스를 보내야 합니다.

​

▶ 구조적인 배경

  • 아두이노 UNO의 ATmega328 같은 베어메탈 마이크로컨트롤러에서는 펌웨어가 GPIO(General-Purpose Input/Output, 범용 입출력) 방향 레지스터를 직접 제어할 수 있습니다. 그래서 I2C 하드웨어를 우회해 이 시퀀스를 비트뱅잉으로 보낼 수 있습니다.
  • 운영체제가 돌아가는 플랫폼(라즈베리 파이의 리눅스 등)에서는 사정이 다릅니다. 전용 하드웨어 I2C 주변장치를 쓰는 고급 RTOS(Real-Time Operating System, 실시간 운영체제) 마이크로컨트롤러도 마찬가지입니다. 운영체제 커널이나 하드웨어 잠금 때문에 사용자 코드가 SCL/SDA 핀을 직접 제어해 비트뱅잉할 수 없습니다.
  • → NVM 쓰기를 시도하기 전에 사용하는 플랫폼이 저수준 GPIO 직접 제어나 소프트웨어 비트뱅잉 I2C 드라이버를 지원하는지 먼저 확인하세요.

━━━━━━━━━━━━━━━━━━━━

■ 6. 소프트웨어 연동과 라이브러리

Adafruit는 빠르게 적용할 수 있도록 실사용 수준의 라이브러리와 예제 코드를 제공합니다.

​

▶ 아두이노

  • 공식 Adafruit GP8403 라이브러리를 지원합니다.
  • 다음 기능을 함수로 간단히 호출할 수 있습니다.
  • 출력 범위 선택
  • 12비트 원시 값 쓰기
  • 전압 변환
  • 예제는 8비트 AVR 마이크로컨트롤러는 물론 최신 32비트 플랫폼(ARM, ESP32, RP2040)과도 호환됩니다.

​

▶ Python / CircuitPython

  • 전용 Adafruit CircuitPython 드라이버를 지원합니다.
  • 리눅스가 돌아가는 라즈베리 파이 같은 싱글보드 컴퓨터와 CircuitPython을 실행하는 마이크로컨트롤러 양쪽에서 사용할 수 있습니다.

━━━━━━━━━━━━━━━━━━━━

■ 마무리

GP8403은 내장 부스트 컨버터라는 하드웨어 강점과 잘 정리된 소프트웨어 라이브러리를 함께 갖추고 있습니다. 그래서 마이크로컨트롤러로 넓은 전압 범위의 시스템을 손쉽게 제어할 수 있습니다.

​

보드를 연결하고 플랫폼에 맞는 드라이버만 불러오면 바로 12비트 정밀도로 고전압 아날로그 채널을 구동할 수 있습니다. 산업용 0~10V 장비를 마이크로컨트롤러로 다뤄 보고 싶은 분들께 추천합니다! 😊

━━━━━━━━━━━━━━━━━━━━

이 글이 도움이 되셨다면 제 홈페이지(댓글에 링크)를 방문해 보세요.

홈페이지에서는 다음과 같은 다양한 콘텐츠를 만나실 수 있습니다.

· 기술 블로그와 학습 자료

· pcb 제작 강의와 최신 소식

· ESP32와 IoT 하드웨어 프로젝트

· KiCad PCB 설계 템플릿 (Github, Gumroad)

· 펌웨어 개발

배우고, 만들고, 함께 성장하는 메이커들을 위한 공간으로 계속 발전시켜 나가겠습니다.

​

#Adafruit #GP8403 #DAC #I2C #0_10V #아날로그출력 #아두이노 #라즈베리파이 #ESP32 #CircuitPython #STEMMAQT #전자공작 #임베디드

식물의 토양 수분과 주변 환경을 측정하는 IoT 센서의 KC 전자파 적합등록을 최근 완료했습니다.

​

그동안 하드웨어 설계, PCB 제작, 펌웨어 개발, Android 앱과 클라우드 서버 구축까지 직접 진행해 왔습니다. 하지만 직접 개발한 제품을 국내에서 정식으로 판매하기 위해서는 반드시 넘어야 하는 관문이 바로 KC 인증입니다.

실제로 진행해 보니 시험기관 선정부터 기존 무선통신 모듈의 인증자료 확보, 시험 및 행정 절차까지 준비해야 할 일이 적지 않았습니다.

​

특히 ESP32 모듈의 기존 인증을 활용하기 위해 제조사인 Espressif에 직접 이메일을 보내 시험성적서를 요청했던 경험이 기억에 남습니다.

이번 글에서는 그 과정을 공유하고자 합니다.

​

1. 필요한 KC 인증은?

제가 제작한 IoT기기는 다음과 같은 기능을 갖춘 IoT 제품입니다.

​

  • ESP32-WROOM-32E 기반 Wi-Fi 및 Bluetooth 통신
  • 정전용량 방식의 토양 수분 측정
  • 온도, 습도 및 조도 측정
  • AA 배터리 4개로 작동
  • Android 앱 및 클라우드 서버 연동

​

무선통신 기능을 사용하기 때문에 전파법에 따른 적합성평가가 필요합니다.

KC 인증이라고 하면 하나의 인증만 생각하기 쉽지만, 실제로는 제품의 종류와 기능에 따라 전파법상 적합성평가, 전기용품 안전인증 등 서로 다른 제도가 적용됩니다.

따라서 가장 먼저 확인해야 할 것은 내 제품이 어떤 시험과 인증의 대상인지 파악하는 일입니다.

​

2. KC 인증 시험기관 선정 — KTC, KTL, KTR

국내에는 전자파 적합성평가 시험을 수행할 수 있는 여러 기관이 있습니다.

제가 검토한 대표적인 기관은 다음 세 곳입니다.

​

① KTC — 한국기계전기전자시험연구원

https://www.ktc.re.kr

전기전자 제품의 시험과 인증을 전문적으로 수행하는 기관으로, 전자파 적합성평가 시험을 비롯해 다양한 제품 시험을 지원합니다.

​

② KTL — 한국산업기술시험원

https://www.ktl.re.kr

전자파 적합등록 및 적합인증 관련 시험을 수행하는 기관입니다. 전기전자 및 산업용 기기의 시험과 평가 경험이 풍부합니다.

​

③ KTR — 한국화학융합시험연구원

https://www.ktr.or.kr

국립전파연구원이 지정한 시험기관으로, 전자파 및 무선통신 관련 시험을 비롯해 다양한 국내외 인증 시험을 지원합니다.

​

세 기관 모두 검토할 만한 곳이지만, 실제 시험 가능 범위와 비용, 일정은 제품별로 확인해야 합니다.

저는 최종적으로 KTC를 선택하여 시험 진행과 관련한 상담을 거쳐 전자파 적합성평가 시험을 의뢰했습니다.

소규모 개발자에게는 시험 비용뿐 아니라 기존 무선 모듈의 인증자료를 어떻게 활용할 수 있는지도 중요한 사항이었습니다.

​

이번 시험 견적은 대략 240만원(부가세 별도)정도 였습니다.

개인 개발자에게는 상당한 비용이지만, 제품을 정식 판매하기 위해 필요한 투자입니다.

​

3. ESP32 모듈의 기존 인증을 활용할 수 있을까?

제 IoT 모듈의 경우에는 Espressif의 ESP32-WROOM-32E 무선통신 모듈을 사용했습니다.

다행히 ESP32 모듈은 이미 국내 전파 인증을 받은 제품입니다.

​

기존 인증을 받은 모듈을 사용하면 완제품의 인증 절차도 간단하게 끝날 것으로 생각할 수 있지만, 실제로는 기존 모듈의 인증이 완제품에 자동으로 적용되는 것은 아닙니다.

완제품의 회로와 전원 구성, 안테나 및 무선통신 구성 등에 따라 추가 평가가 필요할 수 있습니다. 다만 시험기관이 인정하는 조건에 해당한다면 기존 무선 모듈의 시험 자료를 활용하여 일부 시험을 생략하거나 절차를 간소화할 수 있습니다.

​

이를 흔히 기존 모듈 인증의 활용 또는 인증 승계라고 부르기도 합니다.

여기서 중요한 점은 기존 모듈의 인증서뿐 아니라 시험성적서도 필요할 수 있다는 것입니다.

​

4. ESP32 인증서는 검색할 수 있지만, 시험성적서는?

ESP32 모듈의 국내 전파 인증 정보는 인터넷에서 비교적 쉽게 확인할 수 있습니다.

국립전파연구원의 적합성평가 관련 검색 서비스를 이용하거나 Espressif에서 제공하는 인증자료를 찾아보면 됩니다.

Espressif 공식 인증자료 페이지:

https://www.espressif.com/en/support/documents/certificates

​

그런데 문제가 하나 있습니다.

인증 등록 정보와 시험성적서는 서로 다른 문서라는 점입니다.

​

인증서나 적합성평가 등록 정보는 해당 모듈이 인증을 받았다는 사실을 확인하는 자료입니다.

반면 시험성적서(Test Report)는 실제 시험 조건, 측정 결과, 시험 규격 등이 포함된 기술 문서입니다.

제가 진행하는 절차에서는 기존 인증을 활용하기 위한 시험성적서가 필요했습니다.

이 문서는 일반적인 인터넷 검색만으로는 확보하기 어렵습니다. (ESP입장에서는 회사의 비밀이므로 공개하지 않기 때문입니다.)

그래서 ESP32의 제조사인 Espressif Systems에 직접 연락해서 확보해야합니다.

​

5. Espressif에 직접 시험성적서 요청하기

처음에는 해외 반도체 제조사가 개인 개발자의 요청에 응답해 줄지 걱정이 되었습니다.

Espressif 측에 현재 개발 중인 제품과 사용 중인 ESP32 모듈을 설명하고, 한국의 KC 인증을 위해 기존 시험성적서가 필요하다는 내용으로 이메일을 보냈습니다.

​

다음은 비슷한 상황에서 활용할 수 있는 이메일 예시입니다.

Subject: Request for KC Certification Test Report — ESP32-WROOM-32E

Dear Espressif Support Team,

I am developing an IoT product called ***, which uses the ESP32-WROOM-32E Wi-Fi/Bluetooth module.

I am currently preparing for KC certification of the final product in South Korea.

Our testing laboratory has requested the original RF test report associated with the Korean certification of the ESP32-WROOM-32E module, so that the existing certification data can be considered during the conformity assessment process.

Could you please provide the relevant KC certification test report or advise me on the procedure to obtain it?

I would be happy to sign a Non-Disclosure Agreement (NDA) if required.

Thank you very much for your assistance.

Best regards,

[신청인 이름 및 직함]

​

위 이메일은 당시 요청 취지를 바탕으로 작성한 예시이며, 실제 발송한 이메일의 원문은 아닙니다.

​

여기서 중요한 내용은 세 가지입니다.

  1. 사용 중인 (국내에서 이미 인증받은) ESP32 모듈의 정확한 모델명
  2. 한국 KC 인증을 위해 시험성적서가 필요하다는 목적
  3. 필요한 경우 NDA 체결이 가능하다는 의사

​

생각보다 훨씬 친절했던 Espressif의 대응

다행히 Espressif의 대응은 매우 친절하고 신속했습니다.

요청 이후 시험성적서 제공을 위한 NDA(Non-Disclosure Agreement, 비밀유지계약) 체결 절차가 진행되었습니다.

​

그리고 일주일도 걸리지 않아 NDA 체결과 필요한 시험성적서 확보까지 마칠 수 있었습니다.

처음에는 해외 제조사에서 시험자료를 받는 일이 복잡하고 오래 걸릴 것으로 예상했는데, 실제로는 생각보다 어렵지 않았습니다.

특히 개인 개발자의 요청에도 친절하게 대응해 준 Espressif 측에 감사한 마음이 들었습니다.

이번 경험을 통해 알게 된 것은 다음과 같습니다.

​

ESP32 모듈의 기존 인증 정보는 공개 검색으로 확보할 수 있지만, 상세 시험성적서는 제조사에 직접 요청해야 할 수 있습니다.

​

그리고 적절한 목적을 설명하고 NDA를 체결하면 필요한 자료를 제공받을 가능성이 있습니다.

물론 시험성적서 제공 여부와 절차는 모듈 모델, 문서의 기밀성 및 제조사의 정책에 따라 달라질 수 있습니다.

ESP32를 활용하여 제품을 개발하는 분이라면, 필요한 자료가 검색되지 않는다고 바로 포기하지 말고 Espressif에 직접 문의해 보시기를 권합니다.

​

6. KTC에서 전자파 시험 진행

필요한 기술자료를 준비한 뒤 KTC에 시험을 의뢰했습니다.

시험 접수일은 2026년 8월 말 경이었습니다.

​

시험 대상은 케이스까지 포함된 최종 제품 구성이었습니다.

전자파 적합성평가에서는 제품의 전자파 방출 특성과 해당 제품에 적용되는 전자파 관련 기준 등을 확인합니다.

Wi-Fi 통신 모듈, 전원 변환 회로, PCB 배선 및 각종 센서가 함께 동작하는 완제품이므로 시험 결과에 관심이 컸습니다.

​

다행히 시험 과정에서 큰 문제는 발생하지 않았습니다.

9월 20일 경 시험 완료 통보를 받았고, 9월 말에는 적합 판정을 받은 시험성적서가 발급되었습니다.

시험 접수부터 성적서 발급까지 약 한 달이 걸렸습니다.

​

7. 시험 통과 후 KC 적합등록

전자파 시험을 통과한 뒤에는 관련 시험성적서와 기술문서를 바탕으로 적합등록 절차를 진행했습니다.

필요한 부합확인서 등의 문서를 준비하고 행정 절차를 거쳐 KC 적합등록을 완료했습니다.

​

KC 적합등록번호: R-R-ZU8-***-*** (정확한 제품명은 ***으로 처리합니다.)

​

이로써 제 IoT제품은 국내 판매에 필요한 전파법상 적합등록 절차를 마쳤습니다.

직접 설계한 PCB와 펌웨어로 시작했던 시제품이 정식 판매를 위한 중요한 관문을 통과했다는 점에서 뜻깊은 순간이었습니다.

​

KC 인증 전에 미리 준비하면 좋은 것 — 제조자 식별부호

한 가지 미리 준비하면 좋은 것이 있습니다. 바로 제조자 식별부호(정식 명칭: 적합성평가 식별부호)입니다.

제 경우 KC 적합등록번호는 R-R-ZU8-*****-*****인데, 여기서 ZU8이 제조자 식별부호에 해당합니다.

이 부호는 영문 대문자와 숫자로 구성된 3자리 코드로, KC 적합성평가를 신청하는 업체나 개인을 식별하는 데 사용됩니다.

​

시험기관에서 신청을 대행해 주기도 하지만, 인증을 의뢰하기 전에 미리 발급받아 두는 것을 권합니다.

신청은 다음 사이트에서 가능합니다.

​

① 과학기술정보통신부 전자민원센터 — 온라인 신청

https://emsit.go.kr/cp/ai/SchCvaByBizTrg.do?bizCat=70

위 사이트에서 「방송통신기자재등의 적합성평가 식별부호 지정신청」 메뉴를 선택하면 됩니다.

​

② 정부24 — 적합성평가 식별부호 지정 안내

https://www.gov.kr/mw/AA020InfoCappView.do?CappBizCD=15701000046

정부24에서도 신청 방법, 준비 서류와 처리기관을 확인할 수 있습니다.

식별부호 지정 업무는 국립전파연구원에서 담당하며, 정부24 안내 기준으로 신청 수수료는 무료이고 처리기간은 근무시간 내 3시간(즉시 처리 민원)입니다.

물론 서류나 신청 상황에 따라 실제 처리시간은 달라질 수 있습니다.

KC 인증을 준비하고 있다면 시험기관에 문의하기 전에 이 식별부호부터 확인해 보시길 추천합니다.

​

8. AA 배터리를 사용하면 전기용품 안전인증은?

인증을 진행하면서 별도로 확인한 문제가 있었습니다.

바로 전기용품 안전인증입니다.

​

제 하드웨어는 AA 배터리 4개를 사용하는 저전압 IoT 기기입니다.

일반적인 가정용 AC 전원을 직접 사용하는 제품은 아니기 때문에 전기용품 안전인증 적용 여부가 궁금했습니다.

KTC에 문의한 결과, 제출한 제품 사양과 전원 조건을 기준으로 전기용품 안전인증 대상에 해당하지 않는 것으로 보인다는 검토 의견을 받았습니다.

​

다만 이는 제공한 사양에 대한 검토 의견이며, 법적 효력을 가진 최종 유권해석은 아닙니다. 따라서 동일하게 배터리로 구동하는 제품이라도 제품의 종류와 적용 법령을 별도로 확인하는 것이 좋겠습니다.

​

9. KC 인증을 직접 진행하며 배운 점

이번 과정을 거치며 몇 가지 실무적인 교훈을 얻었습니다.

​

첫째, 무선통신 모듈의 인증 여부를 설계 단계에서 확인하는 것이 좋습니다.

처음부터 국내 적합성평가를 받은 모듈을 사용하면 기존 인증자료 활용 가능성을 검토할 수 있습니다.

​

둘째, 인증서와 시험성적서는 다릅니다.

모듈의 인증 등록 정보를 찾았다고 해서 필요한 서류가 모두 준비된 것은 아닙니다. 시험기관에 어떤 자료가 필요한지 먼저 확인해야 합니다.

​

셋째, 해외 모듈 제조사에 직접 문의하는 것도 좋은 방법입니다.

Espressif의 경우 NDA 체결을 포함하여 일주일 이내에 시험성적서를 확보할 수 있었습니다. 예상보다 빠르고 친절한 대응이었습니다.

​

넷째, 시험 비용과 일정을 미리 고려해야 합니다.

이번에 제시된 시험 견적은 약 240만 원(부가세 별도)이었으며, 시험 접수부터 성적서 발급까지 약 한 달이 소요되었습니다.

​

다섯째, 제품의 설계 변경 시 인증에 미치는 영향을 확인해야 합니다.

KC 적합등록 이후에도 무선통신 모듈, 안테나, 전원회로, PCB 등 주요 설계를 변경한다면 추가적인 검토나 평가가 필요할 수 있습니다.

​

10. 이제 실제 제품을 시장으로

제 IoT 제품은 단순한 토양 수분 센서에서 출발했지만, 현재는 측정 데이터를 클라우드에 저장하고 관수 이력을 학습하며 물주기 시점을 안내하는 시스템으로 발전하고 있습니다.

하드웨어, 펌웨어, Android 앱, 클라우드 서버와 데이터 분석 기능까지 직접 개발하는 데 많은 시간이 필요했습니다.

​

그리고 이번 KC 적합등록을 통해 실제 제품을 판매하기 위한 또 하나의 과정을 마쳤습니다.

이제는 실제 사용자들과 함께 제품을 검증하고, 그 경험을 바탕으로 더욱 발전시켜 나가려고 합니다.

​

연구실에서 시작한 아이디어가 사람들의 일상에서 사용되는 제품으로 이어지는 과정.

앞으로도 그 과정을 기록해 보겠습니다.


이 글이 도움이 되셨다면 제 홈페이지(댓글에 링크)를 방문해 보세요.

홈페이지에서는 다음과 같은 다양한 콘텐츠를 만나실 수 있습니다.

· 기술 블로그와 학습 자료

· pcb 제작 강의와 최신 소식

· ESP32와 IoT 하드웨어 프로젝트

· KiCad PCB 설계 템플릿 (Github, Gumroad)

· 펌웨어 개발

배우고, 만들고, 함께 성장하는 메이커들을 위한 공간으로 계속 발전시켜 나가겠습니다.

​

#KC인증 #전자파적합등록 #ESP32 #Espressif #IoT #하드웨어개발 #메이커 #스타트업 #제품개발

 

1편에서는 Windows Terminal에 Arduino CLI 환경을 구성하고 Espressif의 Arduino-ESP32 Core를 설치하는 방법을 알아보았습니다.

​

이번에는 실제 ESP32-WROOM-32E 프로젝트를 대상으로 컴파일, firmware 업로드, Serial Monitor, 라이브러리 관리를 수행해 보겠습니다.

그리고 Arduino CLI를 사용하는 중요한 이유 중 하나인 반복적인 컴파일 시간을 줄이는 방법도 함께 살펴보겠습니다.


1. 테스트용 ESP32 프로젝트 만들기

예를 들어 다음 위치에서 프로젝트를 만들어 보겠습니다.

mkdir C:\Arduino\ESP32Test

cd C:\Arduino\ESP32Test

Arduino CLI에는 새로운 스케치를 만드는 기능도 있습니다.

arduino-cli sketch new ESP32Test

다음과 같은 프로젝트가 생성됩니다.

C:\Arduino\ESP32Test

└── ESP32Test

└── ESP32Test.ino

ESP32Test.ino에 간단한 코드를 작성합니다.

void setup() {

Serial.begin(115200);

Serial.println("ESP32-WROOM-32E started");

}

 

void loop() {

Serial.println("Hello from ESP32");

delay(1000);

}


2. ESP32-WROOM-32E용으로 컴파일하기

프로젝트 폴더로 이동합니다.

cd C:\Arduino\ESP32Test\ESP32Test

이제 다음 명령으로 컴파일합니다.

arduino-cli compile --fqbn esp32:esp32:esp32 .

마지막의 .은 현재 디렉터리를 의미합니다.

즉 현재 폴더에 있는 Arduino 프로젝트를 다음 보드 설정으로 컴파일하라는 의미입니다.

esp32:esp32:esp32

전체적인 과정은 다음과 같습니다.

ESP32Test.ino

│

↓

Arduino CLI

│

↓

Arduino-ESP32 Core

│

↓

Compiler

│

↓

Firmware

Arduino IDE에서 Verify 버튼을 누르던 작업을 명령 한 줄로 수행한 것입니다.


3. ESP32에 firmware 업로드하기

먼저 연결된 COM 포트를 확인합니다.

arduino-cli board list

ESP32가 COM5에 연결되어 있다고 가정하겠습니다.

컴파일된 firmware를 업로드하려면:

arduino-cli upload -p COM5 --fqbn esp32:esp32:esp32 .

를 실행합니다.

컴파일과 업로드를 연속해서 실행할 수도 있습니다.

arduino-cli compile --fqbn esp32:esp32:esp32 .

arduino-cli upload -p COM5 --fqbn esp32:esp32:esp32 .

Arduino IDE에서 하던:

Verify

↓

Upload

과정이 두 개의 명령으로 바뀐 것입니다.


4. Serial Monitor 사용하기

Arduino IDE를 열지 않고 ESP32가 보내는 Serial 메시지를 확인할 수도 있습니다.

arduino-cli monitor -p COM5

baud rate가 115200이라면 다음과 같이 지정합니다.

arduino-cli monitor -p COM5 --config baudrate=115200

앞서 작성한 프로그램이 실행되고 있다면 다음과 같은 메시지가 나타납니다.

ESP32-WROOM-32E started

Hello from ESP32

Hello from ESP32

Hello from ESP32

...

따라서 기본적인 ESP32 개발 과정 전체를 Windows Terminal 안에서 처리할 수 있습니다.

Code 수정

↓

Compile

↓

Upload

↓

Serial Monitor

↓

Code 수정

↓

...


5. Arduino CLI에서 라이브러리 검색하기

Arduino CLI에서는 Arduino IDE의 Library Manager에 해당하는 기능도 사용할 수 있습니다.

현재 설치된 라이브러리를 확인하려면:

arduino-cli lib list

특정 라이브러리를 검색하려면:

arduino-cli lib search "Adafruit SHT31"

라이브러리를 설치하려면:

arduino-cli lib install "Adafruit SHT31 Library"

라이브러리 index를 업데이트하려면:

arduino-cli lib update-index

설치된 라이브러리를 업데이트하려면:

arduino-cli lib upgrade

따라서 Board Manager뿐 아니라 Library Manager의 작업도 대부분 Terminal에서 수행할 수 있습니다.


6. Arduino CLI의 중요한 장점 — 반복 컴파일 줄이기

규모가 큰 ESP32 프로젝트에서는 컴파일 시간이 무시하기 어려워집니다.

예를 들어 프로젝트가 다음과 같은 구조라고 생각해 보겠습니다.

Main Firmware

│

├── WiFi

├── BLE

├── HTTPClient

├── Sensor Library

├── Display Library

└── 기타 Libraries

첫 번째 빌드에서는 프로젝트에 필요한 여러 소스 파일과 라이브러리, Core를 컴파일해야 합니다.

개념적으로 보면:

Application source ──→ Compile ──┐

ESP32 Core ──────────→ Compile ──┤

WiFi ────────────────→ Compile ──┤

BLE ─────────────────→ Compile ──┤→ Link → Firmware

Sensor Library ──────→ Compile ──┤

Other Libraries ─────→ Compile ──┘

프로젝트가 클수록 시간이 오래 걸립니다.

그런데 실제 firmware 개발에서는 모든 파일을 매번 수정하지 않습니다.

대부분은:

센서 처리 코드 한 부분 수정

↓

컴파일

↓

테스트

↓

조건문 수정

↓

컴파일

↓

테스트

처럼 일부 application code만 반복적으로 변경합니다.

ESP32 Core나 사용 중인 라이브러리는 그대로인 경우가 많습니다.

이런 경우 변경되지 않은 부분의 기존 컴파일 결과를 재사용할 수 있다면 전체 빌드 시간을 크게 줄일 수 있습니다.


7. Build Cache와 증분 빌드

첫 번째 컴파일에서는 필요한 파일들을 정상적으로 컴파일합니다.

FIRST BUILD

 

Application ─────────→ Compile

ESP32 Core ──────────→ Compile

WiFi ────────────────→ Compile

BLE ─────────────────→ Compile

Sensor Library ──────→ Compile

↓

Link

↓

Firmware

그 과정에서 재사용할 수 있는 빌드 결과가 남습니다.

이후 라이브러리나 ESP32 Core에 변화가 없고 application source 일부만 변경되었다면 개념적으로:

NEXT BUILD

 

Modified source ─────→ Compile ──┐

│

ESP32 Core ──────────→ Reuse ───┤

WiFi ────────────────→ Reuse ───┤

BLE ─────────────────→ Reuse ───┤→ Link → Firmware

Sensor Library ──────→ Reuse ───┘

와 같은 방식으로 불필요한 반복 컴파일을 줄일 수 있습니다.

따라서 라이브러리 자체가 변경되지 않았다면 매번 모든 라이브러리를 처음부터 다시 컴파일하는 작업을 줄일 수 있습니다.

ESP32처럼 Core와 라이브러리가 큰 플랫폼에서는 이런 차이가 반복적인 firmware 개발 과정에서 상당히 중요합니다.


8. Build Path를 유지하기

반복적인 개발에서는 build directory를 명시적으로 지정하는 것도 유용합니다.

예를 들어:

arduino-cli compile `

--fqbn esp32:esp32:esp32 `

--build-path .\build `

.

PowerShell의 ` 문자는 명령을 다음 줄로 이어 쓰기 위한 것입니다.

한 줄로 작성하면:

arduino-cli compile --fqbn esp32:esp32:esp32 --build-path .\build .

입니다.

프로젝트 구조는 다음과 같이 관리할 수 있습니다.

ESP32Project

│

├── ESP32Project.ino

│

├── source files

│

└── build

├── object files

├── libraries

└── firmware binaries

동일한 build directory를 유지하면 반복적인 개발에서 기존 빌드 결과를 관리하기도 쉬워집니다.


9. 언제 다시 컴파일되는가?

물론 모든 상황에서 이전 결과를 그대로 사용할 수 있는 것은 아닙니다.

다음과 같은 변화가 있으면 관련 소스가 다시 컴파일될 수 있습니다.

Library source 변경

ESP32 Arduino Core 변경

Board 설정 변경

Compiler option 변경

FQBN 변경

Build directory 삭제

Build/Cache 정리

예를 들어:

esp32:esp32:esp32

에서 다른 보드 설정으로 변경하면 기존 빌드 결과를 그대로 사용할 수 없는 부분이 생깁니다.

따라서 CLI를 이용한 반복 빌드의 핵심은 동일한 개발환경을 유지하면서 변경된 부분만 효율적으로 다시 빌드하는 것입니다.


10. 여러 ESP32에 같은 firmware 업로드하기

CLI의 또 다른 장점은 자동화입니다.

예를 들어 여러 ESP32 보드가 각각 다음 포트에 연결되어 있다고 가정하겠습니다.

COM5

COM6

COM7

PowerShell에서 다음과 같이 처리할 수 있습니다.

$ports = @("COM5", "COM6", "COM7")

 

foreach ($port in $ports) {

 

Write-Host "Uploading firmware to $port"

 

arduino-cli upload `

-p $port `

--fqbn esp32:esp32:esp32 `

.

}

한 번 컴파일한 firmware를 여러 동일한 보드에 순차적으로 업로드하는 작업을 자동화할 수 있습니다.

이는 한두 개의 개발보드를 테스트할 때보다 여러 개의 동일한 제품을 제작하는 단계에서 더욱 유용합니다.


11. Arduino CLI가 특히 유용한 경우

Arduino CLI는 단순한 프로젝트에서는 Arduino IDE보다 오히려 불편하게 느껴질 수도 있습니다.

하지만 다음과 같은 상황에서는 장점이 분명해집니다.

  • ESP32 firmware를 자주 수정하고 컴파일하는 경우
  • 규모가 큰 프로젝트에서 반복 빌드 시간을 줄이고 싶은 경우
  • 동일한 firmware를 여러 보드에 업로드하는 경우
  • 개발환경과 보드 옵션을 명령으로 명확하게 관리하고 싶은 경우
  • PowerShell이나 Python으로 firmware 작업을 자동화하려는 경우
  • Git이나 CI/CD 시스템과 firmware build를 연결하려는 경우
  • 제품 생산 과정에서 firmware 업로드를 자동화하려는 경우

특히 개발보드 수준을 넘어 실제 하드웨어 제품을 제작하기 시작하면 CLI의 활용도가 높아집니다.


12. Arduino IDE와 CLI의 차이

Arduino IDE와 Arduino CLI는 서로 경쟁하는 도구라기보다 목적이 조금 다릅니다.

Arduino IDE는 사람이 직접 개발하기 편한 환경입니다.

코드 작성

→ 버튼 클릭

→ 컴파일

→ 업로드

→ Serial Monitor

반면 Arduino CLI는 반복 가능하고 자동화 가능한 개발환경을 만드는 데 강점이 있습니다.

Source Code

↓

Arduino CLI

↓

Incremental Build

↓

Firmware

↓

Automatic Upload

↓

Device Test

따라서 초기 개발 단계에서는 Arduino IDE를 사용하다가 프로젝트가 커지면서 CLI를 함께 사용하는 방법도 좋습니다.


13. 정리

ESP32-WROOM-32E를 사용하는 일반적인 프로젝트라면 Arduino CLI 개발 흐름은 생각보다 단순합니다.

환경을 한 번 설정한 뒤 실제 개발에서 반복적으로 사용하는 핵심 명령은 몇 개뿐입니다.

컴파일:

arduino-cli compile --fqbn esp32:esp32:esp32 .

업로드:

arduino-cli upload -p COM5 --fqbn esp32:esp32:esp32 .

Serial Monitor:

arduino-cli monitor -p COM5 --config baudrate=115200

그리고 반복적인 개발에서는:

arduino-cli compile --fqbn esp32:esp32:esp32 --build-path .\build .

처럼 build path를 관리할 수 있습니다.

Arduino CLI의 진짜 장점은 단순히 Arduino IDE를 열지 않아도 된다는 데 있지 않습니다.

더 중요한 것은 개발 과정을 명령으로 정의할 수 있다는 점입니다.

이를 통해 변경되지 않은 Core와 라이브러리의 빌드 결과를 활용해 반복 작업을 효율화하고,

코드 수정

↓

증분 빌드

↓

Firmware 생성

↓

업로드

↓

테스트

라는 개발 사이클을 빠르게 반복할 수 있습니다.

그리고 이 과정을 PowerShell, Python 등의 스크립트와 결합하면 결국 ESP32 firmware의 빌드부터 여러 제품에 대한 업로드와 테스트까지 자동화하는 개발·생산 환경으로 확장할 수 있습니다.

Arduino 프로젝트가 단순한 실험을 넘어 실제 제품 개발 단계로 발전하고 있다면 Arduino CLI를 익혀둘 가치가 충분합니다.

 

#ArduinoCLI #ESP32 #아두이노 #펌웨어개발 #JLCPCB

 

___________________________________________________________________________

이 글이 도움이 되셨다면 제 홈페이지(댓글에 링크)를 방문해 보세요.

홈페이지에서는 다음과 같은 다양한 콘텐츠를 만나실 수 있습니다.

·         기술 블로그와 학습 자료

·         pcb 제작 강의와 최신 소식

·         ESP32와 IoT 하드웨어 프로젝트

·         KiCad PCB 설계 템플릿 (Github, Gumroad)

·         펌웨어 개발

배우고, 만들고, 함께 성장하는 메이커들을 위한 공간으로 계속 발전시켜 나가겠습니다.

이번에 다음 주말 메이커 페어에서 선보이고 베타 테스터분들에게 나누어 드릴 ESP32 기반 보드를 제작했습니다.

한 대는 현재 KC 무선 인증을 위해 인증기관에 보내 시험을 진행하고 있습니다. 인증이 모두 끝나면 직접 개발한 ESP32 제품을 실제 판매 가능한 제품으로 만들기까지 어떤 과정이 필요한지, 제가 경험한 KC 인증 과정도 별도의 글로 정리해볼 생각입니다.

이번 글에서는 그보다 먼저, 완성된 보드에 펌웨어를 반복해서 개발하고 업로드하면서 사용하게 된 Arduino CLI에 대해 이야기해보려고 합니다.

 


JLCPCB 협찬으로 제작한 ESP32 보드

먼저 이번 보드 제작은 JLCPCB의 지원을 받아 진행했습니다.

이번 제작에서는 기성품 방수 케이스에 넣을 수 있는 버전과 제가 직접 3D 프린터로 제작한 케이스를 사용하는 버전, 두 가지 형태로 준비했습니다.

방수 케이스용 PCB는 검은색 솔더마스크를 사용하고 흰색 실크스크린으로 로고와 QR코드 등을 표시했습니다.

예전에는 직접 설계한 PCB라고 하면 아무래도 '개발용 회로 기판'이라는 느낌이 강했는데, 실제로 완성된 보드를 받아보니 생각보다 상당히 깔끔합니다.

특히 검은색 PCB와 흰색 실크스크린의 조합은 완성품에 가까운 느낌을 줍니다.

보드 왼쪽에는 USB-C 커넥터를 배치해 PC와 직접 연결하여 펌웨어를 업로드할 수 있도록 만들었습니다.

실제 펌웨어를 업로드해 여러 센서와 Wi-Fi 통신 등을 테스트해보니 설계했던 대로 정상적으로 동작했습니다.

아두이노에 익숙한 분들이라면 어느 정도 경험이 쌓인 뒤에는 Arduino Uno와 같은 기성 개발보드만 사용하는 데서 한 단계 더 나아가, ESP32 모듈을 이용해 자신만의 개발보드를 직접 설계해보는 것도 재미있는 경험이라고 생각합니다.

​

ESP32 역시 Arduino 개발환경을 그대로 사용할 수 있고, 예제와 라이브러리가 매우 풍부하기 때문에 생각보다 접근하기 어렵지 않습니다.

PCB 제작 역시 JLCPCB와 같이 소량 PCB 제작과 SMT 조립을 지원하는 업체를 이용하면 예전처럼 큰 비용을 들이지 않고도 자신의 보드를 만들어볼 수 있습니다.

JLCPCB 관련 링크는 글 하단에 남겨두겠습니다.

이번 글을 마지막으로 이번 보드 제작과 관련한 JLCPCB 협찬 내용도 마무리합니다.


보드를 만들고 나니 새로운 문제가 생겼다

하드웨어 제작이 끝나면 그다음부터는 펌웨어를 계속 수정하고 테스트하는 과정이 시작됩니다.

저 역시 지금까지 ESP32 모듈의 펌웨어 개발에는 주로 Arduino IDE를 사용해왔습니다.

Arduino를 개발한다고 하면 보통 Arduino IDE를 먼저 떠올립니다.

코드를 작성하고, 보드를 선택하고, 포트를 선택한 뒤 Verify와 Upload 버튼을 누르면 컴파일부터 펌웨어 업로드까지 대부분 자동으로 처리됩니다.

작은 프로젝트에서는 이 방법이 매우 편리합니다.

​

그런데 프로젝트가 점점 커지면서 상황이 조금 달라졌습니다.

제가 사용하는 펌웨어 역시 처음에는 비교적 단순했지만 기능을 하나씩 추가하다 보니 코드가 수천 줄 규모로 늘어났고, 여러 ESP32 라이브러리까지 함께 사용하게 되었습니다.

그러면서 한 번 컴파일하고 펌웨어를 업로드하는 데 걸리는 시간이 점점 길어졌습니다.

특히 하드웨어를 개발할 때는 핀 설정 하나를 수정하거나 센서 동작을 확인하기 위해서도 다음 과정을 계속 반복하게 됩니다.

코드 수정

↓

컴파일

↓

업로드

↓

동작 확인

↓

다시 코드 수정

이런 작업을 하루에도 여러 번 반복하게 되는데, 제 개발환경에서는 한 번의 컴파일과 업로드에 10분 이상 걸리는 경우도 있었습니다.

코드 몇 줄을 수정하고 다시 결과를 확인하기 위해 긴 시간을 기다려야 하니 개발 흐름이 자주 끊겼습니다.

​

그래서 Arduino IDE 이외의 방법을 찾아보기 시작했습니다.

그 과정에서 사용하게 된 것이 바로 Arduino CLI(Command Line Interface)입니다.

Arduino CLI를 사용하면 Windows Terminal이나 PowerShell에서 Arduino 프로젝트의 보드 설치, 라이브러리 관리, 컴파일, 업로드, Serial Monitor 등을 명령어로 수행할 수 있습니다.

​

처음에는

"버튼 하나 누르면 되는 Arduino IDE를 두고 굳이 명령어를 사용해야 할까?"

라는 생각도 들었습니다.

하지만 실제로 사용해보니 반복적인 ESP32 개발에서는 오히려 CLI 방식이 상당히 편리했습니다.

특히 빌드 캐시와 기존 빌드 결과를 활용하면 변경되지 않은 ESP32 Core나 라이브러리 등을 매번 불필요하게 다시 컴파일하는 일을 줄일 수 있어 반복 빌드 시간이 크게 단축될 수 있습니다.

제 프로젝트에서는 기존에 10분 이상 걸리던 반복적인 컴파일과 업로드 과정이 경우에 따라 약 1분 정도까지 줄어들었습니다.

펌웨어를 자주 수정해야 하는 개발 과정에서는 상당히 큰 차이입니다.

​

그래서 이번 글에서는 Windows에 Arduino CLI를 처음 설치하는 것부터 시작해 Espressif의 ESP32-WROOM-32E 기반 보드를 개발할 수 있는 환경을 구성하는 방법까지 정리해보겠습니다.

그리고 2편에서는 실제 프로젝트를 이용해

컴파일 → 업로드 → Serial Monitor → 라이브러리 관리

과정을 수행하고, 반복적인 ESP32 펌웨어 개발에서 빌드 시간을 줄이는 방법을 자세히 살펴보겠습니다.


1. Arduino CLI란?

Arduino CLI는 Arduino 개발환경의 주요 기능을 명령줄에서 사용할 수 있도록 만든 공식 도구입니다.

기본적인 명령 구조는 다음과 같습니다.

arduino-cli <명령> <옵션>

Arduino IDE에서는 메뉴와 버튼을 이용해 작업하지만 Arduino CLI에서는 동일한 작업을 명령으로 수행합니다.

예를 들어,

Arduino IDE

Board Manager

↓

보드 선택

↓

Verify

↓

Upload

↓

Serial Monitor

라는 작업이 Arduino CLI에서는,

core install

↓

compile

↓

upload

↓

monitor

라는 명령의 흐름으로 바뀝니다.

처음에는 IDE가 더 편해 보일 수 있습니다. 하지만 명령은 그대로 저장해서 다시 실행할 수 있고 PowerShell이나 Python 스크립트와 결합할 수도 있기 때문에 반복 작업이 많아질수록 CLI의 장점이 커집니다.


2. Arduino CLI의 장점

Arduino CLI의 첫 번째 장점은 개발환경을 명령으로 정확하게 정의하고 반복할 수 있다는 것입니다.

예를 들어,

arduino-cli compile --fqbn esp32:esp32:esp32 .

이라는 명령만 보더라도 어떤 플랫폼과 보드를 대상으로 컴파일했는지를 알 수 있습니다.

두 번째 장점은 자동화가 쉽다는 것입니다.

컴파일과 업로드를 연속해서 수행하거나 여러 보드에 같은 firmware를 업로드하는 PowerShell 스크립트를 만들 수 있습니다.

세 번째로 중요한 장점은 반복적인 컴파일 시간을 줄일 수 있다는 것입니다.

ESP32 프로젝트는 사용자가 작성한 .ino 파일만 컴파일하는 것이 아닙니다. ESP32 Arduino Core와 프로젝트에서 사용하는 여러 라이브러리도 빌드 과정에 참여합니다.

프로젝트가 커지면 이 과정이 상당한 시간을 차지할 수 있습니다.

Arduino CLI에서는 빌드 캐시와 기존 빌드 결과를 활용하여 변경되지 않은 부분을 불필요하게 다시 컴파일하는 작업을 줄일 수 있습니다.

이에 대해서는 2편에서 자세히 살펴보겠습니다.


3. Windows에 Arduino CLI 설치하기

이제 실제로 Windows에 Arduino CLI를 설치해 보겠습니다.

Arduino CLI는 GUI 프로그램이 아니라 하나의 실행 파일을 중심으로 동작합니다. 따라서 Arduino IDE를 반드시 설치해야 Arduino CLI를 사용할 수 있는 것은 아닙니다.

Windows에서는 여러 가지 설치 방법을 사용할 수 있지만, 여기서는 가장 이해하기 쉬운 공식 Windows 실행 파일을 내려받아 설치하는 방법을 기준으로 설명하겠습니다.

3-1. Arduino CLI 다운로드

Arduino 공식 Arduino CLI 페이지 또는 GitHub의 Arduino CLI Releases 페이지에서 Windows용 패키지를 다운로드합니다.

Windows 64비트 PC라면 일반적으로 다음과 같은 Windows 64-bit 패키지를 선택하면 됩니다.

arduino-cli_x.x.x_Windows_64bit.zip

압축 파일을 풀면 핵심 실행 파일인 다음 파일을 확인할 수 있습니다.

arduino-cli.exe

즉 Arduino CLI의 핵심은 이 실행 파일입니다.


3-2. Arduino CLI 전용 폴더 만들기

예를 들어 다음 폴더를 만들어 보겠습니다.

C:\ArduinoCLI

다운로드한 arduino-cli.exe를 이 폴더에 복사합니다.

결과적으로:

C:\

└── ArduinoCLI

└── arduino-cli.exe

와 같은 구조가 됩니다.


3-3. 먼저 직접 실행해 보기

Windows Terminal 또는 PowerShell을 열고 다음과 같이 이동합니다.

cd C:\ArduinoCLI

이제:

.\arduino-cli.exe version

을 실행합니다.

정상적으로 설치되었다면 Arduino CLI의 버전 정보가 출력됩니다.

이 단계까지 성공했다면 arduino-cli.exe 자체는 정상적으로 실행되는 것입니다.

하지만 현재는 C:\ArduinoCLI 폴더 안에서 실행하고 있기 때문에 다른 디렉터리에서는 바로:

arduino-cli

라고 입력해 사용할 수 없습니다.

이를 해결하기 위해 Windows의 PATH 환경 변수에 Arduino CLI 폴더를 등록합니다.


4. Arduino CLI를 Windows PATH에 등록하기

PATH에 다음 폴더를 추가합니다.

C:\ArduinoCLI

Windows 검색창에서:

환경 변수

를 검색한 뒤 시스템 환경 변수 편집을 실행합니다.

그다음:

환경 변수

↓

사용자 변수

↓

Path

↓

편집

↓

새로 만들기

를 선택하고 다음 경로를 입력합니다.

C:\ArduinoCLI

확인을 눌러 설정을 저장합니다.

이미 실행 중인 Windows Terminal은 이전 PATH 정보를 가지고 있을 수 있으므로 Terminal을 닫고 새로 실행하는 것이 좋습니다.

이제 어느 폴더에서든:

arduino-cli version

을 실행합니다.

버전 정보가 출력되면 PATH 설정까지 정상적으로 완료된 것입니다.

또한 Windows에서 실제 어떤 실행 파일을 찾고 있는지 확인하려면 다음 명령을 사용할 수 있습니다.

where.exe arduino-cli

정상적으로 설정되었다면:

C:\ArduinoCLI\arduino-cli.exe

와 같이 표시됩니다.

이제 Arduino CLI 설치가 완료되었습니다.


5. Arduino CLI 초기 설정

Arduino CLI를 처음 사용하는 경우 설정 파일을 생성합니다.

arduino-cli config init

Arduino CLI는 이후 보드 패키지 URL 등의 설정을 이 configuration을 통해 관리합니다.

현재 설정을 확인하려면:

arduino-cli config dump

를 실행합니다.

여기까지 완료했다면:

Arduino CLI 다운로드

↓

arduino-cli.exe 설치

↓

PATH 등록

↓

arduino-cli version

↓

config init

이라는 기본 설치 과정이 끝난 것입니다.

이제 ESP32 개발환경을 추가해 보겠습니다.


6. ESP32-WROOM-32E는 어떤 보드를 설치해야 할까?

여기서 ESP32를 처음 CLI로 사용하는 경우 조금 혼동하기 쉬운 부분이 있습니다.

ESP32-WROOM-32E는 Arduino에서 설치하는 보드 패키지의 이름이 아닙니다.

ESP32-WROOM-32E는 Espressif에서 만든 ESP32 기반의 무선 MCU 모듈입니다.

개념적으로 보면 다음과 같습니다.

ESP32 SoC

│

↓

ESP32-WROOM-32E Module

│

↓

개발보드 또는 Custom PCB

따라서 WROOM-32E를 사용한다고 해서 ESP32-WROOM-32E라는 Arduino 패키지를 별도로 찾을 필요는 없습니다.

Espressif에서 제공하는 Arduino-ESP32 Core를 설치하면 됩니다.

일반적인 ESP32-WROOM-32E 기반 보드나 커스텀 PCB에서는 ESP32 Dev Module 설정을 사용할 수 있습니다.

이때 사용하는 FQBN은 다음과 같습니다.

esp32:esp32:esp32

FQBN은 Fully Qualified Board Name의 약자로 Arduino CLI가 정확히 어떤 플랫폼과 보드 설정을 사용할 것인지를 나타냅니다.


7. Espressif ESP32 Board Manager URL 등록

ESP32는 Arduino 기본 플랫폼이 아니므로 Espressif에서 제공하는 package index를 Arduino CLI에 알려줘야 합니다.

다음 명령을 실행합니다.

arduino-cli config add board_manager.additional_urls https://espressif.github.io/arduino-esp32/package_esp32_index.json

설정이 정상적으로 등록되었는지는 다음과 같이 확인합니다.

arduino-cli config dump

설정 내용에 다음과 같은 항목이 나타납니다.

board_manager:

additional_urls:

- https://espressif.github.io/arduino-esp32/package_esp32_index.json

한 번 설정해 두면 이후 명령마다 URL을 다시 입력할 필요가 없습니다.


8. ESP32 Package Index 업데이트

이제 사용 가능한 보드 패키지 정보를 갱신합니다.

arduino-cli core update-index

ESP32 Core가 검색되는지도 확인할 수 있습니다.

arduino-cli core search esp32

정상적으로 등록되어 있다면 다음과 비슷한 항목을 찾을 수 있습니다.

ID Name

esp32:esp32 esp32


9. Espressif Arduino-ESP32 Core 설치

이제 실제 ESP32 개발환경을 설치합니다.

arduino-cli core install esp32:esp32

이 과정에서는 ESP32 Arduino Core뿐 아니라 컴파일과 업로드에 필요한 compiler 및 관련 toolchain도 설치됩니다.

설치가 완료되면:

arduino-cli core list

를 실행합니다.

다음과 비슷하게 표시되면 설치가 완료된 것입니다.

ID Installed Latest Name

esp32:esp32 x.x.x x.x.x esp32


10. ESP32 Dev Module 확인하기

설치된 ESP32 보드 목록을 확인해 봅니다.

arduino-cli board listall | findstr ESP32

ESP32 Dev Module을 찾으려면:

arduino-cli board listall | findstr "ESP32 Dev"

일반적인 ESP32-WROOM-32E 기반 프로젝트에서 사용할 수 있는 설정은:

ESP32 Dev Module esp32:esp32:esp32

입니다.

따라서 이후 컴파일 명령에서 기억해야 할 FQBN은:

esp32:esp32:esp32

입니다.


11. USB로 연결된 ESP32 확인하기

ESP32 보드를 PC에 연결한 뒤:

arduino-cli board list

를 실행합니다.

예를 들어 보드가 COM5로 인식되었다면:

Port Protocol Type

COM5 serial Serial Port (USB)

와 같이 나타날 수 있습니다.

커스텀 ESP32-WROOM-32E 보드에서는 Arduino CLI가 정확한 보드 이름을 자동으로 알아내지 못할 수도 있습니다.

그 자체는 문제가 아닙니다.

중요한 것은 USB-UART 장치가 Windows에서 정상적으로 인식되어 COM 포트가 생성되는가입니다.

이 예에서는:

COM5

가 firmware를 업로드할 포트가 됩니다.


12. 전체 설치 과정 정리

처음 Windows PC에서 Arduino CLI와 ESP32-WROOM-32E 개발환경을 구축한다면 전체 과정은 다음과 같습니다.

Arduino CLI 다운로드

↓

arduino-cli.exe 설치

↓

Windows PATH 등록

↓

arduino-cli config init

↓

Espressif Package URL 등록

↓

core update-index

↓

esp32:esp32 Core 설치

↓

ESP32 Dev Module 확인

↓

ESP32 USB 연결

↓

COM Port 확인

명령만 다시 정리하면:

arduino-cli version

 

arduino-cli config init

 

arduino-cli config add board_manager.additional_urls https://espressif.github.io/arduino-esp32/package_esp32_index.json

 

arduino-cli core update-index

 

arduino-cli core install esp32:esp32

 

arduino-cli core list

 

arduino-cli board listall | findstr "ESP32 Dev"

 

arduino-cli board list

여기까지 성공했다면 Windows Terminal만으로 ESP32-WROOM-32E firmware를 빌드할 수 있는 환경이 완성된 것입니다.

처음 설치할 때는 Arduino IDE보다 과정이 많아 보이지만 환경 설정은 한 번만 하면 됩니다. 이후에는 몇 개의 명령만으로 개발을 반복할 수 있습니다.

​

그리고 Arduino CLI의 장점은 단순히 IDE 없이 개발할 수 있다는 데 그치지 않습니다.

프로젝트가 커질수록 빌드 결과와 캐시를 활용해 변경되지 않은 Core와 라이브러리의 불필요한 반복 컴파일을 줄이고, PowerShell 등의 스크립트를 이용해 컴파일과 업로드를 자동화할 수 있다는 점이 중요해집니다.

​

다음 편에서는 실제 ESP32 프로젝트를 이용해 컴파일 → 업로드 → Serial Monitor → 라이브러리 관리를 수행하고, 반복적인 firmware 개발에서 빌드 시간을 줄이는 방법을 자세히 살펴보겠습니다.

 

#ArduinoCLI #ESP32 #아두이노 #펌웨어개발 #JLCPCB

 

___________________________________________________________________________

이 글이 도움이 되셨다면 제 홈페이지(댓글에 링크)를 방문해 보세요.

홈페이지에서는 다음과 같은 다양한 콘텐츠를 만나실 수 있습니다.

·         기술 블로그와 학습 자료

·         pcb 제작 강의와 최신 소식

·         ESP32와 IoT 하드웨어 프로젝트

·         KiCad PCB 설계 템플릿 (Github, Gumroad)

·         펌웨어 개발

배우고, 만들고, 함께 성장하는 메이커들을 위한 공간으로 계속 발전시켜 나가겠습니다.

Arduino나 ESP32로 프로젝트를 만들다 보면 물체와의 거리를 측정해야 하는 경우가 꽤 많습니다.

로봇의 장애물 감지, 사람이나 물체의 접근 감지, 자동문, 비접촉 인터페이스, 탱크 수위 측정 등 활용 분야도 다양합니다.

가장 익숙한 방법으로는 초음파 거리 센서나 적외선(IR) 거리 센서가 있지만, 최근에는 빛이 왕복하는 시간을 직접 측정하는 ToF(Time of Flight) 방식의 센서도 쉽게 사용할 수 있습니다.

이번 글에서 살펴볼 제품은 Adafruit TMF8806 Time of Flight Distance Sensor입니다.

ams OSRAM의 TMF8806 칩을 기반으로 한 소형 breakout board로, 최대 약 5m 거리 측정, 최대 30Hz 측정 속도, I2C 통신을 지원합니다.

특히 Arduino부터 ESP32와 같은 32비트 MCU까지 비교적 간단하게 사용할 수 있다는 것이 특징입니다.


1. TMF8806는 어떤 센서인가?

TMF8806는 Direct Time-of-Flight(dToF) 방식의 거리 센서입니다.

주요 사양을 정리하면 다음과 같습니다.

  • 측정 거리: 약 20mm ~ 5m
  • 최대 측정 속도: 30Hz
  • 광원: 940nm VCSEL
  • Laser Safety: Class 1
  • 검출 방식: SPAD(Single-Photon Avalanche Diode)
  • 인터페이스: I2C
  • 단거리 저전력 모드: 약 200mm
  • Arduino / CircuitPython 지원
  • STEMMA QT / Qwiic 지원

센서 자체가 상당히 작기 때문에 로봇이나 IoT 기기처럼 공간이 제한된 프로젝트에도 적용하기 좋습니다.


2. dToF는 어떻게 거리를 측정할까?

TMF8806에서 가장 중요한 특징은 Direct Time-of-Flight, 즉 dToF 방식입니다.

일반적인 적외선 센서는 물체에서 반사되어 돌아오는 빛의 세기(Intensity)를 이용하여 거리를 추정하는 경우가 있습니다.

반면 ToF 센서는 빛을 물체에 발사하고, 그 빛이 다시 센서로 돌아오는 데 걸리는 시간을 측정합니다.

기본 원리는 간단합니다.

거리 = 빛의 속도 × 왕복 시간 ÷ 2

예를 들어 센서에서 레이저 펄스를 발사했다고 생각해 보겠습니다.

빛은 물체에 도달한 후 반사되어 다시 센서로 돌아옵니다. 센서는 이 왕복 시간을 매우 정밀하게 측정하고 이를 거리로 환산합니다.

문제는 빛의 속도가 약 30만 km/s로 엄청나게 빠르다는 것입니다.

따라서 실제 센서에서는 극도로 짧은 시간 차이를 검출해야 합니다.

TMF8806는 이를 위해 SPAD(Single-Photon Avalanche Diode) 검출기와 고감도 TDC(Time-to-Digital Converter) 구조를 사용합니다.


3. 940nm VCSEL 레이저 사용

TMF8806는 거리 측정을 위해 940nm VCSEL(Vertical-Cavity Surface-Emitting Laser)을 사용합니다.

매우 짧은 서브 나노초(sub-nanosecond) 펄스를 발사하고, 반사되어 돌아온 빛을 검출하여 거리를 계산합니다.

레이저를 사용한다고 하면 눈에 대한 안전성이 걱정될 수 있는데, TMF8806는 정상적인 사용 조건에서 Class 1 Eye Safety 등급으로 설계되어 있습니다.

또한 940nm는 적외선 영역이기 때문에 사람의 눈에는 센서가 발사하는 빛이 보이지 않습니다.


4. 기존 IR 거리 센서와 무엇이 다른가?

ToF 센서의 장점은 단순히 "레이저를 사용한다"는 데 있는 것이 아닙니다.

전통적인 반사광 세기 기반 IR 센서는 물체의 색상이나 표면 특성에 따라 반사되는 빛의 양이 달라질 수 있습니다.

예를 들어 같은 거리에 있는 물체라도 흰색 표면과 검은색 표면의 반사율은 상당히 다릅니다.

이 때문에 반사광의 세기를 거리로 환산하는 방식에서는 비선형성이나 측정 오차가 발생할 수 있습니다.

TMF8806와 같은 dToF 센서는 기본적으로 빛의 왕복 시간을 이용하기 때문에 이러한 문제를 줄일 수 있습니다.

물론 실제 ToF 센서도 물체의 반사율, 주변광, 측정 각도 등의 영향을 완전히 받지 않는 것은 아닙니다.

하지만 단순 반사광 세기 기반 센서에 비하면 훨씬 정교한 거리 측정이 가능합니다.


5. 초음파 센서와 비교하면?

Arduino를 처음 접했을 때 많이 사용하는 거리 센서 중 하나가 초음파 센서입니다.

초음파 센서는 소리를 발사하고 반사되어 돌아오는 시간을 측정한다는 점에서는 ToF 센서와 원리가 상당히 비슷합니다.

차이는 사용하는 매체입니다.

초음파 센서는 소리, TMF8806는 빛을 사용합니다.

초음파는 비교적 넓게 퍼지기 때문에 센서 앞에 여러 물체가 있는 환경에서는 원하는 물체만 정확하게 측정하기 어려운 경우가 있습니다.

TMF8806는 상대적으로 좁은 Field of View를 갖습니다.

  • 200mm 이하 단거리: 약 30°
  • 장거리 측정: 약 21°

따라서 센서 전방의 비교적 제한된 영역을 대상으로 거리 측정을 할 수 있습니다.

로봇이나 자동화 장비에서 특정 방향의 물체를 감지해야 할 때 유용한 특성입니다.


6. 최대 약 5m까지 측정

TMF8806의 실용적인 측정 범위는 약

20mm ~ 5m

입니다.

칩의 펌웨어에는 10m 관련 동작 모드가 언급되기도 하지만, 실제 안정적인 거리 측정 용도로는 최대 약 5m 정도를 기준으로 생각하는 것이 좋습니다.

최대 측정 속도는 약 30Hz이므로 1초에 최대 30번 정도 새로운 거리 데이터를 얻을 수 있습니다.

따라서 단순한 정적 거리 측정뿐 아니라 움직이는 물체의 거리 변화도 어느 정도 추적할 수 있습니다.


7. 200mm 단거리 저전력 모드

재미있는 기능 중 하나는 약 200mm 단거리 측정을 위한 저전력 모드입니다.

항상 5m까지 측정할 필요가 없는 애플리케이션도 많습니다.

예를 들어

  • 손 접근 감지
  • 뚜껑 개폐 감지
  • 기기 앞 사용자 감지
  • 소형 로봇 근접 센서
  • 비접촉 스위치

같은 용도에서는 수십 cm 정도만 측정하면 충분합니다.

이러한 경우 단거리 모드를 이용하여 보다 효율적으로 센서를 운용할 수 있습니다.

배터리 기반 IoT 프로젝트에서는 꽤 유용할 수 있는 기능입니다.


8. 작은 MCU에서도 사용하기 쉽다

TMF8806의 또 다른 장점은 비교적 작은 메모리 사용량입니다.

일부 ToF 센서는 부팅 과정에서 별도의 펌웨어 패치나 상당한 크기의 데이터를 센서에 전송해야 하는 경우가 있습니다.

반면 TMF8806는 5m 거리 측정을 위해 대용량 firmware patch를 다운로드할 필요가 없습니다.

덕분에 SRAM이 제한적인 MCU에서도 사용하기가 상대적으로 쉽습니다.

예를 들어

ATmega328 기반 Arduino Uno

같은 8비트 마이크로컨트롤러에서도 사용할 수 있습니다.

물론 ESP32, RP2040, SAMD 계열과 같은 현대적인 32비트 MCU에서도 사용할 수 있습니다.


9. 3.3V와 5V 시스템 모두 사용 가능

TMF8806 칩 자체는 기본적으로 3.3V 시스템을 기반으로 하지만, Adafruit breakout board에는 전압 레귤레이터와 레벨 시프팅 회로가 포함되어 있습니다.

따라서 약 3V~5V 전원 및 로직 환경에서 사용할 수 있습니다.

예를 들어

  • Arduino Uno
  • Adafruit Feather
  • ESP32
  • Raspberry Pi
  • RP2040 기반 보드

등과 연결하기 편리합니다.

특히 Arduino Uno처럼 5V 로직을 사용하는 시스템과 연결할 때 별도의 레벨 시프터를 추가하지 않아도 된다는 점은 프로토타이핑에서 큰 장점입니다.


10. STEMMA QT / Qwiic 지원

Adafruit breakout board답게 STEMMA QT / Qwiic 커넥터도 제공합니다.

보드 양쪽에 I2C 커넥터가 있어 호환 케이블을 이용하면 납땜 없이 센서를 연결할 수 있습니다.

즉,

MCU → Qwiic 케이블 → TMF8806

형태로 연결하여 빠르게 테스트할 수 있습니다.

또한 일반적인 breadboard용 핀도 제공되기 때문에 직접 점퍼선을 연결하거나 커스텀 PCB와 연결하는 것도 가능합니다.


11. Arduino와 CircuitPython 지원

통신 방식은 I2C입니다.

Adafruit에서는 TMF8806를 위한 소프트웨어 라이브러리와 예제를 제공하기 때문에 센서 레지스터를 처음부터 직접 제어할 필요가 없습니다.

대표적으로

  • Arduino C/C++
  • CircuitPython / Python 3

환경에서 사용할 수 있습니다.

따라서 센서를 구입한 뒤 예제 코드를 실행하여 실제 거리값을 확인하는 과정까지 비교적 빠르게 진행할 수 있습니다.


12. 크기와 무게

breakout board의 크기는 약

25.5 × 17.7 × 4.8mm

이며 무게는 약

1.7g

입니다.

센서 자체뿐 아니라 전압 레귤레이터, 레벨 시프터, I2C 커넥터까지 포함한 보드라는 점을 고려하면 상당히 작은 편입니다.

따라서 소형 로봇이나 휴대형 장치, IoT 센서 노드 등에 넣기에도 부담이 크지 않습니다.


13. TMF8806가 유용한 프로젝트

TMF8806의 특성을 생각해 보면 다음과 같은 프로젝트에 활용할 수 있습니다.

  • 로봇 장애물 감지
  • 물체 접근 감지
  • 비접촉 스위치
  • 자동문 및 스마트홈 센서
  • 탱크 및 용기의 수위 측정
  • 물체 위치 및 이동 감지
  • 소형 IoT 기기
  • 사용자 접근 감지
  • 간단한 제스처 인터페이스
  • 거리 변화 데이터 로깅

특히 초음파 센서보다 작은 크기와 좁은 감지 영역이 필요한 프로젝트에서 활용도가 높습니다.


마치며

TMF8806는 작은 크기의 breakout board이지만 상당히 흥미로운 기능을 갖춘 거리 센서입니다.

20mm부터 최대 약 5m까지의 거리 측정, 최대 30Hz 업데이트, 940nm VCSEL, SPAD 기반 dToF 측정, I2C 인터페이스, Arduino와 CircuitPython 지원이라는 구성이 특징입니다.

무엇보다 Adafruit breakout board에는 레귤레이터와 레벨 시프팅 회로, STEMMA QT/Qwiic 커넥터까지 포함되어 있기 때문에 ToF 기술을 직접 실험해 보고 싶은 메이커에게 접근성이 좋습니다.

기존의 초음파 센서나 단순 IR 거리 센서보다 조금 더 정밀하고 방향성이 있는 거리 측정이 필요하다면 한 번 사용해 볼 만한 센서입니다.

향후에는 많이 사용되는 STMicroelectronics의 VL53L4CD, VL53L4CX 계열 ToF 센서와 TMF8806를 비교해 보는 것도 재미있을 것 같습니다.

​

#TMF8806 #ToF센서 #거리센서 #Arduino #ESP32

센서 데이터를 수집하는 시스템을 만들려고 하면 보통 아두이노 IDE를 설치하고, 센서별 라이브러리를 찾고, 예제 코드를 수정한 뒤 배선과 납땜까지 해야 합니다.

여러 센서를 동시에 사용하거나 데이터를 클라우드로 전송하려면 작업은 더욱 복잡해집니다.

​

SparkFun DataLogger IoT(SKU: DEV-22462)는 이러한 과정을 크게 줄여주는 제로 코드(Zero-code) 데이터 로거입니다.

Qwiic 케이블로 센서를 연결하고 전원을 켜면 호환 센서를 자동으로 감지하고 설정해 데이터를 기록합니다. 복잡한 펌웨어를 직접 작성하지 않고도 환경 모니터링, 위치 추적, 장비 상태 기록과 같은 프로젝트를 빠르게 시작할 수 있습니다.

Qwiic 센서를 연결하면 자동으로 인식

SparkFun DataLogger IoT의 가장 큰 장점은 플러그 앤 플레이 방식의 자동 감지 기능입니다.

보드가 켜지면 Qwiic 버스에 연결된 센서를 검색하고, 지원되는 장치라면 자동으로 설정합니다.

Qwiic은 I²C 기반 연결 시스템으로, 커넥터 방향이 정해져 있어 배선 실수를 줄일 수 있고 납땜 없이 여러 센서를 연속으로 연결할 수 있습니다. 센서별 주소와 초기화 코드를 직접 관리해야 하는 부담도 줄어듭니다.

​

자동 감지를 지원하는 센서와 장치의 범위도 매우 넓습니다.

위치 및 GPS(GNSS)

u-blox의 ZED-F9P, NEO-M9N, MAX-M10S 등과 연결하면 위도, 경도, 고도, 이동 속도, 시간 정보를 기록할 수 있습니다.

이동체 추적, 야외 관측 장비, 현장 데이터 수집 시스템 등에 활용하기 좋습니다.

​

거리 및 움직임 감지

VL53L1X, VL53L5, TMF8820과 같은 ToF(Time-of-Flight) 센서 및 이미저를 이용하면 물체와의 거리, 움직임, 근접 여부, 공간 내 재실 상태 등을 측정할 수 있습니다.

​

환경 및 대기질 측정

BME280, CCS811, SGP40, SCD40, ENS160 등의 센서를 조합하면 온도, 습도, 기압, 이산화탄소, VOC 등 다양한 환경 정보를 기록할 수 있습니다.

실내 공기질 측정기, 스마트팜, 식물 생육환경 모니터, 창고 및 연구실 환경 기록 시스템을 비교적 간단하게 구성할 수 있습니다.

​

전문 측정 장치

이 밖에도 바이오메트릭 허브, NAU7802 기반 Qwiic 정밀 저울, 전력량계, 고정밀 ADC, RGB 인코더, RFID 및 Dynamic NFC/RFID Tag 등 다양한 전문 보드를 지원합니다.

지원 장치는 펌웨어 업데이트를 통해 추가될 수 있으므로, 실제 프로젝트를 시작하기 전에는 SparkFun이 제공하는 최신 호환 장치 목록을 확인하는 것이 좋습니다.

​

데이터는 microSD 카드에 CSV 또는 JSON으로 저장

측정된 데이터는 보드에 장착한 microSD 카드에 직접 저장할 수 있습니다.

최대 32GB 용량의 FAT16 또는 FAT32 형식 카드를 지원하며, 저장 형식은 CSV 또는 JSON 중에서 선택할 수 있습니다.

  • CSV: 엑셀, 구글 스프레드시트, Python, MATLAB 등으로 데이터를 분석할 때 편리합니다.
  • JSON: 웹 서비스, 서버, 데이터베이스 또는 애플리케이션과 연동할 때 유용합니다.

인터넷 연결이 불안정한 야외나 지하 공간에서는 SD 카드에 데이터를 보관하고, 네트워크에 연결할 수 있는 환경에서는 클라우드 전송 기능을 함께 사용하는 방식으로 시스템을 구성할 수 있습니다.

​

ESP32-WROOM-32E를 이용한 Wi-Fi 및 클라우드 연결

SparkFun DataLogger IoT에는 ESP32-WROOM-32E 모듈이 탑재되어 있습니다.

2.4GHz Wi-Fi를 통해 측정 데이터를 로컬에 저장하는 데 그치지 않고 여러 IoT 플랫폼과 서버로 전송할 수 있습니다.

​

지원하는 주요 연결 방식과 서비스는 다음과 같습니다.

  • MQTT Client 및 MQTT Secure Client
  • AWS IoT
  • Microsoft Azure IoT
  • ThingSpeak MQTT
  • Arduino Cloud
  • MachineChat
  • HTTP IoT

MQTT와 HTTP를 지원하므로 상용 IoT 플랫폼뿐 아니라 직접 구축한 서버나 대시보드와 연결하는 것도 가능합니다.

센서 데이터를 원격으로 확인하거나 여러 장소의 측정값을 한곳에 모아 관리하려는 프로젝트에 적합합니다.

​

초당 26회부터 하루 1회까지 기록 주기 설정

측정 주기는 프로젝트의 목적에 맞게 폭넓게 설정할 수 있습니다.

빠르게 변하는 현상을 관찰할 때는 초당 최대 약 26회까지 기록할 수 있으며, 장기간의 환경 변화를 확인할 때는 24시간에 한 번만 측정하도록 설정할 수도 있습니다.

​

예를 들어 다음과 같이 사용할 수 있습니다.

  • 움직임이나 장비 상태 변화: 짧은 간격으로 빠르게 기록
  • 실내 온습도와 공기질: 수분 또는 수십 분 간격으로 기록
  • 토양 수분과 식물 생육환경: 수십 분 또는 수시간 간격으로 기록
  • 야외 장기 관측: 하루 수회 또는 하루 1회 기록

기록 주기를 늘리면 데이터의 시간 해상도는 낮아지지만 전력 소비와 저장 공간 사용량을 줄일 수 있습니다.

따라서 실제 프로젝트에서는 필요한 변화 속도와 배터리 사용 시간을 함께 고려해야 합니다.

​

약 200µA의 초저전력 슬립 모드

슬립 모드가 활성화되었을 때 소비 전류는 약 200µA 수준입니다.

측정 사이에 보드를 슬립 상태로 두면 배터리 기반의 장기 모니터링 장치를 구성하는 데 유리합니다.

​

다만 실제 배터리 지속 시간은 연결한 센서의 수와 소비전력, Wi-Fi 접속 시간, 데이터 전송 빈도, 측정 주기, 배터리 용량 등에 따라 크게 달라질 수 있습니다.

특히 Wi-Fi 연결과 클라우드 전송은 순간적으로 비교적 큰 전류를 사용하므로, 장기 운용이 목적이라면 전송 횟수를 줄이고 데이터를 일정량 모아 한꺼번에 보내는 방식을 고려할 수 있습니다.

​

LiPo 충전 회로와 배터리 잔량 측정 기능 내장

보드에는 싱글셀 LiPo 배터리를 위한 MCP73831 충전 회로가 내장되어 있으며, 충전 전류는 약 500mA로 설정되어 있습니다.

​

또한 MAX17048 LiPo 연료 게이지를 통해 배터리 잔량을 모니터링할 수 있습니다.

전원은 다음과 같은 방식으로 공급할 수 있습니다.

  • USB Type-C
  • VIN 포트
  • LiPo 배터리 커넥터

USB-C로 개발과 설정을 진행한 뒤, 실제 설치 환경에서는 LiPo 배터리로 운용하는 구성이 가능합니다.

배터리 잔량까지 데이터로 관리할 수 있어 원격 설치 장비의 유지보수 시점을 판단하는 데도 도움이 됩니다.

​

시리얼 메뉴로 간단하게 설정

별도의 그래픽 프로그램을 설치하지 않아도 시리얼 터미널에서 주요 기능을 설정할 수 있습니다.

  1. 보드와 PC를 USB-C 케이블로 연결합니다.
  2. 시리얼 터미널을 열고 통신 속도를 115200 baud로 설정합니다.
  3. 키보드의 아무 키나 누릅니다.
  4. 화면에 표시되는 텍스트 기반 메뉴에서 센서, 기록 주기, 파일 형식, Wi-Fi 및 클라우드 연결 등을 설정합니다.

메뉴 방식이라 각종 설정값을 코드 안에서 찾아 수정하고 다시 컴파일하는 과정이 필요 없습니다.

코딩에 익숙하지 않은 사용자도 안내에 따라 데이터 로깅 시스템을 구성할 수 있고, 개발자에게는 초기 프로토타입 제작 시간을 줄여준다는 장점이 있습니다.

​

OTA와 microSD를 이용한 펌웨어 업데이트

새로운 센서 지원이나 기능이 추가되었을 때는 Wi-Fi를 이용한 OTA(Over-the-Air) 업데이트를 실행할 수 있습니다.

네트워크 사용이 어려운 경우에는 최신 펌웨어 파일을 microSD 카드에 저장한 뒤 보드를 부팅하는 방식으로도 업데이트할 수 있습니다.

직접 소스 코드를 내려받아 개발 환경을 구성하고 펌웨어를 빌드하지 않아도 되므로, 여러 대의 데이터 로거를 운용하거나 현장 장비를 관리할 때 특히 편리합니다.

​

어떤 프로젝트에 활용할 수 있을까?

SparkFun DataLogger IoT는 센서 조합에 따라 다양한 시스템의 중심 장치로 활용할 수 있습니다.

  • 온도·습도·CO₂·VOC를 기록하는 실내 공기질 모니터
  • 토양 수분·온습도·조도를 측정하는 식물 생육환경 기록 장치
  • GNSS와 환경 센서를 결합한 이동형 야외 관측 장비
  • ToF 센서를 이용한 거리·재실·움직임 모니터
  • 로드셀과 NAU7802를 이용한 무게 변화 기록 시스템
  • 전압·전류·전력 사용량을 기록하는 에너지 모니터
  • RFID/NFC와 센서를 결합한 시료 및 물품 관리 시스템

특히 센서 조합을 먼저 시험해 보고 싶은 연구자, 메이커, 교육자에게 유용합니다.

제로 코드 방식으로 측정 가능성을 빠르게 확인한 뒤, 필요에 따라 전용 하드웨어나 맞춤형 펌웨어로 발전시키는 프로토타이핑 도구로 사용할 수 있습니다.

​

마무리

SparkFun DataLogger IoT는 센서 자동 감지, SD 카드 기록, Wi-Fi 클라우드 전송, 저전력 동작, 배터리 관리 기능을 한 보드에 통합한 제품입니다.

Qwiic 센서를 연결하고 메뉴에서 필요한 항목을 설정하는 것만으로 데이터 수집을 시작할 수 있다는 점이 가장 큰 특징입니다.

​

아두이노 환경 설정과 라이브러리 관리, 센서 초기화 코드 작성에 시간을 들이기보다 실제 측정과 데이터 분석에 집중하고 싶다면 매력적인 선택지가 될 수 있습니다.

여러 종류의 센서를 빠르게 조합해 아이디어를 검증하려는 경우에도 활용 가치가 높습니다.

​

여러분이라면 이 데이터 로거에 어떤 센서를 연결해 보고 싶으신가요?

온습도와 CO₂를 이용한 실내 공기질 모니터, 토양 수분과 조도를 이용한 식물 환경 기록 장치, 또는 GNSS를 결합한 야외 관측 시스템도 흥미로운 프로젝트가 될 수 있습니다.

​

#SparkFun #DataLoggerIoT #데이터로거 #제로코드 #Qwiic #ESP32 #ESP32WROOM32E #IoT #사물인터넷 #센서 #센서데이터 #데이터수집 #환경모니터링 #스마트팜 #메이커 #아두이노 #MQTT #AWSIoT #AzureIoT #ThingSpeak #microSD #OTA #임베디드시스템 #전자공작

Espressif가 ESP32-C61-MINI-1과 ESP32-C61-MINI-1U 모듈의 판매를 시작했습니다.

​

ESP32-C61은 2.4GHz Wi-Fi 6(802.11ax)와 Bluetooth LE 5.3을 지원하는 저가형 RISC-V MCU입니다.

특히 새롭게 등장한 MINI 모듈은 크기가 작으면서도 Wi-Fi 6, BLE, USB Serial/JTAG, ADC 등 IoT 기기에 필요한 주요 기능을 갖추고 있습니다.

기사 작성 시점 기준으로 5개 묶음이 약 10.7달러에 판매되어, 모듈 하나당 약 2달러 수준이라는 점도 눈에 띕니다.


1. ESP32-C61이란?

ESP32-C61은 Espressif가 저가형 IoT 시장을 겨냥해 개발한 MCU입니다.

​

기본 구조는 다음과 같습니다.

  • 32비트 RISC-V 싱글코어
  • 최대 클럭 160MHz
  • SRAM 320KB
  • ROM 256KB
  • 최대 8MB Quad SPI Flash
  • 최대 8MB PSRAM
  • 2.4GHz Wi-Fi 6
  • Bluetooth LE 5.3
  • 최대 23 GPIO

​

기존 ESP32-C6와 비슷한 위치에 있지만 중요한 차이가 있습니다.

ESP32-C6가 Wi-Fi + BLE뿐 아니라 IEEE 802.15.4도 지원하는 반면, ESP32-C61에는 802.15.4 무선 기능이 없습니다. 따라서 Thread나 Zigbee가 필요하지 않고 Wi-Fi와 BLE만 사용하는 IoT 제품이라면 C61이 훨씬 흥미로운 선택지가 됩니다.​


2. ESP32-C61-MINI-1과 MINI-1U

ESP32-C61 MINI 시리즈는 두 가지 안테나 버전으로 제공됩니다.

​

ESP32-C61-MINI-1

PCB 안테나가 모듈에 내장된 일반적인 형태입니다.

크기는 약

13.2 × 16.6 × 2.4mm

입니다.

별도의 외부 안테나가 필요하지 않으므로 일반적인 센서 노드, 스마트홈 기기, 소형 IoT 장치 등에 사용하기 편리합니다.

​

ESP32-C61-MINI-1U

기본 기능은 MINI-1과 거의 같지만 PCB 안테나 대신 외부 안테나 커넥터를 사용합니다.

공식 데이터시트 기준 모듈 본체 크기는 약

13.2 × 12.5 × 2.4mm

입니다.

따라서 금속 케이스 내부에 모듈을 설치하거나, 안테나 위치를 PCB와 분리해야 하거나, 외장 안테나를 사용해 RF 성능을 확보해야 하는 제품에 적합합니다.


3. CPU와 메모리

ESP32-C61의 CPU는

32-bit RISC-V Single Core / 최대 160MHz

입니다.

ESP32-S3처럼 고성능 듀얼코어 MCU는 아닙니다.

대신 센서 측정, Wi-Fi 통신, BLE 연결, MQTT, HTTP API, 스마트홈 장치 같은 일반적인 IoT 애플리케이션에는 충분한 수준입니다.

​

메모리는 다음과 같습니다.

항목
사양
CPU
32-bit RISC-V
Core
Single Core
최대 클럭
160MHz
SRAM
320KB
ROM
256KB
Flash
최대 8MB
PSRAM
최대 8MB

특히 최대 8MB PSRAM을 구성할 수 있다는 점은 작은 IoT 모듈치고 상당히 유용합니다.​


4. 핵심은 Wi-Fi 6

ESP32-C61의 가장 중요한 특징은 저렴한 가격보다는 Wi-Fi 6 지원이라고 볼 수 있습니다.

2.4GHz 대역에서 IEEE 802.11ax를 지원하며 Wi-Fi 6 모드에서는 20MHz 채널을 사용합니다.

​

주요 기능에는 다음이 포함됩니다.

  • MCS0 ~ MCS9
  • Uplink OFDMA
  • Downlink OFDMA
  • Downlink MU-MIMO
  • Beamformee
  • CQI
  • DCM
  • Spatial Reuse
  • Target Wake Time(TWT)

특히 IoT 장치에서는 OFDMA와 TWT에 주목할 만합니다.​


5. TWT가 IoT에서 중요한 이유

TWT(Target Wake Time)는 Wi-Fi 6에서 IoT 개발자에게 상당히 흥미로운 기능입니다.

기존 Wi-Fi IoT 장치는 AP와의 연결을 유지하기 위해 주기적으로 깨어나 통신해야 합니다.

TWT를 사용하면 AP와 장치가 "언제 깨어나서 통신할 것인가"를 미리 조정할 수 있습니다.

​

따라서 배터리 기반 센서 노드처럼 대부분의 시간을 절전 상태에서 보내고 필요할 때만 통신하는 장치에서 전력 소비를 줄이는 데 도움이 될 수 있습니다.

물론 실제 배터리 수명은 AP의 TWT 지원 여부, 펌웨어 구현, Wi-Fi 연결 시간, RF 환경, 센서 소비전력 등에 따라 크게 달라집니다.

따라서 단순히 "Wi-Fi 6이므로 배터리 수명이 길다"고 판단하기보다는 실제 제품 환경에서 측정해야 합니다.


6. 기존 Wi-Fi 공유기에서도 사용할 수 있을까?

가능합니다.

ESP32-C61은 Wi-Fi 6만 지원하는 것이 아니라 기존 IEEE 802.11b/g/n과도 호환됩니다.

Wi-Fi 4(802.11n)에서는 20MHz와 40MHz 대역폭을 지원하며 최대 데이터 속도는 150Mbps입니다.

따라서 반드시 Wi-Fi 6 공유기를 사용해야 하는 것은 아닙니다.

기존 2.4GHz Wi-Fi 네트워크에서도 사용할 수 있다는 의미입니다.


7. Bluetooth LE 5.3

ESP32-C61은 Bluetooth LE 5.3 인증을 지원합니다.

​

주요 기능은 다음과 같습니다.

  • BLE Mesh
  • 최대 20dBm High Power Mode
  • 125kbps
  • 500kbps
  • 1Mbps
  • 2Mbps
  • Advertising Extensions
  • Multiple Advertisement Sets
  • Channel Selection Algorithm #2
  • LE Power Control

​

Wi-Fi와 Bluetooth는 하나의 안테나를 공유하기 때문에 내부적으로 두 무선 시스템을 위한 coexistence 기능도 제공합니다.

이 구성은 특히 IoT 제품에 유용합니다.

예를 들어 초기 설정에서는 스마트폰과 BLE로 연결하고,

스마트폰 → BLE → ESP32-C61 → Wi-Fi 설정 → Cloud

방식으로 Wi-Fi SSID와 비밀번호를 전달한 뒤 이후에는 Wi-Fi를 통해 클라우드와 통신하는 구조를 만들 수 있습니다.


8. 사용할 수 있는 주변장치

작은 MINI 모듈이지만 MCU 주변장치는 상당히 다양합니다.

대표적으로 다음 기능을 사용할 수 있습니다.

  • GPIO
  • SPI
  • UART
  • I2C
  • I2S
  • LED PWM
  • USB Serial/JTAG
  • GDMA
  • JTAG Debug
  • ADC
  • 내부 Temperature Sensor
  • Analog Voltage Comparator
  • General-purpose Timer
  • System Timer
  • Watchdog Timer

센서 기반 IoT 장치를 만들기에는 충분한 구성입니다.


9. USB Serial/JTAG 지원

개발자 입장에서 반가운 부분 중 하나가 USB Serial/JTAG Controller입니다.

USB를 이용해 디버깅과 시리얼 통신을 구성할 수 있기 때문에, PCB 설계에 따라 별도의 USB-to-UART 칩 없이 개발 인터페이스를 구성할 수 있습니다.

​

ESP32 보드를 직접 설계하는 경우 CH340, CP2102 같은 별도 USB-UART IC의 필요성을 줄일 수 있어 PCB 공간과 BOM 비용을 절약할 가능성이 있습니다.

다만 실제 제품 PCB에서는 USB 회로, ESD 보호, 부트/다운로드 방식 등을 데이터시트와 Hardware Design Guideline에 맞춰 설계하는 것이 좋습니다.


10. 전원 조건

모듈의 권장 전원 범위는

3.0 ~ 3.6V

입니다.

따라서 일반적으로 3.3V 전원 시스템을 사용하면 됩니다.

동작 온도 범위는

-40°C ~ +85°C

입니다.

배터리 기반 제품을 설계한다면 단순히 MCU의 평균 소비전력만 볼 것이 아니라 Wi-Fi 송신 시 순간 전류를 충분히 공급할 수 있도록 전원 IC와 디커플링 커패시터를 설계해야 합니다.


11. 어떤 모듈을 선택해야 할까?

일반적인 IoT 제품이라면 우선 ESP32-C61-MINI-1을 고려할 수 있습니다.

PCB 안테나가 이미 내장되어 있기 때문에 외부 안테나와 커넥터가 필요하지 않습니다.

반면 다음과 같은 상황에서는 MINI-1U가 유리합니다.

  • 금속 케이스 사용
  • 외부 안테나 필요
  • PCB 위치 때문에 안테나 영역 확보가 어려움
  • 안테나를 제품 외부로 분리해야 함
  • 특정 방향으로 RF 성능을 확보해야 함

단, MINI-1의 PCB 안테나를 사용할 경우에는 모듈 주변의 copper keep-out과 PCB 배치 조건을 반드시 공식 권장 레이아웃에 맞춰야 합니다.


12. 개발 환경

현재 가장 확실한 개발 방법은 ESP-IDF입니다.

CNX Software에 따르면 ESP-IDF 6.0부터 ESP32-C61 지원이 포함되었습니다.

따라서 새로운 프로젝트를 시작한다면 ESP-IDF 기반 개발이 가장 자연스럽습니다.

Arduino도 지원되지만 현재는 일반 ESP32처럼 Arduino IDE에서 보드를 선택해 바로 사용하는 수준과는 조금 다릅니다.

​

기사에서 소개한 현재 방식은 Arduino-ESP32를 ESP-IDF Component로 사용

하거나 필요한 static library를 다시 빌드하는 방법입니다.

따라서 Arduino 중심의 초보 개발자라면 생태계가 조금 더 성숙할 때까지 기다리는 것도 방법입니다.


13. 개발을 시작하려면

처음부터 MINI 모듈로 PCB를 만드는 것보다는 개발보드로 시작하는 것이 편합니다.

현재 사용할 수 있는 보드 중 하나가 ESP32-C61-DevKitC-1-N8R2입니다.

기사에서는 해당 개발보드가 약 9달러 수준에 판매되고 있다고 소개합니다. CircuitPython 역시 해당 보드를 위한 alpha 버전이 확인되고 있습니다.

따라서 개발 순서는 대략

DevKit 구입 → ESP-IDF 테스트 → Wi-Fi/BLE 테스트 → 소비전력 측정 → Custom PCB 설계 순서가 안전합니다.


14. ESP32-C6와 무엇이 다른가?

ESP32-C61을 이해하는 가장 쉬운 방법은 ESP32-C6의 저가형 변형이라고 보는 것입니다.

ESP32-C6는 Wi-Fi 6와 BLE 외에도 IEEE 802.15.4를 지원하기 때문에 Zigbee와 Thread 기반 제품을 만들 수 있습니다.

​

반면 ESP32-C61은 802.15.4를 제거했습니다.

또한 SRAM도 C6의 512KB보다 작은 320KB입니다.

​

따라서 선택 기준은 비교적 명확합니다.

​

Matter over Thread / Zigbee 필요

→ ESP32-C6

​

Wi-Fi + BLE IoT 제품

→ ESP32-C61을 적극적으로 검토

​

즉, 사용하지 않는 802.15.4 기능을 빼고 비용을 낮춘 것이 C61의 핵심 포지션이라고 볼 수 있습니다.


15. 어떤 프로젝트에 적합할까?

ESP32-C61-MINI 시리즈는 특히 다음과 같은 장치에 잘 맞습니다.

  • 온습도 센서
  • 식물 모니터링 장치
  • 스마트홈 센서
  • Wi-Fi 데이터 로거
  • 환경 모니터링 장치
  • 스마트 플러그
  • BLE Provisioning이 필요한 Wi-Fi 제품
  • 배터리 기반 무선 센서
  • MQTT 센서 노드
  • 소형 IoT 제품

​

특히

Sensor → ESP32-C61 → Wi-Fi → Cloud

구조의 제품이라면 상당히 매력적인 선택입니다.

BLE를 함께 사용할 수 있으므로

BLE로 초기 설정 → Wi-Fi로 클라우드 연결

이라는 상용 IoT 제품에서 흔히 사용하는 구조도 구현할 수 있습니다.


16. ESP32-C61의 진짜 의미

ESP32-C61-MINI 시리즈의 가장 흥미로운 부분은 단순히 새로운 ESP32가 하나 더 등장했다는 것이 아닙니다.

저가 IoT MCU의 기본 무선 규격이 Wi-Fi 6로 이동하고 있다는 것에 더 큰 의미가 있습니다.

​

160MHz RISC-V CPU, Wi-Fi 6, BLE 5.3, USB Serial/JTAG, 최대 8MB Flash와 8MB PSRAM을 지원하는 모듈이 약 2달러 수준까지 내려온다면 저가형 IoT 제품에서도 굳이 오래된 Wi-Fi MCU를 사용할 이유가 점차 줄어들 수 있습니다.

​

다만 현재는 ESP-IDF 쪽이 가장 안정적인 개발 경로이고 Arduino 지원은 아직 일반적인 ESP32만큼 간단하지 않습니다.

​

따라서 지금 당장 기존 ESP32 제품을 모두 C61로 변경하기보다는 새로운 Wi-Fi/BLE IoT 제품을 설계할 때 차세대 저가형 후보로 평가해 볼 만한 모듈이라고 보는 것이 적절합니다.

​

특히 앞으로 Arduino 지원, 인증 현황, 실제 저전력 성능, 모듈 공급가격이 안정화된다면 ESP32-C61은 ESP32-C3/C6 계열과 함께 상당히 많이 사용되는 IoT용 MCU가 될 가능성이 있습니다.

___________________________________________________________________________

이 글이 도움이 되셨다면 제 홈페이지(댓글에 링크)를 방문해 보세요.

홈페이지에서는 다음과 같은 다양한 콘텐츠를 만나실 수 있습니다.

·        기술 블로그와 학습 자료

·        pcb 제작 강의와 최신 소식

·        ESP32와 IoT 하드웨어 프로젝트

·        KiCad PCB 설계 템플릿 (Github, Gumroad)

·        펌웨어 개발

배우고, 만들고, 함께 성장하는 메이커들을 위한 공간으로 계속 발전시켜 나가겠습니다.



 

#Espressif #ESP32C6 #ESP32C61 #개발보드 #DIY #MCU

​

아두이노나 ESP32 같은 마이크로컨트롤러를 이용해 프로젝트를 만들다 보면 스마트폰과 데이터를 간단하게 주고받고 싶을 때가 있습니다.

블루투스나 WiFi를 사용할 수도 있지만, 단순히 스마트폰을 장치에 가까이 가져가는 것만으로 데이터를 읽거나 설정을 전달하고 싶다면 NFC(Near Field Communication)가 상당히 편리한 방법입니다.

특히 이번에 소개할 SparkFun Qwiic Dynamic NFC/RFID Tag (SEN-21274)는 일반적인 NFC 태그보다 훨씬 다양한 기능을 제공합니다.

단순히 URL이나 텍스트를 저장해 놓는 수동형 NFC 태그가 아니라, 마이크로컨트롤러와 I2C로 연결해 데이터를 변경할 수 있고 스마트폰과 무선으로 데이터를 주고받을 수도 있는 Dynamic NFC Tag입니다.

더 흥미로운 점은 메인 시스템의 전원이 꺼져 있어도 스마트폰이나 NFC 리더에서 태그의 데이터를 읽고 쓸 수 있다는 것입니다.


SparkFun Qwiic Dynamic NFC/RFID Tag란?

SparkFun Qwiic Dynamic NFC/RFID Tag는 STMicroelectronics의 ST25DV64KC 칩을 기반으로 제작된 NFC/RFID 개발 보드입니다.

ST25DV64KC에는 64-kbit, 즉 8kByte EEPROM 메모리가 내장되어 있습니다.

이 메모리는 두 가지 방법으로 접근할 수 있습니다.

하나는 아두이노나 ESP32 같은 마이크로컨트롤러에서 사용하는 I2C 인터페이스이고, 다른 하나는 스마트폰이나 RFID 리더에서 사용하는 NFC/RFID 무선 인터페이스입니다.

즉,

MCU ↔ I2C ↔ NFC Tag ↔ NFC ↔ 스마트폰

과 같은 구조를 만들 수 있습니다.

이 때문에 단순 NFC 태그뿐 아니라 마이크로컨트롤러와 스마트폰 사이에서 데이터를 전달하는 일종의 무선 데이터 브리지로 활용할 수 있습니다.


전원이 없어도 데이터를 읽고 쓸 수 있다

이 제품의 가장 흥미로운 특징 중 하나입니다.

일반적으로 ESP32나 아두이노 같은 전자 장치는 전원이 꺼지면 외부에서 데이터를 읽기 어렵습니다.

하지만 NFC 태그는 스마트폰이나 NFC 리더에서 발생하는 RF 전자기장을 이용해 동작할 수 있습니다.

따라서 SparkFun Dynamic NFC Tag가 연결된 메인 장치의 전원이 완전히 꺼져 있더라도 스마트폰을 태그에 가까이 가져가면 EEPROM에 저장된 데이터를 읽거나 쓸 수 있습니다.

예를 들어 배터리가 방전된 장치에서도 다음과 같은 정보를 확인하도록 만들 수 있습니다.

제품 일련번호, 장치 설정 정보, 마지막 측정값, 설치 정보, 사용 설명서 URL, 유지보수 기록 등을 NFC로 확인할 수 있습니다.

IoT 장치를 만든다면 상당히 재미있는 기능입니다.


주요 하드웨어 구성

SparkFun Qwiic Dynamic NFC/RFID Tag에는 개발에 필요한 여러 인터페이스가 기본적으로 준비되어 있습니다.

Qwiic 커넥터

보드에는 SparkFun의 Qwiic 커넥터 두 개가 장착되어 있습니다.

Qwiic 시스템은 I2C 기반이므로 SDA, SCL, 전원, GND를 케이블 하나로 연결할 수 있습니다.

따라서 Qwiic을 지원하는 아두이노, ESP32 개발보드 또는 다른 센서 모듈과 연결할 경우 별도의 납땜 없이 바로 개발을 시작할 수 있습니다.

다만 Qwiic 시스템은 기본적으로 3.3V 로직을 사용하므로 Qwiic을 통해 연결할 때에는 3.3V 환경을 사용하는 것이 좋습니다.


0.1인치 PTH 헤더

보드에는 일반적인 0.1인치 간격의 PTH(Pin Through Hole)도 제공됩니다.

따라서 브레드보드나 점퍼 케이블을 이용해 직접 연결할 수도 있습니다.

여기에서는 단순히 전원과 I2C뿐 아니라 다음과 같은 기능도 사용할 수 있습니다.

VEH : Energy Harvesting 출력

GPO : General Purpose Output

이 핀들을 활용하면 단순 NFC 메모리 이상의 응용이 가능합니다.


PCB 안테나 내장

NFC 통신을 위한 안테나가 PCB 자체에 포함되어 있습니다.

따라서 별도의 외부 안테나를 연결할 필요가 없습니다.

일반적인 스마트폰 NFC 리더를 사용하면 대략 수 센티미터 거리에서 태그를 인식할 수 있습니다.

NFC 특성상 장거리 통신을 위한 기술은 아니지만 장치에 스마트폰을 가져다 대어 데이터를 읽거나 설정하는 용도로는 매우 편리합니다.


주요 기술 사양

SparkFun Qwiic Dynamic NFC/RFID Tag의 핵심 사양은 다음과 같습니다.

  • 사용 IC : STMicroelectronics ST25DV64KC
  • 메모리 : 64-kbit EEPROM
  • 실제 용량 : 8kByte
  • 공급 전압 : 약 1.8V ~ 5.5V
  • Qwiic 사용 시 : 3.3V
  • 통신 인터페이스 : I2C + NFC/RFID
  • NFC 규격 : ISO/IEC 15693
  • NFC Forum : Type 5 Tag
  • Data Mailbox : 256Byte
  • EEPROM 데이터 보존 기간 : 최대 약 40년
  • 쓰기 내구성 : 환경에 따라 약 40만 ~ 100만 회

I2C를 이용하면 EEPROM을 바이트 단위로 접근할 수 있으며 RF 인터페이스에서는 기본적으로 4바이트 블록 단위로 접근합니다.

쓰기 시간은 일반적인 EEPROM과 비슷하게 수 ms 정도가 필요합니다.


I2C 주소

ST25DV64KC는 기능에 따라 여러 I2C 주소를 사용합니다.

User Memory : 0x53

System Memory : 0x57

RF Switch Off : 0x51

RF Switch On : 0x55

일반적으로 아두이노에서 사용자 데이터를 읽고 쓰는 경우에는 User Memory 영역을 가장 많이 사용하게 됩니다.


스마트폰으로 URL을 바로 열 수 있는 NDEF

이 보드가 특히 재미있는 이유 중 하나는 NDEF(NFC Data Exchange Format)를 지원한다는 것입니다.

NDEF는 스마트폰 NFC에서 널리 사용하는 표준 데이터 형식입니다.

이를 이용하면 스마트폰에 별도의 전용 애플리케이션을 설치하지 않아도 NFC 태그를 인식했을 때 특정 동작을 수행하게 만들 수 있습니다.

대표적으로 다음과 같은 정보를 저장할 수 있습니다.

웹사이트 URL

태그에 웹사이트 주소를 저장해 놓으면 사용자가 스마트폰을 가져다 대는 것만으로 해당 웹페이지를 열 수 있습니다.

제품 설명 페이지, 매뉴얼, 설정 페이지, 회사 홈페이지, 이벤트 페이지 등으로 연결하는 데 사용할 수 있습니다.

예를 들어 제품 외부에 NFC 로고를 표시해 놓고 사용자가 스마트폰을 가져다 대면 온라인 사용 설명서가 바로 열리도록 만들 수 있습니다.


WiFi 정보를 NFC로 전달

WiFi 네트워크 정보를 NDEF 형식으로 저장하는 것도 가능합니다.

SSID와 비밀번호 등의 정보를 저장해 놓으면 NFC를 지원하는 스마트폰에서 네트워크 정보를 쉽게 전달할 수 있습니다.

집이나 사무실 방문객에게 WiFi 정보를 제공하거나 IoT 장치 설치 과정에서 네트워크 설정을 전달하는 용도로 활용할 수 있습니다.

복잡한 WiFi 비밀번호를 직접 입력할 필요가 없다는 것이 장점입니다.


일반 텍스트 전달

간단한 텍스트 정보도 저장할 수 있습니다.

예를 들면 다음과 같습니다.

제품 이름

장치 ID

연락처

간단한 사용 설명

장비 상태

설치 위치

점검 기록

이런 정보를 NFC로 제공하면 QR 코드와는 또 다른 형태의 장치 인터페이스를 만들 수 있습니다.


Dynamic NFC Tag가 특별한 이유: MCU가 내용을 변경할 수 있다

일반적인 NFC 스티커는 한 번 정보를 저장한 뒤 동일한 데이터를 계속 제공하는 경우가 많습니다.

하지만 Dynamic NFC Tag는 이름 그대로 내용을 동적으로 변경할 수 있습니다.

마이크로컨트롤러가 I2C를 통해 EEPROM 내용을 변경하면 스마트폰에서 읽는 NFC 정보도 달라질 수 있습니다.

예를 들어 센서 장치를 만들었다고 생각해 보겠습니다.

ESP32가 센서를 측정한 뒤 마지막 측정값을 NFC 메모리에 기록합니다.

그 후 장치가 Deep Sleep 상태로 들어가거나 배터리가 방전되더라도 사용자는 스마트폰을 태그에 가져다 대어 마지막 측정 정보를 확인할 수 있습니다.

이런 구조는 초저전력 IoT 장치를 만들 때 상당히 흥미로운 활용 방법이 될 수 있습니다.


Data Mailbox 기능

ST25DV64KC에는 256Byte Data Mailbox 기능이 있습니다.

Data Mailbox는 MCU와 NFC 리더 사이에서 데이터를 빠르게 주고받을 수 있도록 만들어진 버퍼입니다.

즉,

스마트폰 → NFC → Mailbox → MCU

또는

MCU → Mailbox → NFC → 스마트폰

형태의 데이터 전송이 가능합니다.

EEPROM에 데이터를 계속 기록하는 방식보다 빠르게 정보를 교환할 수 있기 때문에 스마트폰을 장치의 간단한 설정 인터페이스처럼 사용하는 것도 가능합니다.

예를 들어 스마트폰에서 설정값을 전달하고 MCU가 해당 값을 읽어 장치 동작을 변경하는 시스템을 만들 수 있습니다.


RF Energy Harvesting 기능

ST25DV64KC는 NFC의 RF 필드에서 일부 에너지를 얻어 사용할 수 있는 Energy Harvesting 기능도 지원합니다.

스마트폰이나 NFC 리더를 태그 가까이에 가져가면 RF 전자기장이 형성됩니다.

이 에너지의 일부를 수확하여 VEH 핀을 통해 외부 회로에 공급할 수 있습니다.

출력 가능한 전력은 매우 작아 일반적인 ESP32 같은 장치를 그대로 구동하기에는 부족하지만, 초저전력 회로나 간단한 센서 회로에는 활용 가능성이 있습니다.

즉, 배터리를 사용하지 않는 초저전력 센서나 NFC 기반 인터랙티브 장치를 연구할 때 흥미로운 기능입니다.


GPO 인터럽트 기능

보드의 GPO(General Purpose Output) 핀을 이용하면 NFC 관련 이벤트를 MCU에 전달할 수 있습니다.

예를 들어 스마트폰이 태그 근처에 접근했을 때 이를 감지하도록 만들 수 있습니다.

RF Field 감지

RF 데이터 접근

I2C 쓰기

Mailbox 이벤트

등의 상황에서 마이크로컨트롤러에 인터럽트를 전달할 수 있습니다.

이를 이용하면 평소에는 MCU를 저전력 상태로 유지하다가 스마트폰이 NFC 태그에 접근했을 때 특정 기능을 수행하도록 만드는 것도 가능합니다.


데이터 보안 기능

ST25DV64KC에는 비교적 강력한 메모리 보호 기능도 포함되어 있습니다.

사용자 메모리를 최대 4개의 영역으로 나누고 각 영역에 서로 다른 접근 정책을 설정할 수 있습니다.

RF 접근에는 여러 개의 64비트 패스워드를 사용할 수 있으며 I2C 접근에도 별도의 비밀번호를 설정할 수 있습니다.

시스템 설정 영역 역시 RF와 I2C 접근에 대한 쓰기 보호가 가능합니다.

따라서 단순 공개 정보뿐 아니라 장치 설정값이나 관리용 데이터처럼 제한된 정보도 영역을 나누어 관리할 수 있습니다.


어디에 활용할 수 있을까?

Dynamic NFC Tag의 장점은 단순 NFC 태그와 MCU 연결 기능을 동시에 사용할 수 있다는 점입니다.

특히 다음과 같은 프로젝트에 활용하기 좋습니다.

1. 스마트 제품 설명서

제품에 NFC를 내장하고 스마트폰을 가져다 대면 사용 설명서나 설정 페이지가 바로 열리도록 만들 수 있습니다.

QR 코드와 비슷하지만 카메라를 실행할 필요 없이 스마트폰을 가까이 가져가는 것만으로 동작합니다.


2. WiFi 접속 정보 제공

카페, 사무실, 전시장 또는 IoT 장치 설치 과정에서 WiFi 정보를 NFC로 제공할 수 있습니다.

긴 WiFi 비밀번호를 직접 입력하는 불편을 줄일 수 있습니다.


3. 스마트 재고 관리

제품이나 장비 내부에 NFC Tag를 설치하면 전원이 없는 상태에서도 제품 정보를 확인할 수 있습니다.

제품 번호, 생산 날짜, 유지보수 기록, 설치 정보 등을 EEPROM에 저장할 수 있습니다.

장비가 창고에 보관되어 전원이 없는 상태에서도 RFID 리더나 스마트폰으로 정보를 읽을 수 있다는 장점이 있습니다.


4. IoT 장치 설정

스마트폰을 장치에 가까이 가져가 설정값을 전달하는 방식으로 사용할 수 있습니다.

예를 들어 장치 ID, WiFi 설정, 센서 설정값, 측정 주기 등을 NFC를 통해 전달할 수 있습니다.

별도의 디스플레이나 버튼을 장치에 설치하지 않아도 되기 때문에 IoT 제품의 사용자 인터페이스를 단순화할 수 있습니다.


5. 초저전력 데이터 로거

센서 데이터를 주기적으로 EEPROM에 기록한 뒤 장치가 Deep Sleep에 들어가는 구조를 만들 수 있습니다.

사용자는 필요할 때 스마트폰으로 데이터를 읽을 수 있습니다.

장치가 꺼져 있거나 배터리가 부족한 상태에서도 저장된 데이터를 읽을 수 있다는 것이 큰 장점입니다.


6. 인터랙티브 전시 및 미디어 아트

관람객이 스마트폰을 작품 가까이에 가져가면 웹페이지, 영상, 설명 또는 특정 콘텐츠가 나타나는 인터랙티브 전시물을 만들 수 있습니다.

GPO나 Data Mailbox 기능까지 이용하면 단순 정보 제공을 넘어 스마트폰과 작품이 서로 데이터를 주고받는 구조도 구현할 수 있습니다.


Arduino 라이브러리

SparkFun에서는 ST25DV64KC를 쉽게 사용할 수 있도록 공식 Arduino 라이브러리를 제공합니다.

라이브러리 이름은

SparkFun_ST25DV64KC_Arduino_Library

입니다.

이 라이브러리를 이용하면 복잡한 ST25DV64KC 레지스터를 직접 제어하지 않아도 주요 기능을 사용할 수 있습니다.

특히 다음과 같은 NDEF 데이터 생성 기능이 제공되기 때문에 NFC 프로젝트를 처음 시작할 때 유용합니다.

URI / 웹사이트 URL

WiFi 자격증명

Text Record

EEPROM 읽기/쓰기

메모리 영역 설정

패스워드 설정

등을 비교적 간단하게 구현할 수 있습니다.


스마트폰 테스트용 앱

NFC 데이터를 직접 확인하거나 테스트하고 싶다면 스마트폰 NFC 앱을 사용하는 것이 편리합니다.

대표적으로 다음 두 가지 앱을 사용할 수 있습니다.

STMicroelectronics NFC Tap

ST에서 제공하는 공식 NFC 애플리케이션입니다.

ST25 계열 NFC 태그를 테스트하거나 설정할 때 특히 편리합니다.

NFC Tools

wakdev에서 개발한 범용 NFC 앱으로 Android와 iOS에서 널리 사용됩니다.

NDEF 데이터를 읽거나 URL, Text 등의 정보를 기록할 때 편리합니다.


SparkFun DataLogger IoT와 연결

SparkFun의 DataLogger IoT 시스템과 함께 사용하는 것도 가능합니다.

Qwiic 인터페이스를 이용하면 복잡한 배선 없이 장치를 연결할 수 있으며, SparkFun의 생태계를 이용해 센서 데이터 기록과 NFC 기능을 함께 구성할 수 있습니다.

Qwiic 센서들을 많이 사용하는 프로젝트라면 상당히 편리한 조합입니다.


일반 NFC 태그와 Dynamic NFC Tag의 차이

일반 NFC 태그는 주로 미리 저장된 정보를 전달하는 용도로 사용됩니다.

반면 Dynamic NFC Tag는 MCU와 연결되어 데이터를 계속 변경할 수 있습니다.

일반 NFC 태그가

스마트폰 → NFC 태그

형태라면 Dynamic NFC Tag는

스마트폰 ↔ NFC 태그 ↔ 마이크로컨트롤러

구조를 만들 수 있습니다.

이 차이 때문에 단순한 URL 태그를 넘어 IoT 장치의 설정, 데이터 확인, 유지보수 인터페이스 등으로 활용할 수 있습니다.


마무리

SparkFun Qwiic Dynamic NFC/RFID Tag는 단순한 NFC 태그라기보다는 스마트폰과 마이크로컨트롤러를 연결해 주는 작은 무선 인터페이스에 가깝습니다.

8kByte EEPROM, I2C, NFC Forum Type 5, NDEF, 256Byte Data Mailbox, Energy Harvesting, GPO 인터럽트, 메모리 보안 기능을 하나의 작은 보드에서 사용할 수 있습니다.

특히 흥미로운 점은 장치의 전원이 꺼져 있어도 스마트폰으로 저장된 정보를 확인할 수 있다는 것입니다.

그래서 IoT 센서, 데이터 로거, 스마트 제품, 재고 관리, 장비 유지보수, 전시 시스템, WiFi 설정 장치 등 여러 프로젝트에서 활용 가능성이 높습니다.

ESP32나 아두이노 프로젝트에서 Bluetooth나 WiFi까지 사용할 정도로 복잡한 통신은 필요 없지만, 스마트폰과 간단하게 데이터를 주고받을 방법이 필요하다면 Dynamic NFC Tag는 상당히 재미있는 선택지가 될 수 있습니다.


참고 자료

SparkFun Qwiic Dynamic NFC/RFID Tag Hookup Guide

https://learn.sparkfun.com/tutorials/qwiic-dynamic-nfcrfid-tag-hookup-guide

SparkFun ST25DV64KC Arduino Library

https://github.com/sparkfun/SparkFun_ST25DV64KC_Arduino_Library

SparkFun Qwiic Dynamic NFC/RFID Tag Schematic

https://cdn.sparkfun.com/assets/c/a/a/7/b/Qwiic_RFID_Tag.pdf

STMicroelectronics ST25DV64KC Datasheet

https://cdn.sparkfun.com/assets/f/5/4/e/d/st25dv04kc-2450072.pdf

​

※ 제품 사용 전에는 최신 데이터시트와 SparkFun의 공식 Hookup Guide에서 전원 조건, 핀 구성 및 RF 관련 설정을 다시 확인하는 것을 권장합니다.

​

#SparkFun #NFC #RFID #DynamicNFC #NFC태그 #RFID태그 #ST25DV64KC #Qwiic #Arduino #아두이노 #ESP32 #IoT #사물인터넷 #전자공학 #전자부품 #개발보드 #메이커 #메이커프로젝트 #임베디드 #임베디드시스템 #NDEF #NFC통신 #I2C #EEPROM #에너지하베스팅 #EnergyHarvesting #스마트폰연동 #와이파이설정 #센서프로젝트 #DIY전자공학

​

+ Recent posts