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

Modular STM32 electronic-tile system: hardware, firmware, the MicroBus + Field Protocol stack, and a Python daemon.
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.
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.
[ tile ]──[ tile ]──[ tile ]── … ──[ USB tile ]──USB──▶ [ PC / Python daemon ]
└───────────────────────────────────┘
shared SPI bus (MicroBus + Field Protocol)Two protocols stacked on top of each other carry everything:
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.
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 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:
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 fieldIt 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.
The C components and the Python daemon build in one CMake tree, and every test suite runs from a single command:
./build_and_test.shThis 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:
ctest --test-dir build --rerun-failed --output-on-failure| CTest name | What it covers |
|---|---|
microbus_unit | MicroBus transport unit tests (host). |
fieldprotocol_unit | Field Protocol unit tests against a mock MicroBus. |
system_integration | Full C stack (node + master) over the real MicroBus. |
python_unit | Python Field-Protocol encode/decode round trips. |
python_integration | The 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.
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.
Released under the MIT License.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 120R | boards:R_0402_1005Metric | R1, R2, R3, R4 |
| 3 | 4.7uF | boards:C_0402_1005Metric | C2, C8, C9 |
| 2 | Diode1A600mV | boards:D_SOD-323 | D1, D3 |
| 2 | FFC_connector_16p_hinge_lock | boards:FFC_connector_16p_hinge_lock | J1, J3 |
| 2 | M2.5MountingHole | boards:MountingHole_2.7mm_M2.5_ISO7380 | H1, H2 |
| 1 | 0.1uF | boards:C_0402_1005Metric | C1 |
| 1 | 100K | boards:R_0402_1005Metric | R5 |
| 1 | 1K | boards:R_0402_1005Metric | R6 |
| 1 | 74LVC1G06 | boards:SOT-353_SC-70-5 | U9 |
| 1 | Button v0.1 | boards:BoardText | IGNORE1 |
| 1 | ME6211C33M5G-N | boards:SOT-23-5 | U2 |
| 1 | N_MOSFET | boards:SOT-23 | Q1 |
| 1 | STM32G030F6P6 | boards:TSSOP-20_4.4x6.5mm_P0.65mm | U3 |
| 1 | button_6x6x9 | Button_Switch_SMD:SW_SPST_PTS645 | SW1 |
| 1 | swd_4pin | boards:swd_header | J4 |
| 1 | ws2812b_1615 | boards:WS2812B_1615 | D2 |
It measures 25 × 25 mm and has 4 copper layers, 1.6 mm thick.
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.
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.
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).

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

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

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

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

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

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

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

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

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

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

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

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

Polprzewodnikowy/SummerCart64
SummerCart64 - a fully open source N64 flashcart

greatscottgadgets/urti-mainboard
Mainboard of URTI, the Universal Radio Test Instrument



Jana-Marie/philphoc-luma
Zigbee/Hue to WS2812 or similar addressable LED bridge.

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

maribu/business-card
A PCB based business card using open hardware and free software