
OpenJBOD RP2040
OpenJBOD/rp2040
This repository contains the hardware design files OpenJBOD RP2040 Baseboard.

Wireless control and live telemetry for a dual 12 V BLDC motor controller, built on the WeAct STM32WB55 (Cortex-M4 + Bluetooth LE 5.0).
MotorCtrl is an open-source printed circuit board by Vaneiges, from the Vaneiges/MotorCtrl-ble-STM32 repository on GitHub. It is a 2-layer board with 29 parts on 19 nets.
It is built around the AMS1117-3.3 and SS14. Its parts include 9 capacitors, 9 resistors, 4 connectors, 3 switches and 2 ICs. It belongs with the robots and motor control boards and the STM32 boards of this library.
Wireless control and live telemetry for a dual 12 V BLDC motor controller, built on the WeAct STM32WB55 (Cortex-M4 + Bluetooth LE 5.0). Phase 2 adds BLE control plus a Web Bluetooth dashboard — drive the motors and watch live data from a phone or laptop, with no app install. The original push-button control still works in parallel.
🌐 Live dashboard: https://motafared.github.io/MotorCtrl-ble-STM32/ — open in Chrome / Edge on desktop or Android (no install). Needs Bluetooth on; Android also needs Location enabled for BLE scanning.
📄 Full delivery document:
docs/phase2_delivery.md(styled HTML) — scope, BOM, wiring, flashing, GATT reference, dashboard usage, troubleshooting.
Phase2-Project/
├── firmware/ STM32WB55 application (STM32CubeIDE) + BLE GATT services
├── WebApp/ Web Bluetooth dashboard (single-page, no install)
├── kicad/ Hardware design (KiCad, generated from SKiDL)
└── docs/ Delivery doc + connection diagrams| Item | Detail |
|---|---|
| MCU | WeAct STM32WB55 Core Board (STM32WB55CGU6, 64 MHz, BLE 5.0) |
| Motors | 2× BLDC 12 V 4-wire |
| PWM | PA0 (M1) / PA1 (M2) — TIM2, 20 kHz |
| Tachometer | PA8 (M1) / PA9 (M2) — TIM1 input capture |
| PID tick | TIM16 — 100 ms |
| Buttons | PA2 STOP, PA3 START, PA4 CONTINUE — EXTI, active-HIGH, internal pull-down |
| Status LED | PE4 (blue) — ON running, 5 Hz heartbeat |
Advertised name MotorCtrl. All multi-byte values little-endian.
Control service 0x0001
| Char | UUID | Type | Access | Meaning |
|---|---|---|---|---|
| TSM1 | 0x0002 | u16 | R/W | Target speed M1 (RPM) |
| TSM2 | 0x0003 | u16 | R/W | Target speed M2 (RPM) |
| CT | 0x0004 | u16 | R/W | Cycle time (s) |
| CMD | 0x0005 | u8 | W | 0x01 start timed · 0x02 stop · 0x03 start continuous |
Telemetry service 0x0010 (Read / Notify)
| Char | UUID | Type | Meaning |
|---|---|---|---|
| ASM1 / ASM2 | 0x0011 / 0x0012 | u16 | Actual speed M1 / M2 (RPM) |
| RM1 / RM2 | 0x0013 / 0x0014 | u32 | Cumulative rotations M1 / M2 |
| ET | 0x0015 | u16 | Elapsed time (s) |
| STATUS | 0x0016 | u8 | Run state: 0 idle · 1 timed · 2 continuous |
Reads return live values (refreshed from firmware state on each read). STATUS is notified on every transition — BLE command, timed auto-stop, and physical button presses.
This project is STM32CubeIDE only.
stm32wb5x_FUS_fw.bin at
0x080EC000 (skip if FUS ≥ 1.2.0), then stm32wb5x_BLE_Stack_full_fw.bin at 0x080C0000.firmware/ in STM32CubeIDE → Build All → Run to flash the application.Build modes — one switch in firmware/Core/Inc/main.h:
MOTOR_MODE | Tacho PPR | PWM polarity | Use |
|---|---|---|---|
MODE_KHALED | 2 | non-inverted | bench testing |
MODE_TOON | 6 | inverted | client hardware |
Defaults: target 1200 RPM/motor, 35 s cycle, PID Kp = 0.012.
Hosted (no install): open https://motafared.github.io/MotorCtrl-ble-STM32/ in Chrome / Edge.
Or serve it locally:
cd WebApp
python -m http.server 8000 # then open http://localhost:8000 in Chromehttps:// or http://localhost); file:// won't work.Proprietary — all rights reserved. Client project for Toon.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 100nF | Capacitor_SMD:C_0805_2012Metric | C4, C5, C6, C7, C8, C9 |
| 5 | 10k | Resistor_SMD:R_0805_2012Metric | R1, R3, R5, R8, R9 |
| 4 | 1k | Resistor_SMD:R_0805_2012Metric | R2, R4, R6, R7 |
| 2 | 10uF | Capacitor_SMD:CP_Elec_5x5.4 | C2, C3 |
| 1 | 12V_DC_Jack | Connector_BarrelJack:BarrelJack_Horizontal | J1 |
| 1 | 470uF/25V | Capacitor_THT:CP_Radial_D8.0mm_P3.50mm | C1 |
| 1 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U1 |
| 1 | CONTINUE | Button_Switch_THT:SW_PUSH_6mm | SW3 |
| 1 | LED_BLUE | LED_SMD:LED_0805_2012Metric | D2 |
| 1 | Motor_M1 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J3 |
| 1 | Motor_M2 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J4 |
| 1 | SS14 | Diode_SMD:D_SMA | D1 |
| 1 | START | Button_Switch_THT:SW_PUSH_6mm | SW1 |
| 1 | STOP | Button_Switch_THT:SW_PUSH_6mm | SW2 |
| 1 | SWD | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J5 |
| 1 | WeAct_STM32WB55 | Connector_PinHeader_2.54mm:PinHeader_2x12_P2.54mm_Vertical | U2 |

OpenJBOD/rp2040
This repository contains the hardware design files OpenJBOD RP2040 Baseboard.

SRA-VJTI/sra-board-hardware-design
ESP32-based Development Board for Robotics and Embedded Applications


nuclearcat/ESP32ETH
Simple ESP32 with native ethernet using LAN8720 phy, Arduino compatible


AleksaHeler/OpenHand
Our attempt at a prosthetic hand using STM32 microcontroller with custom PCB and mechanics

luftaquila/fsk-energymeter
E-Formula electric energy meter for Formula Student Korea

ajisrawi/dronemagnav
Magnetic-anomaly navigation (MagNav) board + firmware for drones: ESP32-S3, BMI088, LIS3MDL, BMP280, u-blox GNSS, WDMAM map matching, particle filter, MAVLink, phone route planner. Proprietary - all rights reserved.
29 parts, built around the AMS1117-3.3 and SS14. 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 Vaneiges/MotorCtrl-ble-STM32 repository on GitHub, at the commit this page was made from: the board is kicad/MotorCtrl/MotorCtrl.kicad_pcb and its schematic kicad/MotorCtrl/MotorCtrl - Copy.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Vaneiges before reusing the design.