Skip to the content
PCBKitNew board
4 layers25 × 25 mmButton, the printed circuit board in 3D

Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

Size
25 × 25 mm
Copper layers
4
Thickness
1.6 mm
Parts
24
Nets
30
Pads
107
Tracks, vias
214, 41
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
21 Jun 2026
Updated
21 Jun 2026

Overview

Button is an open-source printed circuit board by sean618, from the sean618/MakerTiles repository on GitHub, published under the MIT licence. It is a 4-layer board of 25 × 25 mm with 24 parts on 30 nets, routed with 214 tracks and 41 vias.

It is built around the STM32G030F6P6, 74LVC1G06Z and ME6211C33M5G-N. Its parts include 6 resistors, 4 capacitors, 3 ICs, 3 diodes and 3 connectors. It belongs with the STM32 boards of this library.

Main components

3

README

README.md

MakerTiles

MakerTiles is a system of modular, snap-together electronic tiles. Each tile is a small STM32-based board with a single job — a strip of LEDs, a joystick, a motor, a distance sensor, a screen, a speaker, and so on. Tiles connect on a shared bus, a USB tile bridges the bus to a PC, and a Python daemon on the PC discovers every connected tile and lets you read its inputs and drive its outputs.

This repository holds the whole stack: the hardware (KiCad board designs), the firmware (STM32 board projects + shared driver libraries), the protocols that move data over the bus, and the daemon that talks to it all from a PC.

text
    [ tile ]──[ tile ]──[ tile ]── … ──[ USB tile ]──USB──▶ [ PC / Python daemon ]
       └───────────────────────────────────┘
          shared SPI bus  (MicroBus + Field Protocol)

How it fits together

Two protocols stacked on top of each other carry everything:

  • MicroBus — the transport. A master/multi-node protocol over a shared SPI-style link between microcontrollers, built for speed and very low RAM: fixed-size packets, a time-slotted schedule the master broadcasts in every packet, and a small per-node sliding window that gives reliable, in-order delivery with no dynamic allocation.
  • Field Protocol — the application layer. Rides inside a MicroBus packet and describes each tile as a set of named, typed fields (e.g. a LED strip's colour, a dial's position). The daemon enumerates tiles, reads their field tables, and gets/sets field values without knowing the tile type in advance.

One tile acts as the master (the USB tile, which also bridges the bus to a host PC). Every other tile is a node. On the PC, the daemon opens the USB serial port, discovers the attached tiles, and exposes each one as an object you can interact with.

Repository layout

text
hardware/        KiCad designs for every tile (Boards/) + shared symbol/footprint
                 libraries, 3D models and BOMs (Libraries/). Old/ holds retired
                 prototype boards.

firmware/        STM32 firmware.
  Boards/          One STM32CubeIDE project per tile (Button, LedStrip, Motor,
                   Joystick, Screen, USB, …). Mostly STM32G030 nodes; the USB
                   master is an STM32F103.
  Libraries/       Shared C/C++ drivers used across boards (ledStrip, screen,
                   imu, speaker, servos, …) plus helpers (myAssert, fonts).
  Documents/       NewBoardSetup.txt — the checklist for bringing up a new tile
                   (CubeMX peripheral config + firmware wiring).

protocol/        The shared protocol code, host-buildable and testable.
  microbus/        MicroBus transport (C++). Leaf component.
  fieldprotocol/   Field Protocol (C++), depends on microbus. Also built as the
                   masterNodeSystem shared library the Python daemon loads.
  stm32/           STM32 glue binding the protocols to real SPI hardware
                   (stm32F1SpiMaster, stm32Node). Boards reach this via a
                   Core/stm32 symlink.

daemon/          Python daemon (the PC side). Opens the USB serial port, runs
                   board discovery, and drives tiles over the Field Protocol.
                   src/makertiles/ is the package; tests/ holds its test suites.

The PC daemon

The daemon is a Python package (makertiles, src-layout under daemon/). At a high level you point it at a serial port and it hands you back the discovered tiles:

python
import makertiles

tiles, manager = makertiles.start(port_name="/dev/ttyUSB0")

tiles.led_strip.colour = makertiles.red   # set an output field
position = tiles.dial.position             # read an input field

It can drive the C protocol two ways: over serial to real hardware in production, or — in tests — by loading the masterNodeSystem shared library directly via ctypes, so the real Python daemon exercises the real C protocol without any hardware attached. That same library is what catches drift between the C and Python sides of the wire contract.

Optional extras: Pillow (images) for the screen image-drawing helpers.

Building and testing

The C components and the Python daemon build in one CMake tree, and every test suite runs from a single command:

bash
./build_and_test.sh

This configures, builds (MicroBus, the Field Protocol + its shared library, and the system test), then runs ctest. Python test deps (pytest, pyserial) are installed automatically if missing.

To re-run only the failures, verbosely:

bash
ctest --test-dir build --rerun-failed --output-on-failure

Test suites

CTest nameWhat it covers
microbus_unitMicroBus transport unit tests (host).
fieldprotocol_unitField Protocol unit tests against a mock MicroBus.
system_integrationFull C stack (node + master) over the real MicroBus.
python_unitPython Field-Protocol encode/decode round trips.
python_integrationThe real Python daemon driving the C protocol via the .so.

python_integration is the suite that exercises both languages together, so it is the one that catches C↔Python wire-contract drift.

The firmware board projects under firmware/Boards/ are separate STM32CubeIDE/CMake projects and are not part of the host build above — they are flashed to real tiles. See firmware/Documents/NewBoardSetup.txt for the per-board hardware and firmware bring-up checklist.

Building firmware for a tile

Each firmware/Boards/<Tile>/ directory is its own STM32 project (.ioc for CubeMX, a linker script for the target part, and CubeIDE debug launch configs). Nodes are generally STM32G030; the USB master is an STM32F103. The protocol sources are shared into each board via symlinks (Core/stm32, Core/Libraries, etc.) rather than copied — see the setup checklist for the exact links and the required SPI/timer/interrupt peripheral configuration.

License

Released under the MIT License.

Parts

24
QtyValueFootprintReferences
4120Rboards:R_0402_1005MetricR1, R2, R3, R4
34.7uFboards:C_0402_1005MetricC2, C8, C9
2Diode1A600mVboards:D_SOD-323D1, D3
2FFC_connector_16p_hinge_lockboards:FFC_connector_16p_hinge_lockJ1, J3
2M2.5MountingHoleboards:MountingHole_2.7mm_M2.5_ISO7380H1, H2
10.1uFboards:C_0402_1005MetricC1
1100Kboards:R_0402_1005MetricR5
11Kboards:R_0402_1005MetricR6
174LVC1G06boards:SOT-353_SC-70-5U9
1Button v0.1boards:BoardTextIGNORE1
1ME6211C33M5G-Nboards:SOT-23-5U2
1N_MOSFETboards:SOT-23Q1
1STM32G030F6P6boards:TSSOP-20_4.4x6.5mm_P0.65mmU3
1button_6x6x9Button_Switch_SMD:SW_SPST_PTS645SW1
1swd_4pinboards:swd_headerJ4
1ws2812b_1615boards:WS2812B_1615D2

Questions

How big is the Button PCB?

It measures 25 × 25 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Button use?

24 parts, built around the STM32G030F6P6, 74LVC1G06Z and ME6211C33M5G-N. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Button KiCad files?

From the sean618/MakerTiles repository on GitHub, at the commit this page was made from: the board is hardware/Boards/Extra/Button/v0.1/Button.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Button design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from sean618/MakerTiles

12
  • 2 layers188.5 × 167.3 mmPanel2, the printed circuit board in 3D

    Panel2

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    585 partsMIT
  • 4 layers125 × 111.3 mmPanel, the printed circuit board in 3D

    Panel

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    273 partsMIT
  • 2 layers104.5 × 184.9 mmPanel4, the printed circuit board in 3D

    Panel4

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    191 partsMIT
  • 4 layers75 × 25 mmLedMatrix, the printed circuit board in 3D

    LedMatrix

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    103 partsMIT
  • 4 layers55 × 55 mmLedMatrix, the printed circuit board in 3D

    LedMatrix

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    95 partsMIT
  • 4 layers56 × 54 mmLedMatrix, the printed circuit board in 3D

    LedMatrix

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    80 partsMIT
  • 4 layers56 × 54 mmLedMatrix, the printed circuit board in 3D

    LedMatrix

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    80 partsMIT
  • 2 layers56 × 25 mmBattery, the printed circuit board in 3D

    Battery

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    63 partsMIT
  • 2 layers28 × 52 mmMotor, the printed circuit board in 3D

    Motor

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    56 partsMIT
  • 2 layers56 × 25 mmServo, the printed circuit board in 3D

    Servo

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    47 partsMIT
  • 2 layers56.5 × 25 mmSpeaker, the printed circuit board in 3D

    Speaker

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    44 partsMIT
  • 2 layers56 × 25 mmMotor, the printed circuit board in 3D

    Motor

    sean618/MakerTiles

    Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.

    40 partsMIT

Similar boards

  • 2 layers101.8 × 57.8 mmSc64v2, the printed circuit board in 3D

    Sc64v2

    Polprzewodnikowy/SummerCart64

    SummerCart64 - a fully open source N64 flashcart

    96 parts1.2kGPL-3.0
  • 6 layers64 × 90 mmUrti mainboard, the printed circuit board in 3D

    Urti mainboard

    greatscottgadgets/urti-mainboard

    Mainboard of URTI, the Universal Radio Test Instrument

    468 parts29CERN-OHL-P-2.0
  • 4 layers64.5 × 60 mmOrangeCart, the printed circuit board in 3D

    OrangeCart

    zeldin/OrangeCart

    The Orange Cartridge, an FPGA cartridge for the C64/C128

    140 parts22
  • 4 layers150 × 50 mmQI Charger, the printed circuit board in 3D

    QI Charger

    drewsum/QI_Charger

    A DIY QI Wireless Phone Charger

    322 parts20
  • 2 layers62.5 × 47 mmPhilphoc luma, the printed circuit board in 3D

    Philphoc luma

    Jana-Marie/philphoc-luma

    Zigbee/Hue to WS2812 or similar addressable LED bridge.

    45 parts19
  • 2 layers101.8 × 57.8 mmSc64v2.1, the printed circuit board in 3D

    Sc64v2.1

    Epicjoy/SC64

    This project's hardware and casing are modified based on the SummerCart64 project.

    97 parts15
  • 2 layers88.9 × 50.8 mmBusiness card, the printed circuit board in 3D

    Business card

    maribu/business-card

    A PCB based business card using open hardware and free software

    131 parts13
  • 2 layers16 × 47 mmMini tracker, the printed circuit board in 3D

    Mini tracker

    PTR-projects/PTR_tracker_hardware

    75 parts10