로그인회원가입

마이크로파이썬으로 Wi-Fi 신호 강도(RSSI) 측정하는 방법 (ESP32 / ESP8266)

마이크로파이썬(MicroPython)에서는 network 모듈을 사용하면 현재 연결된 Wi-Fi의 RSSI(신호 강도)를 아주 쉽게 측정할 수 있습니다.

보통 ESP32나 ESP8266 보드에서 많이 사용하는 코드 패턴을 정리해 드릴게요.

1. 이미 Wi-Fi에 연결된 상태에서 RSSI 측정하기

현재 Wi-Fi에 연결되어 있는 상태라면 wlan.status('rssi') 메서드를 사용해 실시간 신호 강도를 숫자로 받아올 수 있습니다.

Python

        
import network
import time

# Wi-Fi 스테이션 모드 활성화
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

# Wi-Fi가 연결될 때까지 대기 (실제 코드에서는 공유기 접속 코드가 필요합니다)
while not wlan.isconnected():
    print("연결 대기 중...")
    time.sleep(1)

print("연결 완료!")

# 1초마다 RSSI(신호 강도) 측정하기
while True:
    if wlan.isconnected():
        # RSSI 값 가져오기 (단위: dBm)
        rssi = wlan.status('rssi')
        print(f"현재 Wi-Fi 신호 강도 (RSSI): {rssi} dBm")
    else:
        print("Wi-Fi 연결이 끊어졌습니다.")
    
    time.sleep(1)

2. 주변 Wi-Fi를 스캔하면서 RSSI 측정하기

공유기에 접속하지 않고, 주변에 있는 모든 Wi-Fi 채널을 검색(Scan)하여 각각의 RSSI를 확인하고 싶을 때는 wlan.scan()을 사용합니다.

Python

        
import network

wlan = network.WLAN(network.STA_IF)
wlan.active(True)

print("주변 Wi-Fi 스캔 중...")
# 주변 AP 검색
access_points = wlan.scan()

print(f"{'SSID (이름)':<20} | {'BSSID (Mac)':<18} | {'채널':<5} | {'RSSI':<5}")
print("-" * 60)

for ap in access_points:
    # scan() 결과 구조: (ssid, bssid, channel, rssi, security, hidden)
    ssid = ap[0].decode('utf-8', 'ignore')
    bssid = ':'.join('%02x' % b for b in ap[1])
    channel = ap[2]
    rssi = ap[3]
    
    print(f"{ssid:<20} | {bssid:<18} | {channel:<5} | {rssi:<5} dBm")

💡 RSSI 값 읽는 팁 (참고용)

RSSI는 음수(dBm)로 표시되며, 0에 가까울수록 신호가 강한 것입니다.

  • -30 ~ -50 dBm: 아주 훌륭함 (공유기 바로 옆)
  • -60 ~ -67 dBm: 양호함 (유튜브 스트리밍, 웹서핑 문제 없음)
  • -70 ~ -80 dBm: 신호가 약함 (연결이 불안정하거나 속도가 느려질 수 있음)
  • -90 dBm 이하: 연결 불가 수준

코멘트

답글 남기기