임베디드 프로젝트를 진행하다 보면 단순히 동작 여부를 넘어, 실제 소모 전력이 얼마나 되는지 궁금할 때가 많습니다. 특히 배터리로 구동되는 기기라면 ‘mA’ 단위의 미세한 차이가 기기의 수명을 결정짓죠. 오늘은 16비트 ADC의 강력한 성능을 가진 INA226 센서를 이용해, 단순한 전압 측정을 넘어 전력 소모의 흐름을 눈으로 직접 확인하는 초정밀 디지털 전력계를 만들어 보았습니다.
2. 하드웨어 구성의 핵심: “데이터의 길목을 찾아라”
이번 프로젝트에서 가장 중요한 부분은 INA226의 배선이었습니다. 시중의 모듈은 터미널 구멍이 여러 개라 헷갈리기 쉽지만, 테스터기를 이용해 직접 확인해 본 결과 2번(IN+)과 3번(IN-) 구멍이 션트 저항에 직접 연결된 핵심 경로임을 확인했습니다.
제어기: ESP32-C3 (I2C 통신: SDA GPIO 0, SCL GPIO 1)
센서: INA226 (High-side 측정 방식)
디스플레이: SSD1306 OLED (128×64)
부하(Load): LED 2개, 소형 DC 모터 (스위치로 개별 제어)
3. 소프트웨어 구현
단순히 숫자만 띄우는 것이 아니라, MicroPython을 이용해 데이터의 시인성을 극대화했습니다. OLED 화면에는 전압(V), 전류(mA), 전력(mW)을 소수점 자리까지 정밀하게 표기하고, 하단에는 현재 전력 소모량을 직관적으로 알 수 있는 **바 그래프(Bar Gauge)**를 구현했습니다.
또한, PC의 **시리얼 플로터(Serial Plotter)**를 연동하여 스위치를 켤 때마다 전류가 계단식으로 상승하거나 모터에 부하가 걸릴 때 그래프가 요동치는 모습을 실시간으로 관찰할 수 있도록 설계했습니다.
4. 프로젝트의 하이라이트: LED vs 모터
실제 테스트 결과는 흥미로웠습니다.
LED 1개 점등: 안정적인 저전력 소모를 보여주며 그래프가 정지해 있는 느낌입니다.
모터 가동: LED보다 훨씬 높은 전류를 소모하며, 특히 모터 축에 물리적인 부하를 주면 전류값이 즉각적으로 솟구치는 ‘피크 전류’ 현상을 INA226이 아주 예민하게 잡아냈습니다. 이는 가변저항 수치를 단순히 뿌려주는 것이 아니라, 진짜 흐르는 전기를 실시간으로 계측하고 있다는 증거입니다.
5. 마치며: 정밀 측정의 즐거움
INA226은 단순한 센서 그 이상이었습니다. 0.1mA의 미세한 변화까지 잡아내는 이 장치는 이제 제 책상 위에서 모든 프로젝트의 에너지 효율을 감시하는 ‘보디가드’ 역할을 하게 될 것입니다. 여러분도 직접 만든 장치로 보이지 않는 전기의 흐름을 제어해 보세요!
안녕하세요! 오늘은 마이크로컨트롤러(MCU) 프로젝트의 꽃, 디스플레이 업그레이드 이야기를 해보려 합니다. 최근 알리나 국내 오픈마켓에서 “2.0인치 OLED”라는 제목으로 팔리는 제품들, 아마 많이 보셨을 겁니다. 저도 이번에 스마트 부화기 프로젝트를 위해 하나 업어왔는데요. 결론부터 말씀드리면, 이건 OLED가 아니라 ST7789V 드라이버를 사용하는 TFT LCD입니다!
하지만 실망하긴 이릅니다. 오히려 이 녀석, 제대로 다뤄보니 OLED보다 훨씬 매력적인 구석이 많거든요.
1. “OLED라고 써있는데 왜 LCD인가요?”
판매자들의 낚시성 제목에 속으셨나요? 괜찮습니다. 구조를 보면 명확합니다.
OLED: 소자 스스로 빛을 내어 백라이트가 없고 종이처럼 얇음. (번인 위험 있음)
TFT LCD: 뒤에서 LED가 빛을 쏴주는 백라이트 방식. (번인 걱정 없음!)
24시간 내내 온도와 습도를 띄워야 하는 ‘스마트 부화기’ 같은 장치에는 오히려 화면이 타버릴 걱정 없는 TFT LCD가 신의 한 수입니다.
2. 하드웨어 SPI: 고속도로를 타야 제맛!
이 디스플레이의 핵심은 속도입니다. 보통 핀이 모자라다고 아무 핀에나 연결(Software SPI)하면 화면이 뚝뚝 끊기는 걸 보게 됩니다. 하지만 ESP32-C3의 **하드웨어 전용 핀(IOMUX)**을 사용하면 이야기가 달라집니다.
권장 핀 배치 (ESP32-C3 SuperMini 기준):
SCK: GPIO 4 (전용 고속 통로)
MOSI: GPIO 6 (전용 고속 통로)
CS/DC/RES: GPIO 5, 7, 10 (비교적 자유로움)
이렇게 연결하고 SPI 속도를 60MHz로 설정하면, MicroPython 환경에서도 초당 60프레임급의 부드러운 애니메이션을 감상할 수 있습니다.
3. “깜빡임(Flicker)과의 전쟁”에서 승리하는 법
처음 코드를 짜면 숫자가 바뀔 때마다 화면이 깜빡거려 눈이 아플 수 있습니다. 이건 ‘지우고(Black) -> 새로 쓰기(Text)’ 과정에서 검은색이 우리 눈에 잔상으로 남기 때문인데요.
해결책은 ‘배경색 동시 출력’입니다.tft.text(font, "12:30", x, y, WHITE, BLACK) 처럼 글자색과 배경색을 한 번에 쏘면, 기존 글자를 지울 필요 없이 덮어씌워지기 때문에 깜빡임이 0%가 됩니다. 마치 고급 스마트워치 같은 부드러움을 느낄 수 있죠.
4. 실전! 벽돌깨기 게임으로 증명하는 퍼포먼스
단순히 수치만 띄우기엔 이 LCD의 성능이 아깝습니다. 하드웨어 SPI의 극한을 테스트하기 위해 벽돌깨기 게임을 돌려보았습니다.
잔상 제거 팁: 공이 벽에 부딪힐 때 미세하게 남는 빨간 점들은 좌표 계산의 오차 때문입니다. 공이 벽을 뚫고 나가지 않도록 좌표를 강제로 고정(ball_x = WIDTH - size)해주면 아주 깨끗한 화면을 유지할 수 있습니다.
5. 마무리하며: 2편 예고
이번 1편에서는 2인치 TFT LCD의 정체를 밝히고, 하드웨어 SPI를 통한 성능 최적화까지 알아보았습니다.
“작은 OLED의 답답함에서 벗어나, 240×320 고해상도의 시원시원한 화면을 보니 이제야 프로젝트 할 맛이 나네요!”
이어지는 2편에서는 이 화면 아래에 ToF(거리 측정) 센서 3개를 연동하여 실시간 데이터를 멋지게 시각화하는 과정을 공유해 드리겠습니다. 핀이 부족할 것 같다고요? I2C 버스의 마법을 기대해 주세요!
※ 부록: 성능을 결정짓는 SPI 전용 핀 가이드
ESP32-C3 SuperMini는 핀 수가 적지만, 내부적으로 **IOMUX(Input/Output Multiplexer)**라는 고속 도로가 특정 핀에 깔려 있습니다. 이 ‘전용석’을 지키느냐 아니냐에 따라 LCD의 주사율이 천차만별로 달라집니다.
1. SPI 전용 핀 테이블 (성능 최우선)
LCD 핀 이름
ESP32-C3 핀 (GPIO)
역할
변경 가능 여부
이유
SCL (SCK)
GPIO 4
시리얼 클럭
변경 불가 (고수)
60MHz급 고속 신호를 낼 수 있는 하드웨어 전용 라인
SDA (MOSI)
GPIO 6
데이터 송신
변경 불가 (고수)
화면의 픽셀 데이터를 쏘는 핵심 통로
RES (RST)
GPIO 2
리셋 신호
자유롭게 변경 가능
화면을 껐다 켤 때만 쓰므로 속도와 상관없음
DC (RS)
GPIO 3
데이터/명령 선택
자유롭게 변경 가능
제어 신호용이라 일반 GPIO 아무 곳이나 OK
CS
GPIO 1
칩 선택
자유롭게 변경 가능
통신 시작 시 한 번만 신호를 주면 됨
2. 왜 4번과 6번을 사수해야 하나요?
ESP32-C3의 내부 구조상, GPIO 4와 6은 CPU를 거치지 않고 메모리에서 디스플레이로 직접 데이터를 쏘는 IOMUX 경로를 탑니다.
만약 핀이 부족하다고 0번이나 1번으로 SPI 핀을 옮기게 되면, 데이터가 내부 교환기(GPIO Matrix)를 한 번 더 거치게 되어 신호 지연이 발생합니다. 결과적으로 60MHz로 설정해도 실제로는 그 절반의 속도도 내기 힘들고, 화면에 미세한 노이즈나 끊김이 발생할 수 있습니다.
🔍 심화 학습: 왜 I2C는 자유롭고, SPI는 까다로운가?
배선을 하다 보면 “I2C는 0, 1번으로 옮겨도 괜찮은데, 왜 SPI는 꼭 전용 핀을 쓰라고 할까?”라는 궁금증이 생깁니다. 이는 ESP32-C3 내부의 데이터 배달 경로 차이 때문입니다.
1. I2C: “천천히 가도 줄만 잘 서면 되는 우편물”
I2C 통신(센서용)은 보통 400kHz(0.4MHz) 속도로 움직입니다.
내부 구조: ESP32-C3 내부에는 ‘GPIO 매트릭스’라는 거대한 교환기가 있습니다.
성능 유지 비결: I2C는 워낙 느린 신호라 이 교환기를 거쳐서 어떤 핀으로 나가더라도 데이터가 뭉개지거나 지연될 걱정이 없습니다. CPU 부하도 하드웨어 컨트롤러가 알아서 처리하므로 8, 9번 기본 핀이 아닌 0, 1번으로 옮겨도 하드웨어 가속 성능이 100% 유지됩니다.
2. SPI: “초고속으로 달려야 하는 전용 고속도로”
반면, 우리가 LCD에 사용하는 SPI는 **60MHz(60,000kHz)**라는 어마어마한 속도로 데이터를 쏩니다. I2C보다 무려 150배나 빠릅니다.
IOMUX(고속도로): 60MHz급 초고주파 신호는 내부 교환기(GPIO Matrix)를 거치면 신호가 감쇄되거나 노이즈가 생겨 통신이 끊깁니다. 그래서 CPU와 핀이 직접 연결된 IOMUX라는 ‘직통 고속도로’를 타야만 합니다.
전용석의 마법: GPIO 4(SCK)와 6(MOSI)이 바로 그 고속도로 진입로입니다. 이 자리를 벗어나 다른 핀으로 SPI를 강제 할당(Software SPI 등)하면, 내부 교환기를 거치느라 속도가 20MHz 이하로 급감하거나 CPU가 직접 핀을 제어해야 해서 전체 시스템이 느려지게 됩니다.
전류 소모: OLED 5개를 동시에 켜면 전류 소모가 상당합니다. ESP32-C3 Mini의 3.3V 출력 핀만으로는 부족할 수 있으니, 외부 3.3V 전원을 사용하는 것이 안정적입니다.
메모리(RAM): ESP32-C3는 RAM이 넉넉한 편이지만, 128×32 해상도 버퍼 5개를 동시에 유지하면 메모리 압박이 올 수 있습니다. u8g2 라이브러리의 _F_(Full Buffer) 모드 대신 _1_ 또는 _2_ (Page Buffer) 모드 사용을 권장합니다.
오늘의 프로젝트는 폐하드드라이브 추출 모터 구동 테스트입니다. 결론부터 말씀드리면 ‘절반의 성공, 절반의 실패’입니다. L298N의 전압 강하와 스텝 신호의 한계 때문에 하드디스크 특유의 초고속 회전(7200RPM)을 구현하기엔 역부족이었습니다. 실패를 통해 배운 BLDC 모터의 특성을 공유합니다.
ESP32-C3는 뛰어난 가성비와 RISC-V 아키텍처, 그리고 강력한 내장 WiFi/Bluetooth 기능으로 많은 메이커의 사랑을 받고 있습니다. 하지만 실제 프로젝트 하다 보면 한계에 부딪히곤 합니다.
“벽 하나만 통과해도 끊기는 WiFi 거리, 배터리를 순식간에 갉아먹는 전력 소모까지…”
이런 고민을 해결하기 위해 우리는 ESP32-C3의 내장 기능을 넘어 외부 무선 전용 모듈로 눈을 돌려야 합니다. 오늘 포스팅에서는 ESP32-C3의 적은 핀으로도 효율적으로 연결할 수 있는 CC1101, CC1120, CC1200, LoRa, 그리고 CC1310까지, 5종의 무선 모듈을 전격 비교해 보겠습니다. 내 프로젝트에 ‘딱’ 맞는 무선 솔루션은 무엇일까요? 지금 바로 확인해 보시죠.
** 무선 모듈 5종 스펙 비교 (ESP-NOW vs Sub-1GHz)
프로젝트의 성패는 내 상황에 맞는 ‘주파수’와 ‘칩셋’을 고르는 데 있습니다. 속도가 중요한 영상 전송인지, 거리가 중요한 원격 제어인지 아래 표를 통해 확인해 보세요.
[한눈에 보는 무선 모듈 비교표]
항목
ESP-NOW (내장)
CC1101
CC1120 / CC1200
LoRa (SX1276)
CC1310
주요 주파수
2.4GHz
433 / 868 / 915MHz
433 / 868 / 915MHz
433 / 915MHz
433 / 868 / 915MHz
최대 속도
~4 Mbps (매우 빠름)
~600 kbps
~1 Mbps
~37.5 kbps (매우 느림)
~4 Mbps
통신 거리
약 100~200m
약 300~500m
약 1km 이상
최대 5~10km
약 1km 이상
소비 전력
높음 (80~300mA)
매우 낮음 (15~30mA)
낮음 (20~40mA)
낮음 (10~20mA)
낮음 (15~30mA)
특징
추가 비용 없음
가성비 최고, 입문용
고성능, 신뢰성 위주
초장거리, 저속 데이터
멀티 프로토콜 지원
** 모듈별 상세 분석: 내 프로젝트에는 무엇이 좋을까?
① ESP-NOW: “추가 비용 제로, 빠른 속도”
ESP32-C3 내장 WiFi 기능을 활용합니다. 별도의 모듈 연결이 필요 없어 회로가 깔끔합니다.
장점: 속도가 빨라 저해상도 이미지 전송이 가능합니다.
단점: WiFi 대역(2.4GHz)을 써서 장애물(벽)에 약하고 전기를 많이 먹습니다.
② CC1101: “가성비와 저전력의 교과서”
가장 대중적인 Sub-1GHz 모듈입니다.
장점: 가격이 저렴하고 ESP32-C3의 3.3V 핀으로도 충분히 구동됩니다. 조종기 배터리를 오래 쓰고 싶을 때 최고의 선택입니다.
단점: 거리가 LoRa만큼 길지는 않습니다.
③ CC1120 / CC1200: “전문가급 성능과 신뢰성”
CC1101의 상위 버전으로, 통신 신뢰성이 매우 높습니다.
장점: 데이터 전송 속도가 빠르면서도 수신 감도가 좋아 장애물 투과력이 뛰어납니다. 산업용 로봇 제어에 적합합니다.
④ LoRa (SX127x): “거리에 모든 것을 걸었다”
속도를 포기하는 대신 거리를 극한으로 끌어올린 방식입니다.
장점: 수 킬로미터 밖에서도 명령을 전달할 수 있습니다.
단점: 속도가 너무 느려 실시간 조이스틱 반응이 약간 답답할 수 있고, 영상 전송은 절대 불가능합니다.
⑤ CC1310: “차세대 무선 통신의 올인원”
강력한 성능의 SoC(System on Chip) 기반 모듈입니다.
장점: Sub-1GHz 대역임에도 불구하고 매우 빠른 전송 속도를 자랑합니다. 저전력과 고속 통신 두 마리 토끼를 잡고 싶을 때 선택합니다.
** 핵심 요약: 선택 가이드
“돈 안 들이고 근거리에서 로봇을 조종하고 싶다” → ESP-NOW
“조종기 배터리가 오래가야 하고 전선 연결이 간편해야 한다” → CC1101
“로봇이 보이지 않는 아주 먼 곳까지 보내고 싶다” → LoRa
“데이터 양도 많고 거리도 포기할 수 없다” → CC1200 / CC1310
** ESP32-C3와 CC1101을 연결하는 회로도와 마이크로파이썬 예제 코드를 통해 무선 통신을 직접 구현해 보겠습니다!
모듈 2개를 사서 하나는 ‘송신기(Transmitter)’, 다른 하나는 ‘수신기(Receiver)’로 설정하면 완벽한 무선 통신 시스템이 됩니다.
CC1101 433MHz 무선 모듈은 TI(Texas Instruments) 사의 칩을 기반으로 한 RF 송수신 장치입니다. 로봇카를 조종하거나 멀리 떨어진 센서의 데이터를 받을 때 아주 유용합니다.
SMA(안테나 커넥터) 모델은 교체 가능한 안테나를 달 수 있어, 일반 스프링 안테나보다 **훨씬 긴 전송 거리(최대 300~500m 이상)**를 확보할 수 있는 상급 모델입니다.
1. 주요 특징 및 용도
트랜시버(Transceiver): 송신과 수신이 모두 가능합니다. 로봇에 달면 명령을 받을 수도 있고, 현재 배터리 상태(INA219 값)를 나에게 다시 보낼 수도 있습니다.
강력한 투과력: 2.4GHz(WiFi/Bluetooth)보다 주파수가 낮은 433MHz 대역을 써서 벽이나 장애물을 훨씬 잘 통과합니다.
SMA 안테나: 돌려서 끼우는 방식의 안테나를 사용합니다. 안테나를 큰 것으로 바꾸면 도달 거리가 수 킬로미터까지 늘어나기도 합니다.