Goal of this project is to design a bluetooth speaker that’s shaped and functions as the helmets used by Daft Punk. Initially, the design shall be based on Thomas’ helmet, but design based on Guy’s can come later.
Files
Board Legend.jpg
Labels and descriptions for buttons and header pins on board
Now that most of the software work is in good shape, I'm ready to begin prototyping how the size of physical speaker to look, and how the mounting will work. I printed out DmitriK42's Thomas helmet design at 40% scale to get a feel for the size. This gives me a good starting point, and hopefully it will make planning out the form factor PCBs for the control and LED boards an easier process.
Lots of progress since the last update, the most major being switching from Arduino to ESP-IDF for the dev environment:
Switch from Arduino to ESP-IDF was driven by issues encountered when using the EPS32 A2DP library. Running into problems where the audio streaming stop suddenly and be unrecoverable until the system was reset. Switching to ESP-IDF Let me use the underlying library directly and has also given me more control over the project in general. Since making the switch, audio streaming has been reliable
Updated FFT display to use the entire display area and am now using a logarithmic scale for the FFT display. This results in a better spectrum display.
Display:
Now using SPI hardware to send data to the shift registers that drive the display. SPI clock speed is 16MHz, at this speed it only takes 3us to clock out 1 row of the display data.
Now using hardware timer to generate the interrupts used to start transmission of each row of display data. The higher precision of the hardware timer allows the display to be updated at a consistent 90Hz.
Added option for triple buffering to allow for Vsynced display updates
Added in basic state management (IDLE, STREAMING, and SLEEP). System will show information and animations while in IDLE and do FFT display while in STREAMING state.
Ported over MAX17048 fuel gauge driver and enabled alerts for battery SOC changes and low SOC.
Added in font rendering functionality, which is used to display test string on bootup and current battery SOC while system is in IDLE state.
Created events manager that allows for callback functions to be registered to system events
Volume +/- buttons now increase and decrease volume of audio playback, and send volume value to Bluetooth host so volume setting can be reflected on host too
Low battery SOC (10% or less) will cause status LED to flash red
Bluetooth connection status events: Status LED will pulse blue while awaiting a connection, and get set to white when a connection is established
Used EPS32 A2DP library to setup dev board as a Bluetooth audio sink and generate I2S data to send to audio amp. This library also allows for receiving raw incoming audio data via a callback function, I then performed an FFT on the incoming data and used the results to update the display.
Designed development board to vet out project design while allowing for easy access to key test points (Power rails, I2C, I2S, and UART) and to test different hardware gain settings for the audio amp. This development board includes:
ESP32 Module
The LED matrix and shift register driving circuitry
RGB status LED
micro SD card
I2S audio amp
FTDI chip
Fuel Gauge module
3.3V Buck regulator
Push buttons (Volume, Pairing, Reset)
The development board was fabbed and assembled by JLCPCB, shown below: