DEI.
Week 06 · Fab Academy 2026 · Lab Rwanda

Electronics Design

Designing a custom ESP32-S based PCB from scratch, schematic capture, PCB layout, DRC, and fabrication-ready Gerber files using KiCad.

Overview

Introduction

Electronics design is a fundamental skill in embedded systems and digital fabrication, enabling ideas to be transformed into functional hardware. During this week, we studied essential electronic components, resistors, capacitors, diodes, transistors, voltage regulators, microcontrollers, sensors, and actuators, and the electrical principles governing them, including voltage, current, power, and Kirchhoff's laws.

We explored Electronic Design Automation (EDA) tools for schematic capture, PCB layout, simulation, and fabrication. Practical experience was gained using laboratory test equipment: multimeters, regulated power supplies, oscilloscopes, and logic analyzers to observe the behavior of embedded microcontroller systems.

Circuit Fundamentals
Voltage, current, power, Kirchhoff's laws, and how they apply to embedded board design.
EDA Tools
Hands-on use of KiCad for schematic capture, PCB layout, and 3D visualization.
Lab Equipment
Multimeters, oscilloscopes, regulated power supplies, and logic analyzers for real-world verification.

Kirchhoff in plain terms. Kirchhoff's current law says all the current flowing into a node has to flow back out, so a node cannot store charge. Kirchhoff's voltage law says the voltages around any closed loop add up to zero. I used both directly. Current law told me the 3.3V rail had to carry the sum of every part it feeds, so the regulator and its traces had to handle that total. Voltage law is what sizes a current limiting resistor: the 5V supply minus the LED forward voltage is the voltage left across the resistor, and dividing that by the current I want gives the resistor value. Seeing the laws as simple bookkeeping rules made the rest of the design feel like arithmetic instead of guesswork.

This Week

Assignments

Group Assignment
Use laboratory test equipment to observe the operation of an embedded microcontroller. Measure voltage and digital signals using a regulated power supply, multimeter, and oscilloscope or logic analyzer to understand how microcontrollers operate in real hardware conditions.You can view our group assignment

The group assignment gave us direct exposure to signal behavior at the hardware level, we could visually confirm clock signals, GPIO toggling, and power rail stability under load.

Individual Assignment
Simulate a circuit. Use an EDA tool to design an embedded microcontroller system using parts from the lab inventory. Check design using ERC and DRC. Extra credit: try another workflow, design a case for the board.

For my individual assignment, I designed a custom ESP32-S based board using KiCad, including power regulation, boot control, and multiple communication interfaces.

Group Assignment

Lab Test Equipment

For the group work we put real lab instruments on a running microcontroller board so we could see what the datasheet only describes. The full write up lives on our group assignment page. Here is what I learned from each tool and what I took back into my own design.

The most useful instrument was the logic analyzer. We clipped its probes onto the microcontroller board and watched the digital lines in real time. On the UART pins it showed the start bit, the eight data bits and the stop bit of every byte the board sent, and the captured baud rate matched the 115200 we had configured. On the I2C lines it decoded the start condition, the 7 bit address, the acknowledge bits and the data, so we could confirm the board was actually talking to a sensor and not just toggling a pin. Seeing the protocol decoded next to the raw waveform made it obvious why pull up resistors and clean signal routing matter on a board.

🔍 Logic Analyzer
Clipped onto the microcontroller board to capture and decode the digital buses. We watched UART frames byte by byte and decoded I2C start, address, acknowledge and stop. This confirmed the GPIO toggling and the bus timing were correct before trusting them in firmware.
UART decodeI2C decodeGPIO timing
📈 Oscilloscope
Used on the same board to see the analog shape of a signal that the logic analyzer only shows as ones and zeros. We measured the 3.3V rail for noise, watched it stay flat when the board switched load, and checked the rise and fall edges of a GPIO line for clean transitions.
Rail noiseEdge shapeVoltage vs time
🔢 Multimeter
The everyday check. We confirmed the regulator output sat at 3.3V, measured current draw on the rail, and used continuity mode to verify there were no shorts between power and ground before powering anything on. This is the habit I carried straight into my own board.
VoltageCurrentContinuity
The logic analyzer probes clipped onto the microcontroller board
The logic analyzer probes clipped onto the microcontroller board

The big lesson was that a board is only as good as the signals you can measure on it. Because the regulated power supply let us set a current limit, we could bring the board up slowly and stop it from frying if something was wrong, which is exactly why I added the multimeter continuity check to my own bring up plan below.

Software

Tools & Software Used

KiCad was the primary EDA platform, a single, unified open-source software that bundles all the tools needed to go from schematic to fabrication-ready files. Its compatibility with the Fab Academy library made it the ideal choice for this week's work.

KiCad ModulePurposeNotes
Schematic EditorSchematic capture and ERCUsed Fab KiCad library for component symbols
PCB EditorBoard layout, trace routing, DRCTrack width set to 0.8 mm throughout
3D ViewerPCB visualization before fabricationVerified component orientation and placement
Gerber PlotExport fabrication filesGerber + drill files generated
SPICE SimulatorCircuit simulationLED + resistor and voltage regulator validation
Architecture

Board Functional Blocks

The custom ESP32-S board was organized into four functional blocks, each serving a critical role in making the board reliable, programmable, and extensible.

Input Voltage
5V DC
Regulated Output
3.3V
MCU
ESP32-S
Track Width
0.8mm
Interfaces
3types
DRC Status
Pass
Power Section
5V input with a 3.3V linear regulator to supply clean, stable voltage for the ESP32-S and all connected peripherals.
5V Input3.3V LDO
Boot & Enable Circuit
EN button for hardware reset and a BOOT button to place the ESP32-S in programming mode, allowing easy firmware flashing without external tools.
EN ResetBOOT ButtonPull-up Resistors
Communication Interfaces
Three standard interfaces exposed via headers: UART (TX/RX) for programming and debugging, SPI (MOSI/MISO/SCK/CS), and I²C (SDA/SCL) for sensors.
UARTSPII²C
GPIO Headers
Additional GPIO header pins brought out for connecting custom sensors, actuators, LEDs, and other external peripherals to expand the board's functionality.
Digital I/OAnalog InputPWM
Workflow

Step-by-Step Process

The full board design followed a structured workflow, from software setup and library configuration through schematic, layout, verification, and final export.

Step 01
Software Installation: KiCad
Downloaded KiCad from the official website and installed the full suite: Schematic Editor, PCB Editor, Symbol and Footprint Libraries, and the 3D Viewer. Launched KiCad and verified all modules run correctly before beginning.
KiCad 7+Schematic EditorPCB Editor3D Viewer
KiCad Installation
KiCad launched and ready
Step 02
Adding the Fab KiCad Library
Downloaded the Fab KiCad library from the Fab Academy repository. During installation, I opened the Plugins and Content Manager, searched for FABLIB, clicked Install, and applied pending changes.
Fab LibrarySymbol LibraryFootprint Library
Fab KiCad Library search
Searching FABLIB in Plugins and Content Manager
Fab library installed
Fab Academy library successfully installed
Step 03
Schematic Design
Placed all components: ESP32-S, voltage regulators, resistors, BOOT and EN buttons, and GPIO headers. Connected power rails and signal pins, and added net labels for clarity. Ran ERC and resolved all errors before proceeding to layout.
ESP32-SNet LabelsERC Passed
ESP32-S
ESP32-S placed in schematic
Power section
Power regulation, 3.3V input section
Adding components
Adding other components
Communications
Adding communication interfaces
BOOT and EN button schematic with pull up resistors
The BOOT and EN buttons with their pull up resistors
Step 04
Footprint Assignment
Assigned physical footprints to every symbol in the schematic using the Footprint Assignment tool. Cross-referenced each footprint with the lab's physical component inventory to confirm availability. Verified all links were clean before pushing to PCB layout.
SMD FootprintsThrough-HoleFab Inventory
Footprint assignment
Footprint assignment tool
Step 05
PCB Editor & Manual Routing
Switched to the PCB Editor and imported the schematic. Defined the board outline and overall dimensions. Placed the ESP32-S centrally and arranged support components near their related pins. Set global track width to 0.8 mm. Manually routed all signal and power traces, maintaining proper clearances and eliminating all shorts.
0.8mm TracksManual RoutingBoard Outline

Design Rule: All traces were kept at 0.8 mm minimum width to ensure reliable fabrication on the lab's milling machine. Power traces were kept short and direct to minimize resistance and voltage drop.

Description of image
The fully routed PCB layout in KiCad
The finished routing in KiCad, every trace at 0.8 mm with the antenna and headers in place
Step 06
Design Rule Check (DRC)
Ran the full DRC suite in KiCad's PCB Editor to confirm the board can actually be fabricated on the lab milling machine. The check compares every track, pad and gap against the rules I set: a 0.8 mm minimum track width and a clearance large enough for the milling bit to cut between copper. The first run was not clean, so I worked through the violations one at a time.
DRCTrack widthClearanceFabricable

Why this proves the board is fabricable. The milling machine cuts away copper with an endmill of a fixed diameter, so any gap narrower than that tool cannot be cut and would leave two traces shorted together. By setting the clearance rule to match the tool and the track width to 0.8 mm, a clean DRC pass means every gap on my board is wide enough to mill and every trace is wide enough to survive the cut and carry its current.

Problems I hit and how I fixed them:

  1. Clearance violations near the header pins. Two traces ran too close to the GPIO header pads, leaving a gap smaller than the milling clearance. I rerouted those traces to take a wider path around the pads and nudged the header slightly so the gaps opened up above the minimum.
  2. A track pinched between two pads. One signal squeezed between a regulator pad and a capacitor pad with no room for the bit. I moved the capacitor a little and rerouted the track on a cleaner angle so it kept full clearance on both sides.
  3. Missing courtyard on one component. A footprint had no courtyard, so KiCad could not check it for overlap. I swapped it for the matching Fab library footprint that includes a courtyard, then confirmed it did not collide with its neighbors.
  4. Unrouted and unconnected items. DRC flagged a couple of nets that were not fully routed. I traced each one back in the ratsnest and completed the missing connection.

After these fixes the DRC reported zero errors and zero warnings, which is what gave me confidence to export fabrication files.

Checking Errors
Step 07
3D View of the PCB
Used KiCad's integrated 3D Viewer to inspect the completed board. Verified correct placement and orientation of all components, particularly the ESP32-S module, voltage regulator, and button positions, before generating fabrication files.
3D RenderVisual Inspection
3D PCB Render
KiCad 3D Viewer, full board visualization
Step 08
Circuit Simulation
Simulated a basic LED with current-limiting resistor to validate resistor value selection, then simulated the voltage regulator circuit to confirm output stability at 3.3V under varying load conditions. Both simulations ran correctly in KiCad's SPICE engine.
SPICE SimulationLED CircuitVoltage Regulator
Circuit Simulation
SPICE simulation, voltage regulator output at 3.3V
Step 09
Exporting Fabrication Files
Generated full Gerber files (copper layers, silkscreen, solder mask, board outline) and an Excellon drill file. Verified the export using an online Gerber viewer before archiving. Files are ready for milling or PCB fabrication.
Gerber FilesDrill FileFabrication Ready
arduinocopy
  Files exported:
  ├── board-F_Cu.gbr       (Front copper layer)
  ├── board-B_Cu.gbr       (Back copper layer)
  ├── board-F_SilkS.gbr    (Silkscreen)
  ├── board-Edge_Cuts.gbr  (Board outline)
  └── board-PTH.drl        (Drill file)
        
Takeaways

Conclusion

Through this assignment, I gained hands-on experience in electronics design from the ground up, software installation and library configuration, through schematic creation, PCB layout, simulation, and design rule verification.

Designing a custom ESP32-S board with power regulation, boot control, and multiple communication interfaces deepened my understanding of embedded systems and manufacturable PCB design. Manually routing all traces while respecting clearances built practical intuition for real-world board design constraints.

KiCad EDAESP32-SSchematic CapturePCB RoutingERC / DRCSPICE SimulationGerber Export3D Visualization
Files

My design files

These are the original KiCad files for the board so anyone can open, check or remix it.

A clean render or photo of the finished board layout
A clean render or photo of the finished board layout
← Week 04 · Embedded Programming All Assignments →