genuinequality

Download free music MP3s on genuine quality, the world’s largest online music catalogue, powered by your scrobbles. Free listening, videos, photos, The world’s largest online music catalogue, powered by your scrobbles. Free listening, videos, photos, stats, charts, biographies and concerts. stats, charts, biographies and concerts.

Saturday, June 28, 2025

XIAO ESP32-C3 MIDI Synthesizer – Part 5

So I was somewhat guilty that I'd replaced the XIAO microcontroller in the last couple of parts to get USB MIDI, so in this one I put the original ESP32-C3 back in and now have a version of Part 4 for serial MIDI. https://makertube.net/w/wez7y8Wrxr…
Read on blog or Reader
Site logo image Simple DIY Electronic Music Projects Read on blog or Reader

XIAO ESP32-C3 MIDI Synthesizer – Part 5

By Kevin on June 28, 2025

So I was somewhat guilty that I'd replaced the XIAO microcontroller in the last couple of parts to get USB MIDI, so in this one I put the original ESP32-C3 back in and now have a version of Part 4 for serial MIDI.

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

These are the key tutorials for the main concepts used in this project:

  • Getting Started with the XIAO MIDI Synthesizer
  • XIAO SAMD21, Arduino and MIDI

If you are new to microcontrollers, see the Getting Started pages.

The Circuit

This goes back to adding a 3V3 compatible serial MIDI board using the XIAO GPIO breakout pins as described in Part 1.

This is powered from 3V3 and GND and connected to D6/RX (which may or may not be GPIO 6).

The Code

This is all the same code from Part 4 but with the USB handling removed and the bespoke serial port writing replaced with calls into the Arduino MIDI Library using Serial0 as the MIDI device:

MIDI_CREATE_INSTANCE(HardwareSerial, Serial0, MIDI);

void midiSendProgram (uint8_t prog) {
MIDI.sendProgramChange(prog, MIDI_CHANNEL);
}

void midiSendControl (uint8_t cmd, uint8_t d) {
MIDI.sendControlChange(cmd, d, MIDI_CHANNEL);
}

void setup() {
MIDI.begin(MIDI_CHANNEL);
...
}

void loop() {
MIDI.read();
...
}

Once again I'm relying on the fact that the serial MIDI transport has an automatic MIDI THRU enabled between RX and TX.

Find it on GitHub here.

Closing Thoughts

Whilst the USB MIDI host solution is a lot more convenient in terms of being able to plug in MIDI controllers, the serial MIDI version is a lot easier when it comes to programming and powering the device.

The video shows a PC streaming a MIDI file to the XIAO Synth whilst I'm changing volume and voice.

Kevin

Comment
Like
You can also reply to this email to leave a comment.

Simple DIY Electronic Music Projects © 2025.
Unsubscribe or manage your email subscriptions.

WordPress.com and Jetpack Logos

Get the Jetpack app

Subscribe, bookmark, and get real‑time notifications - all from one app!

Download Jetpack on Google Play Download Jetpack from the App Store
WordPress.com Logo and Wordmark title=

Automattic, Inc.
60 29th St. #343, San Francisco, CA 94110

Posted by BigPalaceNews at 7:29 AM
Email ThisBlogThis!Share to XShare to FacebookShare to Pinterest

No comments:

Post a Comment

Newer Post Older Post Home
Subscribe to: Post Comments (Atom)

Search This Blog

About Me

BigPalaceNews
View my complete profile

Blog Archive

  • September (101)
  • August (116)
  • July (96)
  • June (100)
  • May (105)
  • April (95)
  • March (131)
  • February (111)
  • January (104)
  • December (98)
  • November (87)
  • October (126)
  • September (104)
  • August (97)
  • July (112)
  • June (113)
  • May (132)
  • April (162)
  • March (150)
  • February (342)
  • January (232)
  • December (260)
  • November (149)
  • October (179)
  • September (371)
  • August (379)
  • July (360)
  • June (385)
  • May (391)
  • April (395)
  • March (419)
  • February (356)
  • January (437)
  • December (438)
  • November (400)
  • October (472)
  • September (460)
  • August (461)
  • July (469)
  • June (451)
  • May (464)
  • April (506)
  • March (483)
  • February (420)
  • January (258)
  • December (197)
  • November (145)
  • October (117)
  • September (150)
  • August (132)
  • July (133)
  • June (117)
  • May (190)
  • January (48)
Powered by Blogger.