nRF24L01 et B+ [tuto en fin de topic]

Un lieu pour discuter des composants et de leur utilisation. Un passage obligé si vous devez interfacer votre Raspberry Pi avec le monde extérieur. On y trouvera aussi les cartes type commande de moteur pas à pas, continu, servo...

Modérateurs : Francois, smba38

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par guillaume9344 » mer. 22 avr. 2015 07:26

Ca y est , pour moi , l echange de données dans les deux sens semble fonctionner.
j envoi une commande a un micro est celuici repond a la rpi.
prochaine etape, j essai de communiquer avec RF24 sur la rpi.
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

lawfix
Messages : 66
Enregistré le : mer. 24 sept. 2014 10:02

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par lawfix » mer. 22 avr. 2015 09:38

C'est parfait ça !

Pour le coup moi je n'ai pas eu beaucoup de temps ces derniers temps donc je n'ai toujours pas eu le temps d'étudier tes docs pour structurer mon message et envoyer ma variable correctement.

J'espère y arriver assez rapidement, mais encore faut il avoir au moins 3H devant soit ce qui est compliqué ces derniers temps...

lawfix
Messages : 66
Enregistré le : mer. 24 sept. 2014 10:02

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par lawfix » sam. 16 mai 2015 09:51

Hello,

un petit message juste pour dire que mon projet est resté un peu en attente ce dernier mois mais il devrait reprendre sous peu (je n'ai pas eu un seul instant :( )

En plus il faut que je reparte de zéro car la carte sd de mon pi a bien déconnée donc maintenant faut que je remette tout en place :\

Bref la suite très bientôt je l'espère :)

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par guillaume9344 » sam. 16 mai 2015 21:40

:D
J y crois pas !!!!!!!!! moi c'est tout la librairie que j 'ai réécrite pour le nrf24l01 que j 'ai effacé de la carte sd en faisant du ménage.................
Bon , depuis j 'ai reçu mon pi2 et j 'ai repris mais essais avec RF24 , les exemples fonctionnent du premier coup.....
Mais j 'ai mis un-peu de coté , je suis sur une machine à timelaps en ce moment.
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

lawfix
Messages : 66
Enregistré le : mer. 24 sept. 2014 10:02

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par lawfix » mar. 19 mai 2015 23:51

Bon je dirais que grâce à mon tuto ça refonctionne !

Je vais reprendre à partir des bases que j'avais laissée sur le forum et poursuivre mon projet ^^

C'est la loose pour ta librairie... t'avais pas de sauvegarde ?

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par guillaume9344 » jeu. 21 mai 2015 11:17

Si j avais fais 4 sauvegardes( a different stades d avancement ) mais je les avais mises dans le meme
repertoir et sous home/pi en acces libre sur mon pc windows, tout coup , une supression et on pert tout.
Par contre avec mon rpi2 , que j ai instalé de la meme maniere avec un server samba , ne reagit pas
pareil au niveau des droits, les sous dossiers n'erritent pas forcement des droits des dossiers parrents.....
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

lawfix
Messages : 66
Enregistré le : mer. 24 sept. 2014 10:02

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par lawfix » jeu. 11 juin 2015 23:47

Hello à tous,

Je reviens vers vous car je manque de temps mais j'essaie toujours à mes heures perdues d'avancer, 5 min par ci par là...

J'ai un vrai soucis sur mon code, je pense que je n'en suis pas loin, mais j'avoue ne pas bien comprendre comment fonctionne la librairie.

J'ai regardé sur le site http://tmrh20.github.io/RF24/classRF24.html avec la page documentation, mais ça ne répond pas à ma question ou alors il me manque clairement quelque chose dans la compréhension.

Code : Tout sélectionner

#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(2);

DallasTemperature sensors(&oneWire);

// ce,csn pins
RF24 radio(9,10);

void setup(void)
{
  sensors.begin();  
  Serial.begin(57600);
  Serial.println("**************V1 Send Sensor Data***********");
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  radio.setChannel(0x4c);

  // open pipe for writing
  radio.openWritingPipe(0xF0F0F0F0E1LL);
  radio.enableDynamicPayloads();
  radio.setAutoAck(true);
  radio.powerUp();
  Serial.println("...Sending");
}

void loop(void)
{

sensors.begin(); //demarrage du capteur de temperature
sensors.requestTemperatures(); // demmande mesure de temperature
sensors.getTempCByIndex(0); // Lecture de la temperature

Serial.print("Temperature sent:  ");
Serial.println(sensors.getTempCByIndex(0));
radio.write();
  delay(500);

}
Donc voici mon code, celui ci ne peut pas fonctionner puisque le radio.write manque d'argument : la référence, la taille de l'envoi.

Dans la doc c'est expliqué ici :

Code : Tout sélectionner


bool RF24::write	(	const void * 	buf,
uint8_t 	len 
)		
Be sure to call openWritingPipe() first to set the destination of where to write to.

This blocks until the message is successfully acknowledged by the receiver or the timeout/retransmit maxima are reached. In the current configuration, the max delay here is 60-70ms.

The maximum size of data written is the fixed payload size, see getPayloadSize(). However, you can write less, and the remainder will just be filled with zeroes.

TX/RX/RT interrupt flags will be cleared every time write is called

Parameters
buf	Pointer to the data to be sent
len	Number of bytes to be sent
radio.stopListening();
radio.write(&data,sizeof(data));
Returns
True if the payload was delivered successfully false if not
Definition at line 876 of file RF24.cpp.

Je me dis très bien il faut donc que j'utilise la valeur de sortie de sensors.requestTemperatures() qui est égale à 2512 soit en utilisant sensors.getTempCByIndex(0) 25.12°

Sauf que le paramètre const void *, soit le 1er argument de radio.write, je n'arrive pas du tout à insérer la variable de température.

J'arrive à envoyer du texte sans soucis, avec une chaine de caractère avec en intégrant en définition "const char *str_on" et dans le void loop radio.print(str_on) ça passe assez bien.

Par contre la température qui est une variable flottante si j'ai bien compris je n'y arrive pas.

J'ai tenté de définir le code de la manière suivante :

Code : Tout sélectionner

#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(2);

DallasTemperature sensors(&oneWire);

float temp;

// ce,csn pins
RF24 radio(9,10);

void setup(void)
{
  sensors.begin();  
  Serial.begin(57600);
  Serial.println("**************V1 Send Sensor Data***********");
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  radio.setChannel(0x4c);

  // open pipe for writing
  radio.openWritingPipe(0xF0F0F0F0E1LL);
  radio.enableDynamicPayloads();
  radio.setAutoAck(true);
  radio.powerUp();
  Serial.println("...Sending");
}

void loop(void)
{

sensors.begin(); //demarrage du capteur de temperature
sensors.requestTemperatures(); // demmande mesure de temperature
temp = sensors.getTempCByIndex(0); // Lecture de la temperature

Serial.print("Temperature sent:  ");
Serial.println(sensors.getTempCByIndex(0));
radio.write(temp;4);
  delay(500);

}
En faisant de cette manière, j'ai un retour d'erreur un peu partout que je ne parviens pas à résoudre.

Pourtant si j'ai bien compris, j'ai défini la variable temp en variable flotante, la variable flotante étant sensors.geTempCByindec(0), et je demande au module d'écrite le data temp avec 4 octet.

Si quelqu'un pouvait m'éclairer car là je nage...

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par guillaume9344 » ven. 12 juin 2015 16:41

Bonsoir,
c'est tout a fait normal que tu ne puisse envoyer un float avec write.
la fonction write permet d envoyer une chaine de caracteres (donc un tableau de de bytes).
Pour envoyer un float , il faut en premier convertir le float en chane de caratéres avec la fonction ftoa (google est ton ami) puis envoyer ,la chaine obtenue, avec write.
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

lawfix
Messages : 66
Enregistré le : mer. 24 sept. 2014 10:02

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par lawfix » ven. 12 juin 2015 16:53

Hello à toi ! J'espère que ton projet avance !

Moi tu vois je galère, mais prend toujours autant de plaisir quand le temps me le permet.

Pour la chaîne de caractère je m'en doutais un peu vu les mauvais retour de mes envois hormis ceux en chaîne de caractère..

Après j'avoue que l'explication de la librairie n'est pas forcément des plus évidentes :\ il n'y a pas vraiment de "mode d'emploi" et au final les exemples ne m'aident qu'à moitié. Enfin, quand je lis l'explication de la librairie le radio.write ne s'explique quasiment pas et le &data pas vraiment non plus :\

Mais je persévère grâce à toi entre autre :)

lawfix
Messages : 66
Enregistré le : mer. 24 sept. 2014 10:02

Re: nRF24L01 et B+ [tuto en fin de topic]

Message par lawfix » lun. 15 juin 2015 13:40

@Guillaume9344

Et toi ton projet avance t'il ?

Répondre

Retourner vers « L'électronique et le Raspberry Pi »