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

#include "WiFi.h"
// Set to a lower value if experiencing connection issues
WiFi.setTxPower(WIFI_POWER_8_5dBm);

python

import network
station = network.WLAN(network.STA_IF)
station.active(True)
# Set TX power to 10 dBm
station.config(txpower=10)

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)

import network
import time
from machine import Pin

IN_LED = 8
timer0 = Timer(0)

def blink(timer):
    Pin(IN_LED,Pin.OUT).value(not Pin(IN_LED,Pin.OUT).value())  # LED 상태 반전

def set_blink(s):
    if s == 0:
        Pin(IN_LED,Pin.OUT).on() # 8번핀이 on 일때 보드 LED는 off
        timer0.deinit()
    else:
        timer0.init(period=s, mode=Timer.PERIODIC, callback=blink)

def connect_wifi(ssid, password):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)    
    if not wlan.isconnected():
        wlan.connect(ssid, password)        
        while not wlan.isconnected():
            print(".", end="")
            time.sleep(0.2)            
    led.value(1) 


set_blink(100)  # 타이머를 이용해서 깜빡임 시작
connect_wifi('사용자_WIFI_이름', 'WIFI_비밀번호')
set_blink(0)   # 타이머 정지 깜빡임 정지

# ex)
# set_blink(100)  # 타이머를 이용해서 깜빡임 시작
# start_webserver()
# doing_something()
# set_blink(0)   # 타이머 정지 깜빡임 정지


마치며

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

코멘트

“ESP32-C3 Super Mini 사놓고 WiFi 때문에 버릴 뻔했습니다” 에 하나의 답글

  1. micro2iot 아바타

    [구매정보] 블로그에서 사용한 부품 구매정보입니다.
    아래 링크를 통해 구매 시 소정의 수수료를 제공받으며, 채널 운영에 큰 도움이 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다