Basic GPIO Expander - MCP23017
Budget-friendly 16-channel GPIO expander. MCP23017, I²C, chainable to 128 GPIOs, fits $2 PCB deal.

- MCP23017 (I²C I/O Expander)
- MB2S (Bridge rectifier)
- 78L05 (Voltage regulator)
- DC Jack connector
- Screw terminal (2-pin)
- 2-layer PCB (100×40mm)
- SMD components (resistors, capacitors, LEDs)
- 5mm terminal blocks (WJ2EDGK-5.08-12P-14-00A)
- 3-pin headers for jumpers
- I²C connectors (4-pin, 2.54mm)
- Arduino UNO (for testing)
- I²C cables
- Soldering tools (hot plate, iron, tweezers)
- Removed ULN2803A, optocouplers, 7-segment display, BCD driver, slide switches
- Replaced with 78L05 regulator, jumpers, and binary LEDs
- 15 fewer components = simpler and cheaper!
- Power entry: Top left corner (screw terminal + DC jack)
- I²C IN: Bottom left corner
- I²C OUT: Bottom right corner (fixes daisy-chaining issue from industrial version)
- GPIO terminals: Along top and bottom edges
- Address jumpers & LEDs: Grouped together for easy access
- Align the stencil on the PCB and apply solder paste evenly
- Place SMD components starting with the smallest (0603 resistors and capacitors)
- Place the MCP23017 IC last, paying attention to pin 1 orientation
- Reflow on a hot plate at 245°C peak temperature
- Inspect under a microscope for solder bridges or cold joints
- Insert the 5mm terminal blocks, DC jack, and 4-pin headers
- Solder each pin with a temperature-controlled iron
- Insert the jumpers and any remaining through-hole parts
- Trim excess leads and clean the board with isopropyl alcohol
- Set the I²C address using the three jumpers (A0, A1, A2)
- Jumper ON = Logic 0, Jumper OFF = Logic 1
- Address = (A0 × 1) + (A1 × 2) + (A2 × 4)
- Verify the address on the binary LEDs

- Connect the I²C port to an Arduino (SDA, SCL, VCC, GND)
- Upload the test sketch from the GitHub repository
- Connect the testing board with LEDs to the terminal blocks
- The outputs should cycle from GPIO 1 to GPIO 16

- Set a unique address for each module (e.g., 1 and 3)
- Connect I2C_OUT of the first module to I2C_IN of the second
- Update the Arduino code to control both addresses
- The outputs should cycle from GPIO 1 to GPIO 32
- GitHub Repository: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017
- Gerber Files: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017/tree/main/Hardware/GERBER
- Schematic: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017/blob/main/Hardware/Schematic/Schematic.pdf
- Arduino Test Code: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017/tree/main/Software
Want to build a project?
Bring your design to life with the Elektor PCB Service, powered by Eurocircuits. Upload the project files and order professionally manufactured PCBs or assembled boards through a proven European production platform.
Supporting KiCad, Eagle, Gerber, and ODB++ formats, the service is suitable for everything from prototypes and validation builds to series production and volume manufacturing.
Made in Europe. Fast. Reliable. Professional.

Diskussion (0 Kommentare)