You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Added SteadyFrame project documentation
* Changed total cost to new correct number
* Added github link for later usage, forgot to link it at the beginning
* Changed svg file name to lowercase
* Update website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/index.md
Changed intro formatting to properly allign
Co-authored-by: Omer Genan <81963672+genan2003@users.noreply.github.com>
* Properly applied requested changes from terminal, not github comment: wrote \ after introductory section naming
* Update SteadyFrame project information: Added KiCAD schematic, pictures of components and updated weekly log.
* Remove temporary goutputstream file
* Update Alexandru-Florin Neagu project - KaraBox, after catastrophic hardware failure for first project
* Update WEBP file sizes to fit properl parameters
* other changes
* Fixed required issues for full commit
* Fixed file name
* Final changes
* Final changes
* Final changes2
* Final changes 1.0
* Final changes to documentation
* Final changes to documentation
* Final doc fix
---------
Co-authored-by: Omer Genan <81963672+genan2003@users.noreply.github.com>
Copy file name to clipboardExpand all lines: website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/index.md
+39-20Lines changed: 39 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,5 @@
1
1
# KaraBox
2
-
A Bluetooth-enabled karaoke device built around an STM32 brain board and an ESP32 wireless bridge, programmed primarily in Rust.
2
+
A Rust programmed Bluetooth-enabled karaoke device built around an STM32 main board and an ESP32 wireless bridge.
3
3
4
4
:::info
5
5
@@ -13,12 +13,12 @@ A Bluetooth-enabled karaoke device built around an STM32 brain board and an ESP3
13
13
14
14
## Description
15
15
16
-
This project represents a **karaoke device** that lets a user pick a song from their phone, stream it via bluetooth to a small dedicated speaker system, and see synchronized lyrics scroll on both their phone and a tiny on-device display - all while a separate display shows the temperature and a small fun LED matrix goes through different colours.
16
+
This project represents a **karaoke device** that lets a user pick a song from their phone, stream it via bluetooth to a small dedicated speaker system, and see synchronized lyrics scroll on both their phone and a on-device display - all while a separate display shows the temperature and a small fun LED matrix goes through different colours!!
17
17
18
18
The system is split into **two physical boards** that cooperate over Bluetooth and SPI:
19
19
20
20
- The **audio path** is a hardware-only board built around an MH-M38 Bluetooth audio receiver that drives a small amplifier and the speakers. The phone pairs to it directly.
21
-
- The **brain board** runs a Rust firmware on an **STM32U545RE-Q**, drives a small **ST7789V TFT display**, a **MAX7219 8x8 LED matrix** and a **DHT22 temperature/humidity sensor**, and talks to an **ESP32-WROOM-32** over SPI. The ESP32 acts as the Bluetooth Classic bridge that hands lyrics and control commands from the phone to the STM32.
21
+
- The **brain board** runs a Rust firmware on an **STM32U545RE-Q**, drives two small **ST7789V TFT displays**, a **MAX7219 8x8 LED matrix** and a **DHT22/AM2302 temperature/humidity sensor**, and talks to an **ESP32-WROOM-32** over SPI. The ESP32 acts as the Bluetooth Classic bridge that hands lyrics and control commands from the phone to the STM32.
22
22
23
23
## Motivation
24
24
@@ -28,10 +28,11 @@ I chose this project because karaoke is fun and my last project idea sadly died
28
28
29
29
This is the diagram regarding how the project is organized:
30
30
31
+

31
32

32
33

33
34
34
-
These are the current KiCAD diagrams for the project depicting the power distribution and the communication protocols between the STM32 brain board and its peripherals (the ST7789V display over SPI1, the MAX7219 matrix over SPI2, the ESP32 link over SPI3, and the DHT22 sensor on a single GPIO line with an external pull-up).w
35
+
These are the current KiCAD diagrams for the project depicting the power distribution and the communication protocols between the STM32 brain board and its peripherals (the ST7789V display over SPI2 and SPI3, each display, the MAX7219 matrix over SPI2, the ESP32 link over SPI1, and the DHT22 sensor on a single GPIO line.
35
36
36
37

37
38
@@ -63,7 +64,8 @@ Arrival of most components. Realised I need for the CAN bus a twisted pair insul
63
64
64
65
### Week 11: 3 - 9 May
65
66
66
-
Finished designing the driver cages, still working on the rest of the components. Cable arrived. Realised my drivers have small can cables which I need to further connect to perfboards to fulfill CAN Bus conditions. Starting thinking about the KiCAD schematic and the different communication protocols required for pin connections between the board and the peripherals.
67
+
Finished designing the driver cages, still working on the rest of the components. Cable arrived. Realised my drivers have small can cables which I need to further connect to perfboards to fulfill CAN Bus conditions.
68
+
Starting thinking about the KiCAD schematic and the different communication protocols required for pin connections between the board and the peripherals.
67
69
68
70

69
71
@@ -74,25 +76,42 @@ Finished designing the driver cages, still working on the rest of the components
74
76
75
77
### Week 12: 10 - 16 May
76
78
77
-
Finished the KiCAD schematic and submitted to Git branch for review by lab assistants. Worked on setting up motor drivers and motors with USB-C connection and integrated ODrive Python programs developed for MKS XDRive Mini. Still working on 3D design for arms and rails for coupling the 3 axis components.
79
+
Finished the KiCAD schematic and submitted to Git branch for review by lab assistants. Worked on setting up motor drivers and motors with USB-C connection and integrated ODrive Python programs developed for MKS XDRive Mini.
80
+
Still working on 3D design for arms and rails for coupling the 3 axis components.
78
81
79
82
### Week 13: 18 - 23 May
80
83
81
-
Things started going horribly wrong. 2 drivers fried, lots of components purchased and unusable, I ended up changing my project idea from SteadyFrame to KaraBox, the karaoke idea... Very little available working time.
84
+
Things started going horribly wrong. 2 drivers fried, lots of components purchased and unusable, I ended up changing my project idea from SteadyFrame to KaraBox, the karaoke idea... Very little available working time. Lots of stress.
82
85
83
86
### Week 14: 25 - 30 May
84
87
85
-
Components started arriving and I started assembly whenever I didnt have tests (mostly nights...)
88
+
Components started arriving and I started assembly whenever I didnt have tests (mostly nights...). Managed to get everything working, relatively well.
89
+
90
+
Added photos during the building process and a final one with the box and the speakers from after the PM Fair with the cardboard box prototype.
91
+
92
+

93
+
94
+

95
+
96
+

97
+
98
+

99
+
100
+

101
+
102
+

103
+
104
+

105
+
86
106
87
107
## Hardware
88
108
89
-
Hardware used for creating this project (list currently WIP): STM32 NUCLEO-U545RE-Q board, ESP32-WROOM-32 DevKit v1, MH-M38 Bluetooth audio receiver with onboard amplifier, ST7789V 2.8" TFT display, MAX7219 8x8 LED matrix, DHT22 temperature/humidity sensor, a small 4Ω 3W speaker pair, and a USB power bank for portability. Photos of the assembled prototype will be added as the build progresses.
109
+
Hardware used for creating this project: STM32 NUCLEO-U545RE-Q board, ESP32-WROOM-32 DevKit v1, MH-M38 Bluetooth audio receiver with onboard amplifier, ST7789V 2.8" TFT display, ST7789V 1.3" TFT display, MAX7219 8x8 LED matrix, DHT22 temperature/humidity sensor, a 4Ω speaker pair, and the power distribution with the LiPo battery and the DC-DC step down converter setup I had to DIY in the meantime.
90
110
91
111
### Schematics
92
112
93
113
94
114
### Bill of Materials
95
-
#### --- WORK IN PROGRESS, NOT FINISHED ---
96
115
<!-- Fill out this table with all the hardware components that you might need.
97
116
98
117
The format is
@@ -106,17 +125,18 @@ The format is
106
125
| Device | Usage | Price |
107
126
|--------|--------|-------|
108
127
|[STM32 NUCLEO-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html)| The main board - runs the Rust firmware, drives the display and LED matrix, reads the sensor, and commands the ESP32 over SPI |[105 RON](https://eu.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&utm_id=6470900573&utm_source=google&utm_medium=cpc&utm_marketing_tactic=emeacorp&gad_source=1&gad_campaignid=6470900573&gbraid=0AAAAADn_wf2Ze69Mgt017AUQG-reYmnQU&gclid=CjwKCAjw8uTQBhAdEiwAVvtJyoyoNvEEJ0kHJzDJIbrfFLwW7a67yCtoePbJmUCs3eXXRTMiaUHP2BoCqZEQAvD_BwE)|
109
-
|[ESP32-WROOM-32 DevKit v1](https://documentation.espressif.com/esp32-wroom-32_datasheet_en.pdf)| The wireless bridge - exposes a Bluetooth Classic SPP server to the phone, forwards commands and lyrics to the STM32 over SPI3|[35 RON](https://sigmanortec.ro/placa-dezvoltare-esp32-cu-wifi-si-bluetooth)|
128
+
|[ESP32-WROOM-32 DevKit v1](https://documentation.espressif.com/esp32-wroom-32_datasheet_en.pdf)| The wireless bridge - exposes a Bluetooth Classic SPP server to the phone, forwards commands and lyrics to the STM32 over SPI1|[35 RON](https://sigmanortec.ro/placa-dezvoltare-esp32-cu-wifi-si-bluetooth)|
110
129
|[MH-M38 Bluetooth Audio Receiver](https://www.hadex.cz/files/documments/product/m424c-1774055138-kIOe.pdf)| The audio path - pairs with the phone as a standard A2DP sink and drives the speakers through its onboard amplifier; no firmware needed |[25 RON](https://sigmanortec.ro/modul-audio-bluetooth-42-ble-stereo-mh-m38-2x5w)|
111
-
|[ST7789V 2.8" TFT Display (240x320, SPI)](https://newhavendisplay.com/content/datasheets/ST7789V.pdf)| The on-device UI - shows the current song title, artist, lyric line being sung, and the sensor readout |[59 RON](https://www.emag.ro/display-tft-spi-2-8-inch-240x320-lcd-cu-touchscreen-driver-st7789v-arduino-emg359/pd/DP347SYBM/?ref=history-shopping_489679109_221614_1)|
130
+
|[ST7789V 2.8" TFT Display (240x320, SPI)](https://newhavendisplay.com/content/datasheets/ST7789V.pdf)| The main display - shows the current song title, artist, lyric line being sung |[59 RON](https://www.emag.ro/display-tft-spi-2-8-inch-240x320-lcd-cu-touchscreen-driver-st7789v-arduino-emg359/pd/DP347SYBM/?ref=history-shopping_489679109_221614_1)|
131
+
|[Display TFT 1.3 cu ST7789V 240x240 OKY4029)](https://www.scribd.com/document/512133947/ST013-01)| The other display - used for displaying sensor data |[31 RON](https://www.emag.ro/display-tft-1-3-cu-st7789v-240x240-oky4029/pd/DFXT46MBM/)|
112
132
|[MAX7219 8x8 LED Matrix](https://www.analog.com/media/en/technical-documentation/data-sheets/max7219-max7221.pdf)| The accent display - shows a heart icon when Bluetooth is paired, a VU bar while playing, and an idle animation otherwise |[12 RON](https://sigmanortec.ro/modul-matrice-led-8x8-max7219-5v)|
113
-
|[DHT22 AM2302](https://cdn.sparkfun.com/assets/f/7/d/9/c/DHT22.pdf)|Environmental telemetry - shows current ambient conditions on the status bar (it gets surprisingly warm inside a karaoke enclosure)|[40 RON](https://sigmanortec.ro/senzor-temperatura-si-umiditate-dht22-am2302-original-modul)|
114
-
| 2x 4Ω 3W speakers | The audio output, driven directly by the MH-M38's onboard amplifier |[30 RON]()|
133
+
|[DHT22 AM2302](https://cdn.sparkfun.com/assets/f/7/d/9/c/DHT22.pdf)|Shows current ambient conditions on the status bar |[40 RON](https://sigmanortec.ro/senzor-temperatura-si-umiditate-dht22-am2302-original-modul)|
134
+
| 2x 4Ω speakers | The audio output, driven directly by the MH-M38's onboard amplifier |[30 RON]()|
115
135
|[LiPo GENS ACE G-Tech Soaring 4S 14.8 V 2200mA](https://gensace.de/pages/lipo-battery-guide)| The battery - supplies power to all components |[150 RON](https://www.emag.ro/acumulator-lipo-gens-ace-g-tech-soaring-14-8-v-2200-ma-30c-xt60-men-ip-415004/pd/DF4XMTYBM/)|
116
136
|[LM2596S](https://www.ti.com/lit/ds/symlink/lm2596.pdf)| DC-DC Buck Step Down Convertor LM2596S 4.0~40V to 1.25-37V - for supplying correct voltage to STM32 board|[48 RON](https://www.emag.ro/modul-dc-dc-buck-step-down-lm2596s-dc-dc-4-0-40v-la-1-25-37v-regulator-de-tensiune-reglabil-cu-voltmetru-led-stlxy-741050522578/pd/DKNQT83BM/?ref=sponsored_products_search_f_b_1_5&recid=recads_1_b90d01a332c40f582acfccf6bf3bca72edcfc042cd11701d2d49ef94121cef69_1777211422&aid=549a3d7e-f438-11f0-801c-06eaf0d4245d&oid=302862900&scenario_ID=1)|
117
137
| [Gens Ace iMars mini G-Tech](https://gensace.de/products/gens-ace-imars-mini-g-tech-usb-c-2-4s-60w-rc-battery-charger-with-power-supply-adapter-and-adpter-cable-eu) | The battery charger - charges the battery when needed | [245 RON]
|[embedded-hal](https://crates.io/crates/embedded-hal)| Common embedded hardware abstraction traits | Used by the SPI device drivers |
134
154
|[mipidsi](https://crates.io/crates/mipidsi)| MIPI-DCS display driver supporting ST7789 and other displays | Drives both ST7789V displays through SPI and provides display |
135
155
|[embedded-graphics](https://crates.io/crates/embedded-graphics)| 2D drawing library for embedded displays | Used to draw text and clear screen regions on both ST7789V displays |
136
-
|[heapless](https://crates.io/crates/heapless)| Fixed-capacity data structures for `no_std` systems | Used for fixed-size strings when formatting temperature and humidity text for the small display |
137
-
|[defmt](https://crates.io/crates/defmt)| Compact logging framework for embedded devices | Used for logging startup messages, sensor values, display updates, SPI frame errors, and debugging information |
138
-
|[defmt-rtt](https://crates.io/crates/defmt-rtt)| RTT transport backend for `defmt`| Sends `defmt`logs through the ST-Link RTT channel |
156
+
|[heapless](https://crates.io/crates/heapless)| Fixed-capacity data structures for `no_std` systems | Used for formatting temperature and humidity text for the small display |
157
+
|[defmt](https://crates.io/crates/defmt)| Compact logging framework for embedded devices | Used for logging startup messages and debugging information |
158
+
|[defmt-rtt](https://crates.io/crates/defmt-rtt)| RTT transport backend for `defmt`| Sends logs through the ST-Link RTT channel |
139
159
|[panic-probe](https://crates.io/crates/panic-probe)| Panic handler for embedded Rust | Reports panics through the debug probe during development |
140
160
141
161
For the **ESP32 side** of the project, the firmware is written in C++ on top of the Arduino-ESP32 framework, since the BT Classic SPP stack there is the most mature option available. The dependencies for that part are:
@@ -152,7 +172,6 @@ For the **Android app**, the dependencies are:
152
172
| Jetpack Compose | Modern declarative UI toolkit for Android | The entire UI (connection status, song picker, transport controls, lyrics view) |
153
173
| AndroidX Lifecycle | ViewModel and lifecycle-aware components | Holds the playback state and survives configuration changes |
154
174
| Kotlinx Coroutines | Structured concurrency for Kotlin | Drives the BT socket reader loop |
155
-
|`android.bluetooth` (system) | Android's built-in Bluetooth Classic API | Opens the SPP RFCOMM socket to the ESP32 |
0 commit comments