1.はじめに
W5100S-EVB-PicoとCircuitPythonで、Ethernet通信を試行した覚えです。
2.準備
(1)Circuit Pythonのファームウェア
Circuit Pythonは下記サイトから、uf2形式のファームウェアを入手しインストールします。
試行した時のバージョンは、CircuitPython 10.0.1でした。
- W5100S-EVB-Picoの基板上の「BOOTSEL」ボタンを押したまま、をUSBケーブルでパソコンとつなぎます。
- ストレージとして認識されたところに、先ほどのファームウェアをコピーします。
- 書き込みが終わると、再起動します。
このとき、シリアル通信を観測すると、下記の表示が出てきます。
Adafruit CircuitPython 10.0.1 on 2025-10-09; W5100S-EVB-Pico with rp2040 >>>
(2)ライブラリのインストール
Thonnyを利用します
|
W5100S-EVB-Picoに接続 |
|
パッケージを管理 |
|
adafruit-circuitpython-wiznetを検索 |
|
「インストール」ボタンをクリック |
|
5分以上要します |
|
adafruit-circuitpython-wiznetとそれに付帯するライブラリがインストールされました |
※上記の図には、直接関係の無い表示も含まれます。
3.試行・Server
TCP/IPサーバーのコードを整理していきます。
(1)コード
下記のsimpleserverを試行します。
W5100S-EVB-PicoのマイコンRP2040と、LAN通信ICのW5100のピン接続が、上記のコードのままでは定義が異なるので、その部分を修正します。(board.GPxxでピンを定義します)
また、サンプルではDHCPのある環境を前提のコードですが、固定IPアドレスを割り当てるときのコードも追加しています。
| コメントアウトを除くところ | |
|---|---|
| DHCP環境のとき | # with DHCP |
| 固定IPアドレスのとき(下記コードはこちら前提で記載) | # without DHCP |
W5100S-EVB-PicoをUSBケーブルでパソコンとつなぐと、ストレージとして認識されます。
code.pyに下記のコードを記述します。
import board import busio import digitalio import time import adafruit_connection_manager import adafruit_requests import adafruit_wiznet5k.adafruit_wiznet5k_socketpool as socketpool from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K # --------------------------------------------------------- # Pin definitions # SPI0 SPI0_SCK = board.GP18 SPI0_TX = board.GP19 SPI0_RX = board.GP16 SPI0_CSn = board.GP17 # reset W5x00_RSTn = board.GP20 print("Wiznet5k SimpleServer Test") # --------------------------------------------------------- # Initialize SPI bus cs = digitalio.DigitalInOut(SPI0_CSn) spi_bus = busio.SPI(SPI0_SCK, MOSI=SPI0_TX, MISO=SPI0_RX) # Initialize LED pin led = digitalio.DigitalInOut(board.GP25) led.direction = digitalio.Direction.OUTPUT led.value = True # --------------------------------------------------------- # Initialize ethernet interface # with DHCP # eth = WIZNET5K(spi_bus, cs, is_dhcp=False) # without DHCP IP_ADDRESS = (192, 168, 5, 111) SUBNET_MASK = (255, 255, 0, 0) GATEWAY_ADDRESS = (192, 168, 5, 1) DNS_SERVER = (0, 0, 0, 0) MY_MAC = "0x00:0x01:0x02:0x03:0x04:0x05" eth = WIZNET5K(spi_bus, cs, is_dhcp=False, debug=False, hostname="hoge") eth.ifconfig = (IP_ADDRESS, SUBNET_MASK, GATEWAY_ADDRESS, DNS_SERVER) # print out ethernet info 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)) # with DHCP # print("IP lookup adafruit.com: %s" % eth.pretty_ip(eth.get_host_by_name("adafruit.com"))) # --------------------------------------------------------- # Initialize a socket for our server pool = socketpool.SocketPool(eth) # Allocate socket for the server server = pool.socket() # IP address of server server_ip = eth.pretty_ip(eth.ip_address) # Port to listen on server_port = 50007 # Bind to IP and Port server.bind((server_ip, server_port)) # Begin listening for incoming clients server.listen() # --------------------------------------------------------- # Main loop to accept connections and read data while True: try: led.value = False print(f"Accepting connections on {server_ip}:{server_port}") conn, addr = server.accept() # Wait for a connection from a client. print( f"Connection accepted from {addr}, reading exactly 1024 bytes from client" ) with conn: data = conn.recv(1024) if data: led.value = True # Wait for receiving data print(f" receieved: {data}") # Echo message back to client conn.send(data) time.sleep(1) print("Connection closed") except Exception as e: print(f"Error: {e}")
(2)実行
W5100S-EVB-PicoとWindowsパソコンとを同じLANハブに接続し、同じIPアドレス体系にしておきます。 コードを書き込んで、W5100S-EVB-Picoを再起動すると、下記の動作をします。
送信側・Windows PC

受信側・W5100S-EVB-Picoコンソール
オートリロードがオンです。ファイルをUSB経由で保存するだけで実行できます。REPLに入ると無効化します。
code.py 出力:
]0;🐍code.py | 10.0.1\Wiznet5k SimpleServer Test
Chip Version: w5100s
MAC Address: ['0xde', '0xad', '0xbe', '0xef', '0xfe', '0xed']
My IP address is: 192.168.5.111
Accepting connections on 192.168.5.111:50007
Connection accepted from ('0.0.0.0', 0), reading exactly 1024 bytes from client
receieved: b'asdf\n'
Connection closed
Accepting connections on 192.168.5.111:50007
4.試行・Client
TCP/IPクライアントのコードを整理していきます。
(1)コード
前述の、SimpleServerのコードを元に修正していきます。
sp = socketpool.SocketPool(eth)のあとに、s = socketpool.Socket(sp)をつないで、socketが使えるようになります。
import board import busio import digitalio import adafruit_wiznet5k.adafruit_wiznet5k_socketpool as socketpool from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K # --------------------------------------------------------- # Pin definitions # SPI0 SPI0_SCK = board.GP18 SPI0_TX = board.GP19 SPI0_RX = board.GP16 SPI0_CSn = board.GP17 # reset W5x00_RSTn = board.GP20 print("Wiznet5k SimpleClient Test") # --------------------------------------------------------- # Initialize SPI bus cs = digitalio.DigitalInOut(SPI0_CSn) spi_bus = busio.SPI(SPI0_SCK, MOSI=SPI0_TX, MISO=SPI0_RX) # Initialize LED pin led = digitalio.DigitalInOut(board.GP25) led.direction = digitalio.Direction.OUTPUT led.value = True # --------------------------------------------------------- # Initialize ethernet interface # with DHCP # eth = WIZNET5K(spi_bus, cs, is_dhcp=False) # without DHCP IP_ADDRESS = (192, 168, 5, 111) SUBNET_MASK = (255, 255, 0, 0) GATEWAY_ADDRESS = (192, 168, 5, 1) DNS_SERVER = (0, 0, 0, 0) MY_MAC = "0x00:0x01:0x02:0x03:0x04:0x05" eth = WIZNET5K(spi_bus, cs, is_dhcp=False, debug=False, hostname="hoge") eth.ifconfig = (IP_ADDRESS, SUBNET_MASK, GATEWAY_ADDRESS, DNS_SERVER) # print out ethernet info 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)) # with DHCP # print("IP lookup adafruit.com: %s" % eth.pretty_ip(eth.get_host_by_name("adafruit.com"))) # --- TCP Client Operations --- # Replace with your server's IP or hostname HOST = "192.168.5.9" # Replace with your server's port PORT = 50007 try: # Create a socket sp = socketpool.SocketPool(eth) s = socketpool.Socket(sp) # Connect to the server print(f"Connecting to {HOST}:{PORT}...") s.connect((HOST, PORT)) print("Connected!") # Send data request = b"Hello, Server!" s.send(request) print("Request sent.") # Receive data response = s.recv(1024) # Receive up to 1024 bytes print("Response received:") print(response.decode()) except Exception as e: print(f"Error: {e}") finally: # Close the socket if 's' in locals() and s: s.close() print("Socket closed.")
(2)実行
W5100S-EVB-PicoとWindowsパソコンとを同じLANハブに接続し、同じIPアドレス体系にしておきます。 コードを書き込んで、W5100S-EVB-Picoを再起動すると、下記の動作をします。
送信側・W5100S-EVB-Picoコンソール
オートリロードがオンです。ファイルをUSB経由で保存するだけで実行できます。REPLに入ると無効化します。 code.py 出力: Wiznet5k SimpleClient Test Chip Version: w5100s MAC Address: ['0xde', '0xad', '0xbe', '0xef', '0xfe', '0xed'] My IP address is: 192.168.5.111 Connecting to 192.168.5.9:50007... Connected! Request sent.
受信側・Windows PC

5.ハマリどころの覚え書き
(1)「The Ethernet connection is down.」の表示
code.py 出力: ]0;🐍code.py | 10.0.1\Wiznet5k SimpleServer Test Chip Version: w5100s MAC Address: ['0xde', '0xad', '0xbe', '0xef', '0xfe', '0xed'] My IP address is: 192.168.5.111 トレースバック(最新の呼び出しが末尾): ファイル "code.py", 行 82<module> 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k_socketpool.py", 行 284wrapper 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k_socketpool.py", 行 383listen 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k.py", 行 764socket_listen 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k.py", 行 1186_check_link_status 内の ConnectionError: The Ethernet connection is down.
想定原因1・Ethernetケーブルが繋がっていない、あるいは断線している
これは、物理的な障害なので、確認して直しましょう。
想定原因2・LANハブとの相性による
例えば、NETGEAR GS324を使うと、正常なケーブルと正常なコードを使っても接続できず、W5100S-EVB-PicoとGS324のアクセスランプも点灯しません。
ここでは使いませんが、別のEthernet IC「Ethernet-UART ブリッジIC CH9120」は、正常に通信できました。 Ethernet-UART ブリッジIC CH9120 をなんとなく使う | なんでも独り言
(1)W5kライブラリのデバッグ情報を表示したい
下記の引数を、debug=Trueとします。
・・・ eth = WIZNET5K(spi_bus, cs, is_dhcp=False, debug=True, hostname="hoge") ・・・
こうすると、先ほどの「The Ethernet connection is down.」の表示の際にも、細かい情報が出力されます。
code.py 出力: Wiznet5k SimpleServer Test Ethernet link is down… Ethernet link is down… Ethernet link is down… Ethernet link is down… Ethernet link is down… Ethernet link is down… Ethernet link is down… Ethernet link is down… Ethernet link is down… Ethernet link is down… Chip Version: w5100s MAC Address: ['0xde', '0xad', '0xbe', '0xef', '0xfe', '0xed'] My IP address is: 192.168.5.111 *** Get socket. Reserved sockets: [False, False, False] Allocated socket # 1. トレースバック(最新の呼び出しが末尾): ファイル "code.py", 行 82<module> 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k_socketpool.py", 行 284wrapper 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k_socketpool.py", 行 383listen 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k.py", 行 764socket_listen 内の ファイル "/lib/adafruit_wiznet5k/adafruit_wiznet5k.py", 行 1186_check_link_status 内の ConnectionError: The Ethernet connection is down.
Ethernetケーブルが接続されている正常なときは、下記の様な表示になります。
code.py 出力:
Wiznet5k SimpleServer Test
Chip Version: w5100s
MAC Address: ['0xde', '0xad', '0xbe', '0xef', '0xfe', '0xed']
My IP address is: 192.168.5.111
*** Get socket.
Reserved sockets: [False, False, False]
Allocated socket # 1.
* Listening on port=50007, ip=192.168.5.111
*** Opening socket 1
* Opening W5k Socket, protocol=33
Accepting connections on 192.168.5.111:50007
*** Get socket.
Allocated socket # 0
Dest is (0.0.0.0, 0), Next listen socknum is #0
*** Get socket.
Reserved sockets: [True, False, False]
Allocated socket # 2.
* Listening on port=50007, ip=192.168.5.111
*** Opening socket 2
* Opening W5k Socket, protocol=33
Connection accepted from ('0.0.0.0', 0), reading exactly 1024 bytes from client
socket_available called on socket 1, protocol 33
socket_available called on socket 1, protocol 33
socket_available called on socket 1, protocol 33
・・・
6.その他
(1)TCP/IPの確認ツール
Windows・
Linux・ncコマンド
(2)CircuitPythonをVSCodeで使う際の注意
mypy_cacheの無効化
mypy拡張が入っていると、.mypy_cacheフォルダとその関連ファイルが作られて、マイコンW5100S-EVB-Picoのストレージの容量を圧迫します。
以下のやり方で処置できます。
シリアルコンソール
Raspberry Pi PICO系でCircuit Pythonの開発をする際は、パソコンとUSB接続することで、(マスストレージの他に)シリアル通信が有効になります。 そこでは、Pythonの対話型プロンプトが待ち構えていて、起動、停止、リセット、エラーログの表示、その他デバッグが可能になっています。
(3)ドキュメント・サンプルの未整備
今回のW5100S-EVB-Picoの情報も少ないですが、 w5kライブラリのドキュメントやサンプルが、十分に整備されていない印象です。(これもハマリの原因・・・)
- Introduction — Adafruit Wiznet5k Library 1.0 documentation
- Adafruit_CircuitPython_Wiznet5k/examples at main · adafruit/Adafruit_CircuitPython_Wiznet5k · GitHub
ライブラリのソースを直に見ると解決が早いかもしれません。
(4)ピン配置情報
デバイスによって定義が異なるので、参考に書き示します。
RP2040
>>> import board >>> dir(board) ['__class__', '__name__', 'A0', 'A1', 'A2', 'A3', 'GP0', 'GP1', 'GP10', 'GP11', 'GP12', 'GP13', 'GP14', 'GP15', 'GP16', 'GP17', 'GP18', 'GP19', 'GP2', 'GP20', 'GP21', 'GP22', 'GP23', 'GP24', 'GP25', 'GP26', 'GP26_A0', 'GP27', 'GP27_A1', 'GP28', 'GP28_A2', 'GP3', 'GP4', 'GP5', 'GP6', 'GP7', 'GP8', 'GP9', 'LED', 'SMPS_MODE', 'STEMMA_I2C', 'UART', 'VBUS_SENSE', 'VOLTAGE_MONITOR', 'W5K_CS', 'W5K_INT', 'W5K_MISO', 'W5K_MOSI', 'W5K_RST', 'W5K_SCK', 'W5K_SPI', '__dict__', 'board_id']`
ESP32 WROOM
>>> import board >>> dir(board) ['__class__', '__name__', 'BOOT0', 'BUTTON', 'CLK', 'CMD', 'D0', 'D1', 'D2', 'D3', 'I34', 'I35', 'I36', 'I39', 'IO0', 'IO1', 'IO10', 'IO11', 'IO12', 'IO13', 'IO14', 'IO15', 'IO16', 'IO17', 'IO18', 'IO19', 'IO2', 'IO21', 'IO22', 'IO23', 'IO25', 'IO26', 'IO27', 'IO3', 'IO32', 'IO33', 'IO4', 'IO5', 'IO6', 'IO7', 'IO8', 'IO9', 'RX', 'TX', 'VN', 'VP', '__dict__', 'board_id']
ESP32-C6
>>> import board >>> dir(board) ['__class__', '__name__', 'A0', 'A1', 'A2', 'A4', 'A5', 'A6', 'D0', 'D1', 'D10', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'I2C', 'LED', 'LED_INVERTED', 'LP_I2C_SCL', 'LP_I2C_SDA', 'LP_UART_RXD', 'LP_UART_TXD', 'MISO', 'MOSI', 'MTCK', 'MTDI', 'MTDO', 'MTMS', 'RX', 'SCK', 'SCL', 'SDA', 'SPI', 'TX', 'UART', '__dict__', 'board_id']
7.まとめ
今回は、W5100S-EVB-PicoとCircuitPythonで、TCP/IPの送受信を試行しました。
参考資料
- W5100S-EVB-Pico: High-Performance Networking with Raspberry Pi RP2040 | WIZnet
- GitHub - adafruit/Adafruit_CircuitPython_Wiznet5k: Pure-Python interface for WIZNET 5k Ethernet modules
- WIZnet W5100S-EVB-Picoのレビュー - あっきぃ日誌
(1) Temperature Transfer W5500 Ethernet Shield (Pico)-Server - Hackster.io
- 【Arduino】W5100S-EVB-Pico, W5500-EVB-Picoを使う – たまねぎブログ
- Introduction — Adafruit Wiznet5k Library 1.0 documentation
- RP2040-HAT-CircuitPython/examples/HTTP/Webserver at master · Wiznet/RP2040-HAT-CircuitPython · GitHub
- Adafruit_CircuitPython_Wiznet5k/examples at 6b3484d1ee243a7e8bc0513ab84956e1b6e2a520 · adafruit/Adafruit_CircuitPython_Wiznet5k · GitHub
- https://cdn-learn.adafruit.com/downloads/pdf/ethernet-for-circuitpython.pdf
- Overview | Ethernet for CircuitPython with Wiznet5K | Adafruit Learning System





