Nowadays, many electronic devices have access to the internet, and they can be operated or controlled through it. Physically, these devices are usually connected to the home network via LAN or Wi-Fi. So there is reason to take a closer look at this topic.
A practical use was also quickly found—namely, the remote control of parts of the amateur radio setup. For this, I need digital inputs and outputs, as well as analog inputs and outputs. A “simple” serial interface would also be quite useful.
After a bit of research, I decided on the following solution:
I designed the actual I/O interfaces as a separate circuit board (Basis IO-Board). This allows switching between Wi-Fi, LAN, or USB simply by replacing (plug) the microcontroller board. Everything together, fits into a standard DIN rail plastic enclosure. All external interfaces are galvanically isolated from each other and from the MCU board. The external connections are routed to plug-in or screw terminals. The power supply is nominal 24 V DC.
All variants have the following features in common:
Operation via a web browser, or in the case of USB, a web-like interface.
All parameters (network settings, labels, etc.) can be individually modified and are permanently stored.
Serial number and MAC address are generated from the globally unique IDs of the MCUs.
Additional USB-C port (reversible connector) for firmware updates.
Status LED for operating state and the condition of the digital I/Os
MQTT runs in parallel with the web server and uses the same IO data/labels (only WLAN and LAN version).
Basis IO - Board
The IO Basis module contains the following blocks:

WLAN - Board
Espressif Systems was not very well known to me beforehand, and I initially had no knowledge of their components or the corresponding development environment for firmware. I was already familiar with Arduino IDE, but I had not yet implemented any project with it.
In the end, I chose the Arduino IDE because the library associated with the ESP32 is very extensive and convenient (C++). Ultimately, exploring the Arduino ecosystem proved worthwhile—the IDE is perfectly fine and also meets professional requirements. The MCU used here is an ESP32-C5-WROOM-1N8R8.

LAN - Board
WIZnet is the manufacturer of the W5500. For the LAN version, I initially took some inspiration from their application examples, but eventually switched to a completely different firmware solution. Here too, the Arduino IDE delivered very good professional results. The MCU is an STM32F103-RCT6TR. HTML code for controlling (what you see in the Browser) can be paced into the MCUs Flash or into an SD card.

USB - Board
For developing the Human Interface Device, the Arduino IDE libraries were not well suited at the time. Therefore, I switched to the familiar STM32CubeIDE. The MCU is an STM32F103-RBT6TR. In another version, a USB hub has been added. Thus, several modules can be connected in series.

The control interface in the web browser
All three versions (WLAN, LAN, USB) have the identical control interface. While the Wi-Fi and LAN versions work with any WEB browser, the USB version requires PC software. This PC software was developed in "electron" and is therefore available for any operating system (Windows, Linux).
WLAN interface
To set the WLAN module in a WLAN network, the module first reports to 192.168.4.1 as "default gatway (access point)" to enter the WLAN data, which is then saved.

LAN interface
For the setting of the LAN module in a LAN network, there is initially a default setting with which the module can be found in the LAN. After that, these settings can be customized.

USB interface
When you start the PC, the software that can be used to assign the USB devices is activated to set the USB module in a USB network (more than 1 USB interface is connected).

