마이크로파이썬(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 이하: 연결 불가 수준


답글 남기기
댓글을 달기 위해서는 로그인해야합니다.