로그인회원가입

[카테고리:] 스마트홈

홈 오토메이션 관련 DIY

  • AI 가 디자인한 스마트홈 모니터링 화면 리뉴얼

    AI 가 디자인한 스마트홈 모니터링 화면 리뉴얼

    구글 AI ‘제미나이’와 협업해서 DIY 스마트홈 모니터링 시스템을 완전히 리뉴얼했습니다.

    집 내부 장치는 10초마다 외부 Open Weather, Naver 는 10분마다 자동 업데이트 되는 정보.

    BMP 센서도 두개 있어서 집 대기압도 측정중

  • ESP32-C3 Super Mini 사놓고 WiFi 때문에 버릴 뻔했습니다

    ESP32-C3 Super Mini 사놓고 WiFi 때문에 버릴 뻔했습니다

    1. 가성비 끝판왕의 역설, ESP32-C3 Super Mini

    최근 스마트홈 구축에 가장 주력으로 사용하는 부품은 단연 ESP32-C3 Super Mini 보드입니다. 2~3년 전부터 꾸준히 구입해왔는데, 최근에는 가격이 1~2달러 수준까지 떨어져 가성비 면에서 압도적이죠. 하지만 가격이 저렴한 만큼 치명적인 단점이 하나 있는데, 바로 불안정한 WiFi 통신 문제입니다.

    2. 왜 납땜만 하면 WiFi가 안 될까?

    재미있는 점은 납땜 전에는 잘 되던 보드가 핀 헤더를 납땜하거나 브레드보드에 끼우기만 하면 WiFi 연결이 불안정해진다는 것입니다.

    최근 생산되는 양품은 안테나 단자와 진동소자 사이가 1mm 이상 떨어져 있지만, 초기 모델이나 일부 제품은 이 간격이 매우 좁아 진동소자와 간섭이 발생하는 것으로 보입니다. 구입시 제품 사진으로 확인하고 구입하기를 추천하고 이미 불량을 받았다면 아래 팁을 활용해 보세요.

    3. WiFi 수신율을 살려내는 3가지 해결 팁

    직접 수십 개의 보드를 다루며 찾아낸 WiFi 통신 불량 해결 트릭을 소개합니다.

    Tip 1. 마지막 21 핀은 과감히 제거하고 납땜하세요

    안테나와 가장 인접한 마지막 핀(Antenna 근처)이 간섭의 주범인 경우가 많습니다. 이 마지막 핀을 제외하고 납땜하는 것만으로도 WiFi 신호가 몰라보게 안정됩니다.

    Tip 2. 브레드보드 사용 시 ‘안테나 단락’ 트릭

    브레드보드에 보드를 끼웠을 때만 통신이 안 된다면 전파 간섭이 극대화된 상태입니다. 이때 사진처럼 마지막 핀과 안테나 단자를 와이어로 가볍게 단락(Short) 시켜보세요. 의외로 브레드보드 환경에서 수신율이 개선되는 것을 확인할 수 있습니다. 단락할 경우 브레드보드에서 빼면 오히려 수신율이 떨어지니 단락할지 말지는 브레드보드 쓸지 말지로 결정해야 됩니다.

    Tip 3. 코딩으로 해결하기: WiFi 출력 강도 조절

    하드웨어 수정이 어렵다면 소프트웨어적으로 접근할 수 있습니다. WiFi 출력 세기(TX Power)를 의도적으로 한 단계 낮게 설정해 보세요. 전파 간섭이 줄어들면서 오히려 끊김 현상이 줄어듭니다.

    cpp

    python

    4. WiFi 불량 시각적으로 바로 체크하기

    ESP32-C3 Super Mini 보드에는 8번 핀에 내장 LED가 달려 있습니다.
    연결 시도중일때 LED를 깜빡이게 하고 연결 완료시 꺼지게 하는 코드를 넣으면 시각적으로 바로 확인 할 수 있어서 좋습니다.
    논리 반전 주의: ESP32-C3 Super Mini의 내장 LED는 보통 Low(0)일 때 켜지고 High(1)일 때 꺼지는 방식(Active Low)입니다.
    무한 루프 방지: 만약 보드 불량이 심해 WiFi가 영영 안 잡히면 LED가 계속 깜빡이며 다음 코드로 넘어가지 않습니다. 테스트용으로는 좋지만, 실제 배포용 코드에서는 while문에 횟수 제한(타임아웃)을 두는 것이 좋습니다.

    Python set_blink(ms)


    마치며

    ESP32-C3 Super Mini는 분명 매력적인 보드이지만, 초기 불량 제품 구입하신 분들께 이 경험이 작은 도움이 되길 바랍니다.

  • 외부 기상 정보를 디스플레이에!  OpenWeather API

    외부 기상 정보를 디스플레이에! OpenWeather API

    안녕하세요! 오늘은 마이크로파이썬을 활용해 인터넷에서 실시간 기상 데이터를 가져오는 방법을 알아보겠습니다. 센서가 없어도 Wi-Fi만 연결되어 있다면 OpenWeather API를 통해 내 동네의 온도와 습도를 정확하게 받아올 수 있습니다.

    오후 6:28:08 (시간)
    밖 3.6°C 50% (외부 온습도 From OpenWeather)
    안 21.4°C 51% (장치센서 온습도)

    1. 준비물

    • 하드웨어: ESP32-C3 (OLED 디스플레이가 연결된 상태)
    • API Key: OpenWeather 공식 사이트에서 무료 회원가입 후 발급받은 API Key
    • 환경: MicroPython이 설치된 개발 환경 (Thonny 등)

    2. OpenWeather API 호출 주소 확인하기

    우리는 urequests 라이브러리를 통해 JSON 데이터를 받아올 겁니다. API 호출 주소는 다음과 같은 형식입니다.

    https://api.openweathermap.org/data/2.5/weather?q={도시이름}&appid={내API키}&units=metric

    • units=metric: 섭씨 온도로 받기 위해 반드시 추가해야 합니다.

    3. 마이크로파이썬 코드 구현

    아래 코드는 Wi-Fi에 접속한 뒤, API 데이터를 분석하여 온도와 습도를 추출하는 핵심 코드입니다.

    Python “openweather.py”


    4. 코드 포인트 설명

    1. urequests 라이브러리: 파이썬의 requests와 유사하지만 메모리가 적은 마이크로컨트롤러에 최적화된 라이브러리입니다.
    2. JSON 파싱: API 응답은 복잡한 딕셔너리 형태입니다. data['main']['temp'] 처럼 계층적으로 접근하여 필요한 값만 쏙쏙 뽑아내는 것이 중요합니다.
    3. 데이터 주기: 날씨는 초 단위로 변하지 않으므로, time.sleep()을 이용해 적절한 간격(5~10분)으로 데이터를 요청하는 것이 매너입니다.

    5. 일석삼조! 단순한 날씨 알리미를 넘어 ‘스마트 홈 허브’로

    단순히 외부 날씨만 보여주는 건 조금 아쉽죠? 기능을 한 뼘 더 확장하면 내 방의 중심을 잡는 **’스마트 홈 통합 제어기’**가 탄생합니다. 제가 구상한 일석삼조의 기능은 이렇습니다.

    1. 실시간 날씨 대시보드: OpenWeather API를 통해 외부 온습도를 디스플레이에 선명하게 출력합니다.
    2. 방 온습도 데이터: 홈 웹서버에 내 방의 온습도 데이타를 제공하여, 스마트폰이나 PC에서 언제든 확인할 수 있게 합니다.
    3. 만능 IR 컨트롤러: IR LED를 추가해 에어컨, TV 등 가전제품을 제어합니다. 밖에서 홈 웹 서버에 접속해 미리 에어컨을 켜두는 것도 가능해지죠!
  • 내 RC카 배터리 얼마나 남았을까? 분압 저항으로 구현하는 실시간 전압계

    내 RC카 배터리 얼마나 남았을까? 분압 저항으로 구현하는 실시간 전압계


    리튬 이온 배터리는 완충 시 약 4.2V, 방전 시 약 3.0V~3.2V 사이의 전압을 가집니다. 하지만 ESP32-C3의 ADC 입력 전압은 보통 0V~2.5V(내부 설정에 따라 다름) 정도로 제한되어 있어, 배터리 전압을 직접 연결하면 MCU가 손상될 수 있습니다.

    이때 가장 간단하고 효과적인 해결책이 바로 분압 저항을 사용하는 방법입니다.

    1. 하드웨어 구성: 분압 저항(Voltage Divider) 원리

    100kΩ 저항 두 개를 직렬로 연결하면 전압이 정확히 **절반(1/2)**으로 줄어듭니다. 배터리 전압이 4.2V일 때 ADC 핀에는 2.1V가 입력되므로 ESP32-C3에서 안전하게 읽을 수 있습니다.

    • 준비물: 100kΩ 저항 2개, ESP32-C3, 리튬 이온 배터리
    • 회로 연결:
      1. 배터리 양극(+) → 첫 번째 100kΩ 저항 시작점 연결
      2. 두 저항 사이의 중간 지점 → ESP32-C3의 ADC 핀(예: GPIO 0) 연결
      3. 두 번째 100kΩ 저항 끝점 → 배터리 음극(-) 및 ESP32-C3 GND 공통 연결

    2. 마이크로파이썬(MicroPython) 구현 코드

    ESP32-C3에서 ADC 값을 읽어 실제 배터리 전압으로 환산하는 코드입니다.

    Python “battery.py”

    3. 더 정확한 측정을 위한 팁

    • 저항 오차: 100kΩ 저항이라도 미세한 오차가 있으므로, 멀티미터로 실제 배터리 전압을 재보고 코드의 2 대신 2.05와 같이 미세하게 조정(Calibration)하면 더 정확합니다.
    • 전력 소모: 상시 구동 기기라면 100kΩ 이상의 높은 저항을 사용하거나, 측정할 때만 회로를 연결하는 트랜지스터 스위치를 추가하는 것이 좋습니다.
    • 노이즈 제거: adc.read() 값을 여러 번 읽어 평균을 내면 값이 훨씬 안정적으로 출력됩니다.

    4. 맺음말

    전원을 직접 연결하기 힘든 위치에 온습도계를 둘 때는 배터리를 쓰게 되죠. 이때 배터리 전압을 실시간으로 체크해주면 정말 편리해요. ‘배터리가 다 됐어요!’라고 기기가 스스로 알려줄 수 있도록 이번 강좌의 ADC 측정 회로를 꼭 적용해 보시기 바랍니다.

  • 대시보드 하나로 집안 환경 정복, ESP32로 구현한 통합 관제 센터

    대시보드 하나로 집안 환경 정복, ESP32로 구현한 통합 관제 센터

    온습도 모니터링과 IR(적외선) 리모컨 제어 시스템은 우리가 흔히 말하는 ‘스마트 홈’의 가장 기초적이면서도 핵심적인 요소입니다. 이 시스템이 물리적인 환경에서 디지털 신호로, 다시 물리적인 동작으로 이어지는 과정을 단계별로 정리해 드릴게요.


    1. 온습도 모니터링 과정 (Sensing to Data)

    센서가 방 안의 상태를 감지하고 사용자에게 보여주기까지의 과정입니다.

    • 데이터 측정 (Sensing): DHT11, SHT3x와 같은 온습도 센서가 대기 중의 전기적 신호를 읽어 온도와 습도 값을 추출합니다.
    • 데이터 처리 및 전송 (Processing & TX): ESP32, Raspberry Pi 같은 MCU(마이크로 컨트롤러)가 센서 값을 디지털 데이터로 변환합니다. 이후 Wi-Fi나 Zigbee 통신을 통해 클라우드 서버나 로컬 허브로 전송합니다.
    • 데이터 저장 및 시각화 (Storage & Display): 전송된 데이터는 데이터베이스에 시각별로 저장됩니다. 사용자가 웹이나 앱을 열면 이 데이터를 불러와 실시간 수치나 1개월간의 그래프(이미지에서 보신 형태)로 그려내게 됩니다.

    2. 가전 IR 리모트컨트롤 과정 (Command to Action)

    사용자가 버튼을 눌러 에어컨이나 TV를 끄고 켜는 과정입니다.

    • 사용자 명령 (Input): 사용자가 웹페이지의 ‘에어컨 ON’ 버튼을 클릭합니다.
    • 신호 전달 (Command): 웹 서버는 이 명령을 받아 집안에 설치된 ‘IR 블래스터(송신부)’로 전달합니다. 이때 주로 MQTTHTTP 프로토콜이 사용됩니다.
    • IR 신호 변조 (Modulation): IR 블래스터는 가전제품 제조사마다 정해진 고유의 ‘리모컨 코드’를 생성합니다. 적외선은 눈에 보이지 않는 빛의 깜빡임으로 신호를 전달하며, 보통 38kHz 주파수의 반송파에 실어 보냅니다.
    • 가전 제품 동작 (Execution): TV나 에어컨의 IR 수신 모듈이 이 빛의 패턴을 읽고 해석하여 전원을 켜거나 채널을 바꿉니다.

    요약하자면

    단계온습도 모니터링 (Read)가전 리모트컨트롤 (Write)
    방향가전/환경 → 사용자사용자 → 가전
    매개체센서 소자 (SHT, DHT 등)적외선 LED (IR Transmitter)
    핵심 기술데이터 로깅, 그래프 시각화IR 프로토콜 분석 (Samsung, LG 등)

    가전제품마다 리모컨 신호가 다르기 때문에, 시스템을 구축할 때는 각 제조사의 IR 신호를 미리 ‘학습’시키거나 공개된 라이브러리(DB)를 사용하는 것이 중요합니다.

  • [상위고정] 온습도 모니터링 & IR 리모콘

    [상위고정] 온습도 모니터링 & IR 리모콘

    가장 소중한 사람을 위한 DIY” (실용적/따뜻함)

    “아이 방의 습도는 적당한지, 부모님 방이 너무 춥지는 않은지 매번 문을 열어 확인하고 계셨나요? 이제 직접 만든 작은 센서들이 당신을 대신해 집안 구석구석을 살핍니다. **’방마다 온습도 모니터링’**은 소중한 사람들의 건강을 위해 시작된 가장 따뜻한 DIY 프로젝트입니다. 부품 하나, 코드 한 줄로 시작하는 우리 집의 작은 변화를 기록합니다.”

    • AHT20 센서 활용한 ESP32-C3 온습도 측정
    • IR Led를 활용한 IR 리모트 컨트롤
    • AHT20+BMP280 센서 : 온도, 습도, 기압 측정
    • OLED SSD1306 디스플레이
    • SR602 미니 모션 센서 감지기 모듈: 디스플레이 자동 on/off

    공간별 온습도 실시간 모니터링 및 가전 기기 원격 통합 제어


    리뉴얼 Renewal With AI. 2026.02.11
    리뉴얼 온습도 그래프 Renewal With AI. 2026.03.25
    Real-time Monitoring
    1개월간 공간별 온습도 그래프
    1년간 공간별 온습도 그래프
    공간별 IR리모콘
  • 홈 서버가 필요한 이유

    홈 서버가 필요한 이유

    스마트홈의 두뇌 역할을 하는 **’홈 웹서버(Home Web Server)’**의 필요성에 대한 설명글입니다. 초보자도 이해하기 쉽게 비유를 곁들여 작성했습니다.


    왜 스마트홈에는 ‘전용 서버’가 필요할까요?

    스마트홈을 구축할 때 가장 먼저 마주하는 질문은 “센서와 전등만 있으면 되는 거 아니야?”라는 의문입니다. 하지만 진정한 자동화를 위해서는 이 모든 장치를 하나로 묶어 관리하는 ‘관제 센터’, 즉 홈 웹서버가 반드시 필요합니다.

    1. 흩어진 장치들을 하나로 묶는 ‘지휘소’

    각 방에 흩어진 ESP32-C3 보드들은 각각 온도나 습도를 측정할 뿐, 서로 대화할 수 없습니다. 홈 서버는 모든 보드로부터 데이터를 수집하고, “온도가 26도가 넘었으니 에어컨을 켜라”라는 명령을 내리는 지휘관 역할을 수행합니다.

    2. 24시간 기록되는 ‘나만의 데이터 로그’

    서버가 없다면 현재 온도는 볼 수 있지만, ‘어제 밤 우리 집 온도 변화’는 알 수 없습니다. 홈 서버는 1분 1초의 데이터를 저장하여, 우리 가족의 생활 패턴을 분석하고 최적화된 에너지 관리를 가능하게 합니다.

    3. 외부에서도 안전한 ‘원격 제어 창구’

    집 밖에서 스마트폰으로 에어컨을 켜고 싶을 때, 각 장치에 일일이 접속하는 것은 보안상 위험하고 번거롭습니다. 홈 서버는 외부와 내부를 잇는 단 하나의 안전한 통로가 되어, 당신이 어디에 있든 집안 상태를 한눈에 보여줍니다.


    우리가 홈 서버로 ‘라즈베리 파이’나 ‘미니 PC’를 쓰는 이유

    • 저전력 가동: 24시간 켜져 있어야 하므로 전기를 적게 먹어야 합니다.
    • 다양한 프로토콜 수용: Wi-Fi, Zigbee, Bluetooth 등 서로 다른 통신 방식을 사용하는 기기들을 한곳에서 처리합니다.
    • 프라이버시 보호: 클라우드 서버(외부 업체)에 우리 집 데이터를 맡기지 않고, 내 집 안의 서버에만 저장하므로 사생활이 완벽하게 보호됩니다.

    MaNa’s LAB Tip: > 처음에는 거창한 서버 장비가 없어도 괜찮습니다. 남는 노트북이나 저렴한 라즈베리 파이에 Home Assistant 같은 오픈소스 플랫폼을 설치하는 것만으로도 훌륭한 스마트홈 서버를 가질 수 있습니다.


  • 아두이노와 마이크로파이썬

    아두이노와 마이크로파이썬

    아두이노(C++)와 마이크로파이썬(MicroPython)은 임베디드 개발에서 가장 인기 있는 두 가지 선택지입니다. 결론부터 말씀드리면, “세밀한 제어와 성능이 중요하다면 아두이노”, **”빠른 개발과 쉬운 학습이 우선이라면 마이크로파이썬”**을 추천합니다.

    Arduino
    Micropython

    주요 차이점을 네 가지 핵심 포인트로 정리해 드립니다.


    1. 언어와 실행 방식의 차이

    구분아두이노 (Arduino C++)마이크로파이썬 (MicroPython)
    언어C++ 기반 (컴파일 언어)Python 3 기반 (인터프리터 언어)
    실행 방식코드를 기계어로 변환해 업로드보드 내부의 인터프리터가 코드를 즉시 해석
    속도/효율매우 빠름. 하드웨어 자원을 100% 활용상대적으로 느림. 메모리 사용량이 많음
    난이도포인터, 메모리 관리 등 초기 학습이 다소 어려움문법이 간결하고 직관적이라 입문자에게 유리

    2. 개발 프로세스 (워크플로우)

    • 아두이노: 코드를 수정할 때마다 ‘컴파일(빌드) → 업로드’ 과정을 거쳐야 합니다. 코드가 길어질수록 기다리는 시간이 생깁니다.
    • 마이크로파이썬: REPL(Interactive Shell) 기능을 지원합니다. 보드를 PC에 연결한 상태에서 한 줄씩 코드를 입력하면 즉시 하드웨어가 반응합니다. (예: led.on() 입력 시 즉시 불이 켜짐)

    3. 하드웨어 지원 범위

    • 아두이노: 아주 저사양인 8비트 MCU(Arduino Uno 등)부터 고사양 보드까지 거의 모든 하드웨어에서 돌아갑니다.
    • 마이크로파이썬: 파이썬 인터프리터 자체가 메모리를 꽤 차지하기 때문에, 최소 ESP32, Raspberry Pi Pico, STM32 급의 어느 정도 사양이 되는 보드에서만 작동합니다. 구형 아두이노 우노(Uno)에서는 실행할 수 없습니다.

    4. 라이브러리와 커뮤니티

    • 아두이노: 수십 년간 쌓인 방대한 라이브러리가 강점입니다. 듣도 보도 못한 중국산 센서라도 아두이노용 라이브러리는 있을 확률이 매우 높습니다.
    • 마이크로파이썬: 최근 급격히 성장 중이지만, 아두이노에 비하면 센서 라이브러리가 부족할 수 있습니다. 하지만 문자열 처리나 네트워크(Wi-Fi/HTTP) 라이브러리는 파이썬답게 매우 강력합니다.

    💡 요약: 무엇을 선택할까요?

    이런 분께는 아두이노를 추천합니다:

    • 드론 제어, 고속 모터 제어 등 **실시간성(Real-time)**이 매우 중요한 프로젝트
    • 메모리가 적은 아주 작은 칩을 사용해야 하는 경우
    • 임베디드 엔지니어로서의 기초(C/C++)를 탄탄히 다지고 싶은 경우

    이런 분께는 마이크로파이썬을 추천합니다:

    • 이미 파이썬에 익숙하거나, 코딩을 처음 시작하는 입문자
    • 데이터 로깅, 간단한 IoT 기기(웹 서버 등)를 빨리 만들고 싶은 경우
    • 복잡한 알고리즘이나 AI 관련 기능을 기기 내에서 처리하고 싶은 경우

    “스마트 홈 제어는 고도의 연산 성능보다 다양한 시나리오의 적용이 핵심입니다. 따라서 신속한 프로토타이핑과 반복 테스트에 유리한 마이크로파이썬(MicroPython)을 활용하는 것이 개발 효율성 측면에서 가장 적합합니다.”