
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.
Panel 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 125 × 111.3 mm with 273 parts on 359 nets, routed with 3,432 tracks and 625 vias.
It is built around the STM32G030F6P6, STM32F103C8T6 and NRF24L01, with the LTR-381RGB-01, VL53L3CXV0DH/1 and ME6211C33M5G-N among its other parts. 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 |
|---|---|---|---|
| 39 | 4.7uF | boards:C_0402_1005Metric | BTSC2, BTSC8, BTSC9, BUTC2, BUTC8, BUTC9, DIAC2, DIAC8, DIAC9, DISC3, DISC4, DISC5, DISC8, DISC9, JOYC2, JOYC8 +23 |
| 36 | 75R | boards:R_0402_1005Metric | BTSR1, BTSR2, BTSR3, BTSR4, BUTR1, BUTR2, BUTR3, BUTR4, DIAR1, DIAR2, DIAR3, DIAR4, DISR7, DISR8, DISR9, DISR10 +20 |
| 28 | M2.5MountingHole | boards:MountingHole_2.7mm_M2.5_ISO7380 | BTSH1, BTSH2, BTSH3, BTSH4, BUTH1, BUTH2, DIAH1, DIAH2, DIAH3, DIAH4, DISH1, DISH2, JOYH1, JOYH2, JOYH3, JOYH4 +12 |
| 22 | FFC_connector_16p_hinge_lock | boards:FFC_connector_16p_hinge_lock | BTSJ3, BTSJ5, BUTJ1, BUTJ3, DIAJ1, DIAJ2, DISJ3, DISJ5, JOYJ2, JOYJ5, LEDJ5, LEDJ7, LIGJ3, LIGJ5, POWJ5, POWJ6 +6 |
| 14 | 10K | boards:R_0402_1005Metric | BTSR5, BTSR6, BTSR7, BTSR8, BTSR9, BUTR5, DIAR5, DISR5, DISR6, JOYR6, LIGR5, LIGR6, TMPR5, TMPR6 |
| 11 | 01x06_2.54mm_Female | boards:01x06_2.54mm_Female | BTSJ2, BUTJ5, DIAJ5, DISJ2, JOYJ3, LEDJ3, LIGJ2, POWJ3, TMPJ2, USBJ3, WIRJ2 |
| 11 | 01x06_2.54mm_Male | boards:01x06_2.54mm_Male | BTSJ1, BUTJ2, DIAJ3, DISJ1, JOYJ1, LEDJ1, LIGJ1, POWJ1, TMPJ1, USBJ1, WIRJ1 |
| 11 | ME6211C33M5G-N | boards:SOT-23-5 | BTSU2, BUTU2, DIAU2, DISU2, JOYU2, LEDU2, LIGU2, TMPU2, USBU2, WIRU1, WIRU2 |
| 10 | 0.1uF | boards:C_0402_1005Metric | BTSC1, BUTC1, DIAC1, DISC11, JOYC1, LEDC1, LIGC1, TMPC1, USBC4, WIRC1 |
| 10 | swd_4pin | boards:swd_header | BTSJ4, BUTJ4, DIAJ4, DISJ4, JOYJ4, LEDJ4, LIGJ4, TMPJ4, USBJ4, WIRJ4 |
| 8 | STM32G030F6P6 | boards:TSSOP-20_4.4x6.5mm_P0.65mm | BTSU3, BUTU3, DIAU3, JOYU3, LEDU3, LIGU3, TMPU3, WIRU3 |
| 6 | 12pF | boards:C_0402_1005Metric | DISC6, DISC7, USBC6, USBC7, WIRC5, WIRC6 |
| 5 | button_6x6x7 | boards:SW_SPST_PTS645 | BTSSW1, BTSSW2, BTSSW3, BTSSW4, BTSSW6 |
| 4 | 120R | boards:R_0402_1005Metric | WIRR1, WIRR2, WIRR3, WIRR4 |
| 4 | 5.1K | boards:R_0402_1005Metric | POWR1, POWR2, USBR1, USBR2 |
| 3 | 1K | boards:R_0402_1005Metric | BUTR6, LEDR5, LEDR7 |
| 3 | 1N4148W | Diode_SMD:D_SOD-123 | BTSD2, BUTD3, DIAD2 |
| 3 | Crystal_16M_small | boards:Crystal_SMD_2016-4Pin_2.0x1.6mm | DISY1, USBY2, WIRY2 |
| 2 | N_MOSFET | boards:SOT-23 | BUTQ1, LEDQ3 |
| 2 | STM32F103C8T6 | Package_QFP:LQFP-48_7x7mm_P0.5mm | DISU3, USBU1 |
| 2 | USBLC6-4SC6 | boards:SOT-23-6 | POWIC1, USBIC1 |
| 2 | USB_C_connector_16P | boards:USB_C_Receptacle_16P | POWJ2, USBJ2 |
| 1 | 1.5K | boards:R_0402_1005Metric | USBR12 |
| 1 | 1.5pF | boards:C_0402_1005Metric | WIRC10 |
| 1 | 1pF | boards:C_0402_1005Metric | WIRC7 |
| 1 | 2.2nF | boards:C_0402_1005Metric | WIRC4 |
| 1 | 2.7nH | boards:C_0402_1005Metric | WIRL4 |
| 1 | 22K | boards:R_0402_1005Metric | WIRR6 |
| 1 | 22uF_10V | boards:C_0603_1608Metric | WIRC13 |
| 1 | 3.9nH | boards:C_0402_1005Metric | WIRL3 |
| 1 | 33nF | boards:C_0402_1005Metric | WIRC3 |
| 1 | 4.7pF | boards:C_0402_1005Metric | WIRC14 |
| 1 | 47uF_16V | boards:C_1210_3225Metric | LEDC4 |
| 1 | 5V | boards:BoardText | LEDIGNORE4 |
| 1 | 8.2nH | boards:C_0402_1005Metric | WIRL1 |
| 1 | Antenna_MIFA_Cypress | boards:Antenna_cypress_MIFA | WIRAE1 |
| 1 | Button v0.5 | boards:BoardText | BUTIGNORE1 |
| 1 | Buttons v0.5 | boards:BoardText | BTSIGNORE1 |
| 1 | DATA | boards:BoardText | LEDIGNORE3 |
| 1 | Dial v0.5 | boards:BoardText | DIAIGNORE1 |
| 1 | Distance v0.5 | boards:BoardText | DISIGNORE1 |
| 1 | GND | boards:BoardText | LEDIGNORE2 |
| 1 | HDC1080 | Package_SON:Texas_PWSON-N6 | TMPU1 |
| 1 | Joystick | boards:Joystick | JOYU1 |
| 1 | Joystick v0.5 | boards:BoardText | JOYIGNORE1 |
| 1 | LED v0.5 | boards:BoardText | LEDIGNORE1 |
| 1 | LTR-381RGB | boards:LTR-381RGB | LIGU1 |
| 1 | LightSound v0.5 | boards:BoardText | LIGIGNORE1 |
| 1 | NRF24L01 | boards:QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm | WIRU4 |
| 1 | RotaryEncoder_Switch | boards:RotaryEncoderEC12D | DIASW7 |
| 1 | Temp v0.5 | boards:BoardText | TMPIGNORE1 |
| 1 | TerminalBlock_3P_3.8_black | boards:TerminalBlock_03_P3.81mm_Horizontal | LEDJ2 |
| 1 | USB v0.5 | boards:BoardText | USBIGNORE1 |
| 1 | USBPower v0.5 | boards:BoardText | POWIGNORE1 |
| 1 | VL53L3CXV0DH | boards:VL53L3CXV0DH | DISU1 |
| 1 | WMM7027ATSN1-4/TR | Package_LGA:LGA-4 | LIGU4 |
| 1 | Wireless v0.5 | boards:BoardText | WIRIGNORE1 |
| 1 | button_6x6x7 | Button_Switch_SMD:SW_SPST_PTS645 | BUTSW2 |
| 1 | ws2812b_1615 | boards:WS2812B_1615 | BUTD2 |

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.


nlbutts/can_distance_sensor
This is a small CAN based Time-of-Flight (TOF) sensor. It determines the distance to an object and sends the resulting message on the CAN bus.



internax/ukol_divelit
Původní záměr byl použít ZIF socket, ten se však pro pDIP8 pouzdro prakticky nevyrábí. Zvolil jsem proto přesnou patici z doporučených komponent. Klíčovými kritérii byl nízký odpor kontaktů a zlaté pokovení pinů.

Yorha-7/Rocket
in this repo we are simulating rocket basic physics and make a onboard flight computer which utilizes MCU, gyro, pressure sensor, fin servo controls, to get realtime target tracking abilities to a solid fuel rocket.


uinika/UINIO-MCU-STM32F103C8T6
an Evaluation Board base on STM32F103C8T6 microcontroller.
It measures 125 × 111.3 mm and has 4 copper layers, 1.6 mm thick.
273 parts, built around the STM32G030F6P6, STM32F103C8T6, NRF24L01 and LTR-381RGB-01. 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/Scripts/Panel.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).