Recherche projet liaison midi sans fil

Tenez voici un petit code (non testé mais qui devrait être fonctionnel) qui va prendre ce que vous tapez dans la console Série ouverte 115200 bauds et l'envoyer de l'autre côté où ce sera imprimé à l'écran. ==> ça va vous permettre de tester le montage

L'envoi se fait octet par octet, c'est loin d'être le plus efficient bien sûr et il y aura un peu de latence ==> dans le vrai code il vaudra mieux capter un message midi entier et l'envoyer d'un seul coup

il faut installer la dernière version de RF24 et s'assurer que vos modules sont correctement alimentés et connectés

EMETTEUR:

// EMETTEUR
#include <SPI.h>
#include <RF24.h> // voir https://nrf24.github.io/RF24/

const byte CEPin = 8;
const byte CSNPin = 7;
RF24 radio(CEPin, CSNPin);

uint8_t adresse[] = {0xCC, 0xCE, 0xCC, 0xCE, 0xCC};

// on déclare ce qui sera dans le message ici juste un octet au fil de l'eau
// dans le vrai code il faudrait transmettre un message midi
struct __attribute__ ((packed)) t_message {
  uint8_t payload;
} message;

void envoyerMessage(t_message &msg)
{
  if (!radio.write( &msg, sizeof(t_message) )) Serial.println(F("erreur d'envoi"));
  else Serial.print((char) message.payload);
}

void setup() {
  Serial.begin(115200);

  if (!radio.begin()) {
    Serial.println(F("radio absente!!"));
    while (true) ; // erreur
  }

  radio.setPALevel(RF24_PA_LOW);
  radio.setPayloadSize(sizeof(t_message));
  radio.openWritingPipe(adresse);
  radio.stopListening();
  Serial.println(F("**** ÉMETTEUR PRET ****"));
}

void loop() {
  int recu = Serial.read();
  if (recu != -1) {
    message.payload = recu;
    envoyerMessage(message);
  }
}

RECEPTEUR:

// RECEPTEUR
#include <SPI.h>
#include <RF24.h> // voir https://nrf24.github.io/RF24/

const byte CEPin = 8;
const byte CSNPin = 7;
RF24 radio(CEPin, CSNPin);

uint8_t adresse[] = {0xCC, 0xCE, 0xCC, 0xCE, 0xCC};

struct __attribute__ ((packed)) t_message {
  uint8_t payload;
} message;

boolean ecouterRadio(t_message & msg)
{
  boolean messageRecu = false;
  if (radio.available()) {
    radio.read( &msg, sizeof(t_message));  // on lit le message
    messageRecu = true;
  }
  return messageRecu;
}

void setup() {
  Serial.begin(115200);

  if (!radio.begin()) {
    Serial.println(F("radio absente!!"));
    while (true) ; // erreur
  }

  radio.setPALevel(RF24_PA_LOW);
  radio.setPayloadSize(sizeof(t_message));
  radio.openReadingPipe(1, adresse);
  radio.startListening();
  Serial.println(F("**** RECEPTEUR PRET ****"));
}

void loop() {
  if (ecouterRadio(message)) Serial.print((char) message.payload);
}

Avant de poursuivre les tests , Pouvez-vous me confirmer si la connection de l'entrée MIDI > opto coupleur > est bien sur la pin 0 ( RX ) de la carte UNO émetteur , et pour la sortie MIDI sur la pin 1 ( TX ) de la carte UNO récepteur ?
j'ai trouvé bizarre de voir la led TX s'allumer sur l'entrée RX de la carte émission
et aussi :
const byte CEPin = 8 et const byte CSNPin = 7 c'est bien pour la NANO ?
et pour le test avec l'UNO > je modifie bien le CEPin en 9 et le CSNPin en 10 ?

R c'est pour Réception
T c'est pour Transfert

  • vous voulez recevoir les données du clavier donc sur l'arduino ça se passe sur la pin Rx (qui est la pin 0 de votre UNO)

  • de l'autre côté vous voulez envoyer depuis l'Arduino quelque chose sur le port série, donc c'est la pin Tx qu'il faut utiliser (la pin 1 sur votre UNO)

c' est bien connectés comme cela sur mon projet , donc je vais poursuivre les tests
préconisés en fonction de mon temps libre

Merci pour vos infos , en vous souhaitant une bonne journée et à bientôt

const byte CEPin = 8 et const byte CSNPin = 7 c'est bien pour la NANO ?
et pour le test avec l'UNO > je modifie bien le CEPin en 9 et le CSNPin en 10 ?

les 2 pin sont librement choisies. mettez ce que vous voulez du moment que ça correspond à votre connexion physique

Tenez voici un petit code (non testé mais qui devrait être fonctionnel) qui va prendre ce que vous tapez dans la console Série ouverte 115200 bauds et l'envoyer de l'autre côté où ce sera imprimé à l'écran. ==> ça va vous permettre de tester le montage

Pour tester le montage coté réception l'arduino UNO est connecté en USB sur un port du PC , et
pour afficher à l'écran j'utilise quelle application avec Windows 10 ou faut il en télécharger une ?

si vous n'avez qu'un seul PC il faut ouvrir 2 "terminaux" séries. l'IDE ne permet d'en avoir qu'un seul sur le port courant donc il faut une autre application.

Sur PC vous pouvez prendre PUTTY ou CoolTerm par exemple (je n'utilise pas windows )

Bonjour J-M-L
Je viens de tester le code sur les consoles série ouverte à 115200 bauds
Pour cela j'utilise 2 PC et ça fonctionne parfaitement sur envoie et
réception de caractères , donc les modules NRF2401 communiquent bien

Il faut lancer 2 instances de l'IDE pour pouvoir ouvrir 2 moniteurs série.
En double-cliquant sur 2 .ino par exemple, ou deux fois le même.

Il faut lancer 2 instances de l’IDE pour pouvoir ouvrir 2 moniteurs série

C'est un risque théorique mais ça crée un risque que deux process accèdent en même temps en écriture au fichier de préférence ou d'index et que ça mette le bazar - je ne crois pas que le code ait prévu cela, c'est pour cela que je propose plutôt d'ouvrir une autre application.

donc à utiliser en connaissance de cause.

Non, les fichiers préférence sont écrits lorsque l'on ferme l'IDE.

OK cool - j'ai pas regardé depuis un moment.

j'avais l'impression que le fichier était ouvert au lancement et close / mis à jour lorsque on quitte l'IDE et que le fichier d'index des bibliothèques est mis à jour en cours de session

ici et sous windows
je conseillerais terminabppl
çà permet d'ouvrir plusieurs instances com , avec des taux de baud "exotiques" (I.e 31250 pour du midi ) et d'envoyer des fichiers .MID pour tester

Je ne comprend pas les explications de hbachetti , puisque d'après mon dernier message
j'utilise bien 2 PC sur 2 ports différents .
le com 5 sur un portable ACER Emetteur et le com 3 sur un HP TouchSmart Récepteur et comme précisé toujours dans mon dernier message , je communique bien entre les 2 terminaux

Bonjour J-M-L
la liaison est fonctionnelle avec le code test . Peut-on poursuivre avec le midi

Dans le croquis de communication midi sans fil , il manque les bibliothèques à inclure

Bonjour Vu le discret rappel à mon intention :smiley: , voilà ce j'avais utilisé pour bridge serie j'ai mis qq commentaires , compile OK , pas retesté IRL

// passerelle serial par nfr24l01
#include 
#include 
#include 


RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002"}; //tuyaux d'adresse
bool mode = 0 ;// mode pour definir qui fait quoi

dans l'émetteur changez la vitesse série à Serial.begin(31250); // MIDI SPEED
dans le récepteur, si votre appareil midi est sur le port série, il faut aussi passer en 31250 bauds dans le setup et il faut modifier la loop pour envoyer l'octet reçu vers votre appareil

void loop() {
  if (ecouterRadio(message)) Serial.write(message.payload);
}

avec cette approche, tout ce qui est reçu en entrée sur le port série à 3250 bauds est répercuté de l'autre côté sur l'autre port série.

Bonne nouvelle , Je viens de modifier et tester la liaison et ça fonctionne à partir d' un clavier midi
Plus de 2 mois de recherches sur le net , il ne faut jamais désespérer , et bien sur grâce à vos informations et à vos compétences dans la programmation Arduino

il serait peut-être intéressant d'insérer le midi sans fil dans le centre des projets >audio sound
qu'en pensez vous , il n'en existe pas d'équivalent à ce jour

Il me reste mon 2ème projet l'Arppegiator à finaliser à cause d'un problème évoqué ,le réglage
*du tempo très rapide que je n'arrive pas à diminuer , l'auteur n'a pas répondu sur ce sujet *
L'arppegiator transmet bien aussi les messages Midi sur la liaison sans fil

Merci pour votre aide et à bientôt en vous souhaitant une bonne journée

Bon hé bien voilà :wink:
Tu devrais poster les 2 codes finalement fonctionnels
çà pourra en aide d'autres dans le futur