I tested all the voltages (5, 3.3 and 1.8) and they are where they should be. There are two crystals on my PCB, to change to the smaller one eventually. But I only put one crystal on (which only one should be put on).


Eagle board file
For the next version, I'll put in a ground plane. Here is what it was created from:

https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/MIDI Music Shield-v13.pdf
Paired minimal program that chimes a bell every three seconds:
This program does not output any audio on the PCB I designed. But it does output a bell sound when the ESP32 is connected to the shield:

Any ideas on how to troubleshoot or anything seemingly wrong with the circuit I created?


Eagle board file
For the next version, I'll put in a ground plane. Here is what it was created from:

https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/MIDI Music Shield-v13.pdf
Paired minimal program that chimes a bell every three seconds:
C++:
#define RXD2 16 // was 2, not needed
#define TXD2 23 // was 3 MIDI-In
#define resetMIDI 22 //Reset line
byte note = 0; //The MIDI note value to be played
int instrument = 0;
void setup()
{
Serial.begin(115200);
//Setup soft serial for MIDI control
Serial2.begin(31250, SERIAL_8N1, RXD2, TXD2);
//Reset
pinMode(resetMIDI, OUTPUT);
digitalWrite(resetMIDI, LOW);
delay(100);
digitalWrite(resetMIDI, HIGH);
delay(100);
talkMIDI(0xB0, 0x07, 120); //0xB0 is channel message, set channel volume to near max (127)
}
void loop()
{
talkMIDI(0xB0, 0, 0x00); //Default bank GM1
talkMIDI(0xC0, 98, 0); //Set instrument number. 0xC0 is a 1 data byte command
//Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
noteOn(0, 98, 60);
delay(50);
//Turn off the note with a given off/release velocity
noteOff(0, 98, 15000);
delay(3000);
}
//Send a MIDI note-on message. Like pressing a piano key
//channel ranges from 0-15
void noteOn(byte channel, byte note, byte attack_velocity) {
talkMIDI( (0x90 | channel), note, attack_velocity);
}
//Send a MIDI note-off message. Like releasing a piano key
void noteOff(byte channel, byte note, byte release_velocity) {
talkMIDI( (0x80 | channel), note, release_velocity);
}
//Plays a MIDI note. Doesn't check to see that cmd is greater than 127, or that data values are less than 127
void talkMIDI(byte cmd, byte data1, byte data2) {
Serial2.write(cmd);
Serial2.write(data1);
//Some commands only have one data byte. All cmds less than 0xBn have 2 data bytes
//(sort of: http://253.ccarh.org/handout/midiprotocol/)
if( (cmd & 0xF0) <= 0xB0)
Serial2.write(data2);
}

Any ideas on how to troubleshoot or anything seemingly wrong with the circuit I created?
Last edited: