Chapter 4. 무선 Wi-Fi 연결 테스트

이제 Pico 2 보드의 핵심 진가인 무선 인터넷 기능을 활성화해 보겠습니다. 단계별로 코드를 한 줄씩 늘려가며 어떻게 인터넷에 연결되는지 원리를 이해해 봅시다.

4.1 네트워크 주파수 확인

⚠️ 중요한 제약 조건 (연결 전 필독!)

Pico 2 보드는 2.4GHz 대역의 와이파이만 지원합니다. 최신 공유기가 제공하는 5GHz 대역(보통 와이파이 이름 끝에 '5G'라고 적힌 것)에는 물리적으로 연결할 수 없습니다. 반드시 스마트폰이나 노트북으로 주변의 2.4GHz 와이파이 이름을 먼저 확인해 주세요.

Wi-Fi 네트워크

무선 네트워크 연결을 통해 사물인터넷(IoT) 세상으로 진입하기

4.2 단계별 와이파이 연결 실습

복잡한 인터넷 연결 과정을 3가지 단계로 쪼개어 정복해 보겠습니다.

[1단계] Wi-Fi 기능 켜고 주변 공유기 검색하기

내장된 무선 안테나를 깨우고(Active), 내 스마트폰처럼 주변에 잡히는 와이파이 목록을 스캔(Scan)하는 가장 첫 단계입니다.

import network
import time

# 1. 와이파이를 '스테이션(STA) 모드'로 설정합니다. 
# STA_IF는 공유기(AP)에 접속하는 스마트폰 역할을 하겠다는 뜻입니다.
wlan = network.WLAN(network.STA_IF)

# 2. 꺼져 있는 와이파이 칩셋의 전원을 켭니다.
wlan.active(True)
print("와이파이 안테나가 활성화되었습니다!")

# 3. 주변의 무선 공유기를 검색하여 출력합니다.
print("주변 Wi-Fi 검색 중...")
networks = wlan.scan()
for net in networks:
    print("발견된 와이파이:", net[0].decode('utf-8'))

💡 코드가 주는 의미

위 코드를 실행했을 때 Thonny 하단 창에 주변 와이파이 이름들이 쭉 나열된다면, 보드의 무선 안테나가 하드웨어적으로 아주 건강하게 잘 작동하고 있다는 증거입니다!

[2단계] 공유기에 접속 명령 내려보기

이제 접속할 공유기의 이름(SSID)과 비밀번호(Password)를 입력하고 직접 접속 신호를 보내는 단계입니다.

import network
import time

# 내 공유기 정보 입력 (정확하게 입력해야 합니다!)
ssid = '여기에_와이파이_이름'
password = '여기에_비밀번호'

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

# 공유기에 접속을 시도합니다.
print(ssid, "에 연결을 시도합니다...")
wlan.connect(ssid, password)

# 연결 신호가 가고 처리되는 동안 5초간 잠시 기다려줍니다.
time.sleep(5)

# 연결이 성공했는지 Boolean(True/False) 값으로 확인합니다.
print("연결 성공 여부:", wlan.isconnected())

[3단계] 강제 재접속 기능과 무한 대기 루프 (완성형)

보드가 이미 기존 와이파이에 연결되어 있다면 매번 접속 과정을 거치지 않아 효율적이지만, 와이파이를 다른 곳으로 변경하거나 강제로 끊고 재접속(새로고침)하고 싶을 때는 문제가 됩니다. 기존 연결을 확실하게 파기(Disconnect)하고 처음부터 다시 안전하게 접속하는 실전 완성형 코드입니다.

import network
import time

ssid = '여기에_와이파이_이름'
password = '여기에_비밀번호'

def connect_wifi(force_reconnect=True):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    
    # 만약 이미 연결되어 있는 상태인데, 강제 재접속(force_reconnect)이 True라면!
    if wlan.isconnected() and force_reconnect:
        print("기존 Wi-Fi 연결이 감지되었습니다. 연결을 끊고 재접속을 시도합니다...")
        wlan.disconnect() # ◀ 기존 연결 계약을 즉시 해제합니다.
        
        # 연결이 완전히 끊어질 때까지 안전하게 대기합니다.
        while wlan.isconnected():
            print("x", end="")
            time.sleep(0.5)
        print("\n기존 연결 해제 완료.")
    
    # 이미 연결되어 있고, 강제 재접속을 원하지 않는 경우
    elif wlan.isconnected() and not force_reconnect:
        print("이미 와이파이에 연결되어 있습니다.")
        print("IP 주소:", wlan.ifconfig()[0])
        return

    # [새로운 연결 프로세스 시작]
    wlan.connect(ssid, password)
    
    print(f"{ssid}에 연결 중", end="")
    # 와이파이가 완전히 붙을 때까지 점(.)을 찍으며 대기합니다.
    while not wlan.isconnected():
        print(".", end="")
        time.sleep(0.5)
        
    print("\n🎉 와이파이 연결 성공!")
    print("보드가 부여받은 고유 IP 주소:", wlan.ifconfig()[0])

# 함수 실행 (기본적으로 기존 연결을 끊고 새로 접속함)
connect_wifi(force_reconnect=True)

4.3 결과 확인 및 해석

최종 3단계 코드를 실행했을 때 하단 셸 창에 192.168.x.x 혹은 10.x.x.x와 같은 숫자가 나오면 성공입니다. 이 숫자는 전 세계에서 오직 나만 식별할 수 있도록 공유기가 내 보드에게 나누어 준 내부 주소(IP)입니다.

Wi-Fi 네트워크

무선 네트워크를 통한 자동 IP 할당 예시

💡 알아두면 좋은 무선 통신 함수 요약

wlan.disconnect(): 현재 공유기와의 무선 연결을 강제로 끊어버립니다. 네트워크 정보를 갱신하거나 재시험할 때 필수적입니다.
wlan.isconnected(): 현재 보드가 인터넷에 잘 붙어있는지 유무를 True/False로 알려줍니다.
wlan.ifconfig(): 연결된 네트워크의 상세 배열을 반환하며, [0]번 방에 저장된 IP 주소는 다음 장인 'IoT 웹 서버' 제작 시 외부 접속 주소로 사용됩니다.