Arduino et E01-2G4M27D

Bonjour à tous,
Je cherche un membre qui utilise ou a utilisé ce type de module RF
Merci @+

Si tu pensais a mettre un lien cliquable vers le ”module” tu aurais probablement plus de réponses.

c'est un module basé sur la nRF24L01P.

j'ai deux exemple de code pour NRF24L01

regardez si ça fonctionne ?

Bonjour,
Merci de me répondre. Je tente de mettre au point une transmission d'une radiocommande 6 voies avec deux modules E01-2G4M27Det deux arduino nano. J'utilise son signal PPM et je décode tout ça dans le récepteur. Jusque là tout va bien. Le fonctionnement est parfait...
Le seul bémol c'est que je n'arrive pas à régler la puissance de sortie du module émetteur en utilisant la commande : radio.setPALevel(RF24_PA_xxx); que se soit MIN, LOW,HIGH ou MAX rien ne change en terme de consommation de courant. Les mesures sont prises quand il y a émission de données et ne dépassent pas 20mA au multimètre.
J'ai installé la dernière version de RF24. Idem...
Je ne comprends pas . Auriez-vous une idée...

Voilà mon code tiré de l 'IA. La partie emission fonctionne mais pasle réglage.

#include <SPI.h>
#include <RF24.h>

// Adresse de communication RF
const uint64_t pipeOut = 0xE9E8F0F0E1LL;  // Adresse du récepteur
RF24 radio(9, 10);                        // CE sur D9 et CSN sur D10

// Structure pour stocker les données des canaux
struct Signal {
  byte throttle;
  byte pitch;
  byte roll;
  byte yaw;
  byte aux1;
  byte aux2;
};

Signal data;  // Variable pour stocker les données mappées

// Variables pour le décodage PPM
volatile unsigned long lastInterruptTime = 0;
volatile int ppmIndex = 0;
volatile unsigned long ppm[6];  // Tableau pour stocker les durées des canaux

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

  // Initialisation de la radio
  radio.begin();
  radio.openWritingPipe(pipeOut);
  //radio.setPALevel(RF24_PA_MIN);
  radio.setDataRate(RF24_250KBPS);
  radio.setChannel(110);
  radio.setAutoAck(false);
  radio.stopListening();

  Serial.println("Module E01-2G4M27D prêt à transmettre.");
  Serial.println("Entrez le niveau de puissance (0: MIN, 1: LOW, 2: HIGH, 3: MAX) :");

  // Configuration des broches et de l'interruption
  pinMode(2, INPUT);
  pinMode(6, OUTPUT);  // Pour visualiser sur la broche D6

  // Attacher une interruption pour le front montant du signal PPM
  attachInterrupt(digitalPinToInterrupt(2), ppmInterrupt, RISING);
}

// Fonction appelée à chaque front montant du signal PPM
void ppmInterrupt() {
  unsigned long currentTime = micros();  // Temps actuel en microsecondes
  unsigned long duration = currentTime - lastInterruptTime;
  lastInterruptTime = currentTime;

  // Détection de la pause longue pour réinitialiser l'index
  if (duration > 3000) {
    ppmIndex = 0;
  } else if (ppmIndex < 6) {
    ppm[ppmIndex] = duration;  // Stocker la durée pour chaque canal
    ppmIndex++;
  }
}

// Mapper les valeurs PPM pour qu'elles correspondent à des valeurs entre 0 et 255
int mapPPMValues(unsigned long val, int lower, int upper, bool reverse) {
  val = constrain(val, lower, upper);    // Limiter les valeurs entre lower et upper
  val = map(val, lower, upper, 0, 255);  // Mapper les valeurs sur une plage 0-255
  return (reverse ? 255 - val : val);    // Inverser la valeur si nécessaire
}

void loop() {
  // Vérifiez si des données sont disponibles sur le port série
  if (Serial.available()) {
    int powerLevel = Serial.parseInt();  // Lire un nombre entier
    setTransmitPower(powerLevel);        // Régler la puissance d'émission
  }

  // Vérifier que toutes les impulsions ont été reçues avant d'afficher ou d'envoyer
  if (ppmIndex == 6) {
    // Mapper les valeurs PPM et les assigner à la structure Signal
    data.throttle = mapPPMValues(ppm[0], 1000, 2000, true);  // Canal 1
    data.roll = mapPPMValues(ppm[1], 1000, 2000, false);     // Canal 2
    data.pitch = mapPPMValues(ppm[2], 1000, 2000, false);    // Canal 3
    data.yaw = mapPPMValues(ppm[3], 1000, 2000, true);       // Canal 4
    data.aux1 = mapPPMValues(ppm[4], 1000, 2000, false);     // Canal 5
    data.aux2 = mapPPMValues(ppm[5], 1000, 2000, false);     // Canal 6

    // Envoyer les données via la radio
    radio.write(&data, sizeof(Signal));

    // Remettre à zéro l'index pour recommencer la capture
    ppmIndex = 0;
  }
}

// Fonction pour régler la puissance d'émission
void setTransmitPower(int level) {
  switch (level) {
    case 0:
      radio.powerDown();
      delay(10);
      radio.powerUp();
      radio.setPALevel(RF24_PA_MIN);
      Serial.println("Puissance d'émission réglée à : MIN");
      break;
    case 1:
      radio.powerDown();
      delay(10);
      radio.powerUp();
      radio.setPALevel(RF24_PA_LOW);
      Serial.println("Puissance d'émission réglée à : LOW");
      break;
    case 2:
      radio.powerDown();
      delay(10);
      radio.powerUp();
      radio.setPALevel(RF24_PA_HIGH);
      Serial.println("Puissance d'émission réglée à : HIGH");
      break;
    case 3:
      radio.powerDown();
      delay(10);
      radio.powerUp();
      radio.setPALevel(RF24_PA_MAX);
      Serial.println("Puissance d'émission réglée à : MAX");
      break;
    default:
      Serial.println("Niveau de puissance invalide. Choisissez entre 0 et 3.");
      break;
  }
}

Bonjour,
Comment fais-je ça ? Je ne suis pas trop habitué à ce forum.

lisez les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Normalement j'utilse les balises de code. Mais elles sont où ?

Ok, c'est bon ...

Non... Merci d'éditer votre post 4 en utilisant le :pencil2: dans la barre d'outil juste sous votre post et rajoutez les balises de de code

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône <code/> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

J'ai corrigé le post 4. Est-ce bon ?

1 Like

Nickel - oui !


Il se peut que le nRF24L01P ne se configure pas comme les nRF24L01 (sans le P) et que la commande de paramètre de la bibliothèque ne soit pas effective. Il faudrait trouver la doc détaillée

voilà ce que ça envoie

C’est tout simple.
Tu copies (control C) l’adresse du site et tu colle (control V) dans un message sur le forum.
Le meme principe fonctionne avec les photos ( copier l’adresse de la photo)

Doc de ce module de la société EBYTE avec un nRF24L01P

https://www.fr-ebyte.com/pdf-down.aspx?id=1712

EBYTE produit des modules radio variés en utilsant des puces radio des grands constructeurs (Texas Instruments, Nordic, Semtech,Espressif....)
EBYTE documente tous ses modules

Site local : https://www.fr-ebyte.com/

dans la doc ils disent

RF24.pa_level
This int attribute specifies the nRF24L01’s power amplifier level (in dBm). Higher levels mean the transmis- sion will cover a longer distance. Use this attribute to tweak the nRF24L01 current consumption on projects that don’t span large areas.
A valid input value is:
• -18 sets the nRF24L01’s power amplifier to -18 dBm (lowest) • -12 sets the nRF24L01’s power amplifier to -12 dBm
• -6 sets the nRF24L01’s power amplifier to -6 dBm
• 0 sets the nRF24L01’s power amplifier to 0 dBm (highest)
If this attribute is set to a list or tuple, then the list/tuple must contain the desired power amplifier level (from list above) at index 0 and a bool to control the Low Noise Amplifier (LNA) feature at index 1. All other indices will be discarded.
Note: The LNA feature setting only applies to the nRF24L01 (non-plusvariant).

Il semble donc que la fonctionnalité d'amplificateur de faible bruit (LNA) mentionnée s'applique uniquement à la version non plus du nRF24L01, donc elle n'est pas pertinente pour le nRF24L01+ ou nRF24L01P.

Ok. Donc quelle serait la solution à mon soucis ?

Si vous voulez régler la puissance, il faut prendre une nRF24L01 "tout court" on dirait. (je ne suis pas expert sur ces modules)

Je viens de constater un phénomème bizarre. Lorsque je met

radio.setPALevel(RF24_PA_MIN);

les servos répondent nickel mais si met LOW ou HIGH ou MAX il y a des interuptions de l'ordre de 3~4 secondes dans les mouvements.

Donc à priori il y bien quelque chose qui se passe, mais quoi ? :thinking:

askakit.cz/user/related_files/e01-2g4m27d_usermanual_en_v1_1.pdf

Comme je l’ai dit plus haut il semble que le registre de contrôle n’est pas configurable sur votre plate-forme. Si vous ne faites rien du tout - est-ce que ça marche ?

Bonjour,
Effectivement les puces utilisées doivent être différentes. Je viens d'envoyer un email à EBYTE et leur demande un datacheet détaillé (registres etc...) de leur puce nRF24L01P.
Je croise les doigts...
A+