A flexible Ethernet-based Modbus TCP IO module built on the Wiznet W5500-EVB-Pico board (RP2040). Features a modern web interface for configuration and real-time monitoring.

- DHCP support with fallback to static IP
- Configurable network settings via web interface
- Custom hostname support
- Real-time IP address display
- Built-in LED indicates Modbus client connection status
- Digital Inputs: 8 channels (GP0-GP7)
- Configurable pullup resistors
- Input inversion option
- Latching capability (inputs remain ON until reset)
- Latch reset via web interface or Modbus
- Digital Outputs: 8 channels (GP8-GP15)
- Toggle outputs directly from web interface
- Configurable initial state (ON/OFF at startup)
- Output inversion option
- Real-time status updates
- Analog Inputs: 3 channels (GP26-GP28)
- 12-bit resolution (0-4095)
- 3.3V reference voltage
- Values displayed in millivolts (0-3300mV)
- Real-time trend graphs
- Protocol: Modbus TCP
- Default Port: 502
- Register Map:
- 16 Discrete Inputs (Digital Inputs)
- 16 Coils (Digital Outputs)
- Coils 0-7: Control digital outputs
- Coils 100-107: Reset digital input latches
- 16 Input Registers (Analog Inputs)
- 16 Holding Registers



- Modern, responsive design
- Live IO status updates
- Interactive digital output control
- Digital input latch reset functionality
- Configuration management
- Network settings
- DHCP toggle with sliding switch
- Hostname configuration
- IO configuration with table-based layout
- Digital input pullup, inversion, and latching options
- Digital output initial state and inversion options
- Status indicators
- Current IP address
- Hostname
- Modbus client connection status
- Analog input trend visualization
- Module: Wiznet W5500-EVB-Pico
- Processor: RP2040 (Dual-core ARM Cortex-M0+)
- Ethernet: W5500 with lwIP stack
- Power: USB or PoE (requires PoE module)
- USB: Custom VID/PID for unique device identification
| Function |
GPIO Pin |
Description |
| DI1 |
GP0 |
Digital Input 1 |
| DI2 |
GP1 |
Digital Input 2 |
| DI3 |
GP2 |
Digital Input 3 |
| DI4 |
GP3 |
Digital Input 4 |
| DI5 |
GP4 |
Digital Input 5 |
| DI6 |
GP5 |
Digital Input 6 |
| DI7 |
GP6 |
Digital Input 7 |
| DI8 |
GP7 |
Digital Input 8 |
| DO1 |
GP8 |
Digital Output 1 |
| DO2 |
GP9 |
Digital Output 2 |
| DO3 |
GP10 |
Digital Output 3 |
| DO4 |
GP11 |
Digital Output 4 |
| DO5 |
GP12 |
Digital Output 5 |
| DO6 |
GP13 |
Digital Output 6 |
| DO7 |
GP14 |
Digital Output 7 |
| DO8 |
GP15 |
Digital Output 8 |
| Function |
GPIO Pin |
ADC Channel |
Range |
| AI1 |
GP26 |
ADC0 |
0-3300mV |
| AI2 |
GP27 |
ADC1 |
0-3300mV |
| AI3 |
GP28 |
ADC2 |
0-3300mV |
| Function |
GPIO Pin |
| CS |
GP17 |
| IRQ |
GP21 |
| SCK |
GP18 |
| MOSI |
GP19 |
| MISO |
GP16 |
- PlatformIO
- Framework: Arduino
- Board: Raspberry Pi Pico
- Core: Earlephilhower's Arduino core
- Arduino Framework
- W5500lwIP Ethernet Library
- ArduinoModbus
- ArduinoJson
- LittleFS for file system operations
- Clone the repository
- Open in PlatformIO
- Build and upload to the board
- DHCP: Enabled
- Fallback Static IP: 192.168.1.10
- Subnet: 255.255.255.0
- Gateway: 192.168.1.1
- Modbus Port: 502
- Configuration stored in LittleFS
- Version control for config structure
- Automatic migration of settings
- Power up the board via USB or PoE
- Connect to network via Ethernet
- Access web interface via IP address
- Configure network settings if needed
- Configure IO settings as required:
- Set digital input pullup, inversion, and latching options
- Configure digital output initial state and inversion options
- Control digital outputs via web interface or Modbus
- Monitor inputs and outputs in real-time
- Reset latched inputs via web interface or by writing to Modbus coils 100-107
- Serial debug output (115200 baud)
- Web interface status indicators
- Modbus client connection monitoring
- Built-in LED indicates Modbus client connection