Learning embedded programming
Images, videos and more updates coming soon!
Background
I have always been attracted to embedded development (even though it felt intimidating before) and the whole magic of making physical devices do cool stuff. As with any of my spare time projects, I also like the idea of bridging my knowledge about music production with my skills as a c++ programmer.
A few years back, before I really knew anything about programming and computer science, I messed around a bit with the whole Arduino universe (controllers, IDE and API) and was really excited about its capabilities. I remember clearly thinking that this kind of development was something I really wanted to learn more about once I had learned more about writing code. I also remember reading somewhere that using the Arduino API was the "easy way" and that if you really wanted to do anything for real you would have to know more about the C language, memory, tasks, CPUs and probably learn and reference the official API from the chip manufacturer directly.
That was one of those annoying and frustrating moments for me where I wanted to just snap my fingers and magically have all experience and knowledge needed. While I absolutely don't know everything today, I feel that I'm ready do dive in to the topic again. This time the "hard way".
Distorsion Pedal & ESP32
The end goal of this project is to create a physical distorsion pedal which I can plug my guitar in and that will spit out some kind of sound in the other end. The actual signal processing will be performed on an ESP32-S3 with external ADC and DAC converters on either end.
Current state & Road map
There is a lot of stuff I need to learn in order to make this happen. Not only will I need to learn how to use the ESP-IDF and work with a completely different development environment. I'll also need to learn some basic audio circuit design (and probably fall into all the usual traps), learn more about the hardware differences between a computer and an embedded device and of course learn more about programming for a chip like the ESP32-S3.
At the moment, I have all development gear I need to start interfacing the chip. I have also set up my environment (VS Code with ESP-IDF extension) and been able to build, flash and monitor with the device. Following is a rough plan on how I will proceed:
Pre production
-
Study example code and write simple tests to learn more about the IDF extension in VS Code and the ESP-IDF.
-
Learn how to make use of parallelism and tasks on the device.
-
Integrate the DAC in the circuit and output a simple test tone through it.
-
Integrate the ADC and read audio from it.
-
Create a full audio flow from input jack to output jack (with null-tests in a DAW to find out what the converters actually sound like).
-
Integrate pots and make them control values on the device.
Alpha -
Research distorsion code.
-
Develop my own distorsion algorithm.
-
Lots of testing and iterations.
-
Plan out the pedal design and purchase everything needed.
Beta -
Assemble the product and try it out in the studio!