Tutorial cara kirim MIDI lewat Arduino / ESP8266 (Wemos D1)

Posting ini adalah bagian dari dokumentasi Tugas Akhir, “Perancangan dan Implementasi rtpMIDI dan MIDI 5 pin berbasis Arduino”

Setelah dipertimbangkan berkali kali, dan juga di diskusikan dengan kedua pembimbing, akhirnya diputuskan kalau aku gak pake Arduino Mega. Untungnya, di judul memang tidak menyebutkan “Mega”, hanya Arduino. Dan kebetulan, IDE nya tetap. Well, here it goes …

Kali ini, kita akan bahas cara mengirim MIDI dengan Arduino ataupun Wemos D1. Kebetulan, aku punya Wemos D1 Uno.

Hardware yang digunakan :

  • Arduino atau Wemos
  • MIDI jack (aku pakai male jack bekas)
  • 2 buah resistor 220 ohm
  • Kabel secukupnya (aku pakai kabel Cat5 bekas jaringan, special thanks buat Pak Irvan Puskom PCR :hammers )
  • Solder
  • Instrument MIDI buat ngetes

Menurut tutorial Arduino MIDI, rangkaiannya sebagai berikut


Untuk Wemos, ikuti sama persis. Yang penting, TX dan 5v dikasih resistor, GND langsung disambungkan.

  • PIN 2 ke ground
  • PIN 4 ke TX, lewat resistor 220 ohm
  • PIN 5 ke 5v, lewat resistor 220 ohm

Code sample, sedikit berbeda dengan tutorial Arduino.

/*
  MIDI note player

  This sketch shows how to use the serial transmit pin (pin 1) to send MIDI note data.
  If this circuit is connected to a MIDI synth, it will play the notes
  F#-0 (0x1E) to F#-5 (0x5A) in sequence.

  The circuit:
  - digital in 1 connected to MIDI jack pin 5
  - MIDI jack pin 2 connected to ground
  - MIDI jack pin 4 connected to +5V through 220 ohm resistor
  - Attach a MIDI cable to the jack, then to a MIDI synth, and play music.

  created 13 Jun 2006
  modified 13 Aug 2012
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Midi
*/

void setup() {
  // Set MIDI baud rate:
  Serial.begin(31250);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  for (int note = 0x1E; note < 0x5A; note ++) {
    //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
    noteOn(0x90, note, 0x45);
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
    noteOn(0x90, note, 0x00);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
  }
}

// plays a MIDI note. Doesn't check to see that cmd is greater than 127, or that
// data values are less than 127:
void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

Perbedaannya? Di code diatas, aku tambahkan digitalWrite untuk LED_BUILTIN, jadi setiap kali kirim pesan MIDI, bisa dilihat dari indikator LED.

Hasilnya bisa dilihat di video diatas.

Troubleshooting :

  • Jika keyboard ga ada suara, coba cek setelan MIDI nya. Kadang kadang, disetel ke OFF.
    • Roland Juno G punya setelan MIDI default OFF, dan kebetulan keyboard Yamaha juga bisa di OFF kan.
  • Coba cek siapa tau longgar colokannya?
  • Lanjut, coba tes keyboard ke keyboard dengan kabel MIDI standar. Jika masuk, coba cek Arduino nya. Coba tukar kabel TX sama 5v.
    • Makanya aku pakai kabel Cat 5, bisa sekalian jadi gantinya jumper.
    • Gambar diatas itu pakai port female, tapi video aku justru pake kabel MIDI bekas (male). Sangat besar kemungkinan terbalik, apalagi aku punya orientasi kiri kanan sering terbalik. Berhubung GND di tengah, jarang terbalik. Dibalik juga dia tetap di tengah toh.

Share

Diterbitkan oleh

Rinaldo Jonathan

Admin of this site. Artis papan PCB. #zoneRinaldo #Controllerism Studio Demon, Stage Angel, Sleepy Developer, Smoke free. Kalkud SHS 2012, PCR G15.

Tinggalkan Balasan