Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Snippets > Communications et protocoles > Le protocole MIDI pour piloter des robots

Le protocole MIDI pour piloter des robots

samedi 7 juillet 2012, par Julien H.

Le MIDI est une appellation très connue dans le domaine de l’informatique musicale qui désigne plusieurs éléments techniques :

 un format de fichier de sons et de musiques (les mélodies 8 bits sous DOS ou Windows 3.1 avec Beethoven ou Mozart, et bien sûr les musiques de jeux vidéos, Super Mario, etc...)

 un port de connexion (en fait, du DIN 5 broches) rond et noir avec des trous métalliques côté femelle

 un protocole d’échange entre instruments numériques

C’est ce dernier qui nous intéresse : plusieurs d’entre nous ont des connaissances en musique, et lorsqu’il s’agit d’échanger des données numériques entre deux dispositifs distants, il leur a été naturel de penser au MIDI.

Et à la réflexion c’est intéressant de savoir générer ou lire des messages dans ce protocole : si l’on est pas sûr de son code, il suffit de brancher un instrument ou un clavier maître MIDI pour "entendre" nos bugs :)

Le protocole

Il existe énormément de documentation concernant le format des messages, les canaux, etc... Nous ne nous y attarderons pas.

L’interface physique

Le MIDI passe au travers d’une interface sérielle à vitesse modérée (31k), donc le port traditionnel DIN peut être connecté à une UART via quelques adaptations d’impédance (résistances).

Mais pour nos premiers tests, nous utiliserons le port USB, tout simplement.

Côté PC

Pour générer des signaux MIDI, on peut utiliser Processing, un environnement de développement en Java fonctionnant sur tout ordinateur, et dont les applications produites peuvent s’exécuter partout : PC, Mac, Androïd, Raspberry Pi !

La bibliothèque utilisée est the midi bus. Le code est très simple et ressemble à la liaison série :


import themidibus.* ;

MidiBus myBus ;

void setup()
size(400,400) ;
background(0) ;

// affiche sur la console la liste de tous les périphériques MIDI disponibles
MidiBus.list() ;

// connecte l’entrée 0 à la sortie 1
myBus = new MidiBus(this, 0, 1) ;

void draw()

// ici on fera appel à myBus pour lire ou écrire sur le bus MIDI.

Côté embarqué

Il existe aussi une bibliothèque pour Arduino : Tutoriel MIDI pour Arduino.

C’est bien, mais nous ne voulons pas modifier la carte pour avoir un port MIDI DIN, mais utiliser la liaison USB série. Une solution simple consiste à utiliser un logiciel qui va convertir côté Linux les messages MIDI reçus sur le port série USB en device MIDI.

C’est là qu’on bénéficie de l’expérience de nos prédécesseurs, comme cet article de EATYone. On y découvre le logiciel de conversion MIDI/USB de Spikenzie Labs.

Et voilà, la suite lors de nos ateliers ou dans les articles dédiés à nos robots, comme Nono.

Vos commentaires

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.