본문 바로가기

Raspberry Pi Pico (W5100S-EVB-Pico) DHCP 사용하기

by rudals.kim 2022. 4. 14. 댓글 개
반응형
Adafruit CircuitPython 7.2.5 / Raspberry Pi Pico with rp2040 에서 테스트 되었습니다.

 

Raspberry Pi Pico에 위즈넷 이더넷 칩셋이 달린 W5100S-EVB-Pico 보드를 사용하여 DHCP 테스트를 해 보았습니다.

 

DHCP 테스트하기 전에 CircuitPython이 7.2.5로 업데이트되어 먼저 라즈베리파이 피코를 최신 버전으로 업데이트하는 작업을 먼저 진행하였습니다. 아래 사이트에서 최신 버전인 adafruit-circuitpython-raspberry_pi_pico-en_US-7.2.5.uf2 파일을 다운로드 받았습니다.

 

CircuitPython - Pico Download

The Raspberry Pi foundation changed single-board computing when they released the Raspberry Pi computer, now they’re ready to do the same for microcontrollers with the release of the brand new Raspberry Pi Pico. This low-cost microcontroller board featur

circuitpython.org

라즈베리파이 피코 보드의 BOOTSEL 버튼을 누르고 USB 케이블을 연결하여 다운로드 받은 최신 버전의 CircuitPython 7.2.5 파일을 RPI-RP2 드라이브로 복사해 넣습니다. 복사가 완료되면 라즈베리파이 피코가 재부팅되고 Thonny에 아래와 같은 버전 메시지가 나오면 최신 버전으로 제대로 업데이트된 것입니다.

다음으로 이더넷을 사용하기 위해서는 먼저 위즈넷의 W5100S 이더넷 칩셋 구동을 위한 라이브러리를 설치해야 합니다.

아래 github에 접속하여 raspberry pi pico에서 사용하기 위한 circuitpython용 wiznet 라이브러리를 다운로드 받습니다.

 

GitHub - Wiznet/RP2040-HAT-CircuitPython

Contribute to Wiznet/RP2040-HAT-CircuitPython development by creating an account on GitHub.

github.com

다운로드 받은 파일을 압축 해제하면 libraries 디렉터리가 있는데 그 안에 아래 그림처럼 adafruit_wiznet5k 디렉터리가 있습니다. 이 디렉터리를 raspberry pi pico 드라이브의 lib 디렉터리에 복사해 넣습니다.

압축 해제 한 디렉터리의 examples/DHCP/w5x00_DHCP.py 예제를 피코에 저장 후 실행해 봅니다.

import board
import busio
import digitalio
import time
from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K
import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket
##SPI0
SPI0_SCK = board.GP18
SPI0_TX = board.GP19
SPI0_RX = board.GP16
SPI0_CSn = board.GP17

##reset
W5x00_RSTn = board.GP20

print("Wiznet5k DHCP Test")

# Setup your network configuration below
# random MAC, later should change this value on your vendor ID
MY_MAC = (0x00, 0x01, 0x02, 0x03, 0x04, 0x05)
IP_ADDRESS = (192, 168, 0, 111)
SUBNET_MASK = (255, 255, 0, 0)
GATEWAY_ADDRESS = (192, 168, 0, 1)
DNS_SERVER = (8, 8, 8, 8)

led = digitalio.DigitalInOut(board.GP25)
led.direction = digitalio.Direction.OUTPUT

ethernetRst = digitalio.DigitalInOut(W5x00_RSTn)
ethernetRst.direction = digitalio.Direction.OUTPUT

cs = digitalio.DigitalInOut(SPI0_CSn)
spi_bus = busio.SPI(SPI0_SCK, MOSI=SPI0_TX, MISO=SPI0_RX)

ethernetRst.value = False
time.sleep(1)
ethernetRst.value = True

eth = WIZNET5K(spi_bus, cs, is_dhcp=True, mac=MY_MAC, debug=False)

print("Chip Version:", eth.chip)
print("MAC Address:", [hex(i) for i in eth.mac_address])
print("My IP address is:", eth.pretty_ip(eth.ip_address))

while True:
    led.value = not led.value
    time.sleep(1)

print("Done!")

 

위 코드는 간단히 SPI0에 연결되어 있는 W5100S 이더넷 칩셋을 초기화한 후 DHCP 서버로부터 IP를 얻어온 후 칩셋/MAC/IP 주소를 보여주는 코드입니다. 실행해 보면 Thonny의 Shell 창에 해당 정보가 보여집니다.

Windows 10 PC에서 cmd 창의 띄운 후 W5100S-EVB-Pico에 할당된 IP인 192.168.0.8로 ping 테스트를 해 보니 W5100S-EVB-Pico가 정상적으로 응답하고 있습니다.

W5100S-EVB-Pico를 사용하여 DHCP 서버로부터 자동 IP를 할당받고 PING 테스트를 통해 W5100S-EVB-Pico 보드가 정상 동작됨을 확인해 보았습니다.

반응형

댓글