树莓派Pi Pico有线连接
使用器件
- 树莓派Pi Pico
- W5500模块
导入CircuitPython库
-
所需库文件:
W5500 adafruit_wiznet5k
adafruit_requests.mpy
-
库网址:
- https://github.com/adafruit/Adafruit_CircuitPython_Wiznet5k
- https://github.com/adafruit/Adafruit_CircuitPython_Requests
点击右侧Releases,下载最新包-adafruit-circuitpython-wiznet5k-7.x-mpy-1.11.1.zip、adafruit-circuitpython-requests-7.x-mpy-1.10.2.zip。
-
解压后分别打开,将lib文件夹下的所有文件复制到CIRCUITPY驱动器下lib文件夹中。
接线:
Pi Pico | W5500 |
---|---|
GP10 | SCLK |
GP11 | MOSI |
GP12 | MISO |
GP13 | SCS |
GP15 | RST |
GND | GND |
3.3V | 3.3V |
代码测试:
-
Ping-test
import board import busio import digitalio import time from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K SPI1_SCK = board.GP10 SPI1_TX = board.GP11 SPI1_RX = board.GP12 SPI1_CSn = board.GP13 W5500_RSTn = board.GP15 print("Wiznet5k Ping Test (no DHCP)") # 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, 3, 111) SUBNET_MASK = (255, 255, 255, 0) GATEWAY_ADDRESS = (192, 168, 3, 1) DNS_SERVER = (8, 8, 8, 8) led = digitalio.DigitalInOut(board.GP25) led.direction = digitalio.Direction.OUTPUT ethernetRst = digitalio.DigitalInOut(W5500_RSTn) ethernetRst.direction = digitalio.Direction.OUTPUT # For Adafruit Ethernet FeatherWing cs = digitalio.DigitalInOut(SPI1_CSn) # For Particle Ethernet FeatherWing # cs = digitalio.DigitalInOut(board.D5) spi_bus = busio.SPI(SPI1_SCK, MOSI=SPI1_TX, MISO=SPI1_RX) # Reset W5500 first ethernetRst.value = False time.sleep(1) ethernetRst.value = True # Initialize ethernet interface with DHCP # eth = WIZNET5K(spi_bus, cs) # Initialize ethernet interface without DHCP eth = WIZNET5K(spi_bus, cs, is_dhcp=False, mac=MY_MAC) # Set network configuration eth.ifconfig = (IP_ADDRESS, SUBNET_MASK, GATEWAY_ADDRESS, DNS_SERVER) 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!")
-
socket代码
import board import busio import digitalio import time from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket SPI1_SCK = board.GP10 SPI1_TX = board.GP11 SPI1_RX = board.GP12 SPI1_CSn = board.GP13 W5500_RSTn = board.GP15 print("Wiznet5k SimpleServer Test (DHCP)") # 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, 3, 111) SUBNET_MASK = (255, 255, 255, 0) GATEWAY_ADDRESS = (192, 168, 3, 1) DNS_SERVER = (8, 8, 8, 8) led = digitalio.DigitalInOut(board.GP25) led.direction = digitalio.Direction.OUTPUT ethernetRst = digitalio.DigitalInOut(W5500_RSTn) ethernetRst.direction = digitalio.Direction.OUTPUT # For Adafruit Ethernet FeatherWing cs = digitalio.DigitalInOut(SPI1_CSn) # For Particle Ethernet FeatherWing # cs = digitalio.DigitalInOut(board.D5) spi_bus = busio.SPI(SPI1_SCK, MOSI=SPI1_TX, MISO=SPI1_RX) # Reset W5500 first ethernetRst.value = False time.sleep(1) ethernetRst.value = True # # Initialize ethernet interface without DHCP # eth = WIZNET5K(spi_bus, cs, is_dhcp=False, mac=MY_MAC, debug=True) # # Set network configuration # eth.ifconfig = (IP_ADDRESS, SUBNET_MASK, GATEWAY_ADDRESS, DNS_SERVER) # Initialize ethernet interface with DHCP eth = WIZNET5K(spi_bus, cs, is_dhcp=True, mac=MY_MAC, debug=True) 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)) # Initialize a socket for our server socket.set_interface(eth) server = socket.socket() # Allocate socket for the server server_ip = None # IP address of server server_port = 50007 # Port to listen on server.bind((server_ip, server_port)) # Bind to IP and Port server.listen() # Begin listening for incoming clients conn, addr = server.accept() # Wait for a connection from a client. print("socket connected") while True: # Maintain DHCP lease eth.maintain_dhcp_lease() led.value = not led.value time.sleep(1) with conn: # data = conn.recv() # print(data) # conn.send(data) # Echo message back to client while True: data = conn.recv(10) if data: print(data) conn.send(data) # Echo message back to client break print("Done!")