nRF24L01 et B+ [tuto en fin de topic]
Modérateurs : Francois, smba38
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: nRF24L01 et B+ [tuto en fin de topic]
Ha! ça c'est deja une bonne nouvelle, de mon coté j ai bien avancé aussi, j arrive aussi à transmettre du rpi vers mon stm32 et bien sur je récupère bien les données émises.
J' ai du réécrire l’accès au nrf24l01 car je n'ai pas d'arduino.
je joint les fichiers pour le rpi , compilé avec code::blocks mais on peut aussi le faire avec "make" , et les fichiers pour un stm32f103.
le code coté reception (stm32) ne fait rien de spécial, il stocke juste les 32 bytes reçus dans un tableau et reconfigure le nrf24l01 pour la réception suivante.
J'ai essayé de commenter le code le plus possible pour la compréhension et j 'ai utilisé la config par defaut des nrf24l01 en modifiant juste le nécessaire.
Bonne lecture.
@+
J' ai du réécrire l’accès au nrf24l01 car je n'ai pas d'arduino.
je joint les fichiers pour le rpi , compilé avec code::blocks mais on peut aussi le faire avec "make" , et les fichiers pour un stm32f103.
le code coté reception (stm32) ne fait rien de spécial, il stocke juste les 32 bytes reçus dans un tableau et reconfigure le nrf24l01 pour la réception suivante.
J'ai essayé de commenter le code le plus possible pour la compréhension et j 'ai utilisé la config par defaut des nrf24l01 en modifiant juste le nécessaire.
Bonne lecture.
@+
- Fichiers joints
-
- nrf24l01.rar
- (148.08 Kio) Téléchargé 194 fois
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
Re: nRF24L01 et B+ [tuto en fin de topic]
Alors pour le coup, je vais tenter de voir si ça fonctionne le gettingstarted modifié.
Mais par contre je n'ai pas le même car mon getting started est le suivant :
https://github.com/TMRh20/RF24/blob/mas ... tarted.ino :\
@Guillaume, quand je tente de compiler tes fichiers avec make j'ai l'erreur suivante :
PS : j'admire le fait que tu ais les capacités à réécrire la librairie !
Toutefois, je suis parvenu à quelque chose avec ce code :
Le code envoi bien les données qui sont reçu via le soft sur le pi RPI hub
Il me reste donc à approfondir la manière de faire de ce code pour optimiser le miens.
Après je passerais côté réception côté pi pour avoir enfin quelque chose de correct !
Edit :
Toujours dans l'esprit, voici le code du Rpi hub modifié :
Cette fois ci, je reçois bien les infos sauf que je n'ai que le bout de l'info ^^ un T
Mais par contre je n'ai pas le même car mon getting started est le suivant :
https://github.com/TMRh20/RF24/blob/mas ... tarted.ino :\
@Guillaume, quand je tente de compiler tes fichiers avec make j'ai l'erreur suivante :
Code : Tout sélectionner
root@raspberrypi:~# cd RF24test/
root@raspberrypi:~/RF24test# make
g++ -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -Wall -
I../ -lrf24-bcm spi.cpp -o spi
spi.cpp: In function ‘int main(int, char**)’:
spi.cpp:44:23: error: too few arguments to function ‘void bcm2835_spi_begin(uint
8_t)’
/usr/local/include/bcm2835.h:999:17: note: declared here
spi.cpp:40:10: warning: unused variable ‘buffer2’ [-Wunused-variable]
Makefile:32: recipe for target 'spi' failed
make: *** [spi] Error 1
root@raspberrypi:~/RF24test#
Toutefois, je suis parvenu à quelque chose avec ce code :
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);
unsigned char data[3] = {
0};
unsigned long count=0;
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.requestTemperatures();
float currentTemp;
currentTemp = sensors.getTempCByIndex(0);
//assign 'T' to represent a Temperature reading
data[0] = 'T';
data[1] = currentTemp;
count++;
// print and increment the counter
radio.write(data, sizeof(float)+1);
Serial.print("Temperature sent: ");
Serial.println(currentTemp);
// pause a second
delay(500);
}
Code : Tout sélectionner
root@raspberrypi:~/rf24libs/RF24/examples_RPi/extra# ./rpi-hub
================ SPI Configuration ================
CSN Pin = CE0 (PI Hardware Driven)
CE Pin = Custom GPIO22
Clock Speed = 8 Mhz
================ NRF Configuration ================
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xf0f0f0f0d2 0xf0f0f0f0e1
RX_ADDR_P2-5 = 0xe2 0xe3 0xf1 0xf2
TX_ADDR = 0xf0f0f0f0d2
RX_PW_P0-6 = 0x20 0x20 0x20 0x20 0x20 0x20
EN_AA = 0x3f
EN_RXADDR = 0x3e
RF_CH = 0x4c
RF_SETUP = 0x07
CONFIG = 0x0f
DYNPD/FEATURE = 0x3f 0x04
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_MAX
Output below :
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Recv: size=5 payload=T pipe=1 Send: size=5 payload=T pipe:1
Après je passerais côté réception côté pi pour avoir enfin quelque chose de correct !
Edit :
Toujours dans l'esprit, voici le code du Rpi hub modifié :
Code : Tout sélectionner
void setup(void)
{
// init radio for reading
radio.begin();
radio.enableDynamicPayloads();
radio.setAutoAck(1);
radio.setRetries(15,15);
radio.setDataRate(RF24_1MBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setChannel(76);
radio.setCRCLength(RF24_CRC_16);
radio.openReadingPipe(1,0xF0F0F0F0E1LL);
radio.startListening();
}
void loop(void)
{
// 32 byte character array is max payload
char receivePayload[32];
time_t t = time(0); // get time now
struct tm * now = localtime( & t ); // Get curret Time.
while (radio.available())
{
// read from radio until payload size is reached
uint8_t len = radio.getDynamicPayloadSize();
radio.read(receivePayload, len);
// display payload
cout << (now->tm_year + 1900) << '-'
<< (now->tm_mon + 1) << '-'
<< now->tm_mday << ' '
<< now->tm_hour << ':'
<< now->tm_min << ' '
<< receivePayload << endl;
}
}
int main(int argc, char** argv)
{
setup();
while(1)
loop();
return 0;
}
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: nRF24L01 et B+ [tuto en fin de topic]
Bon ba ca avance.
une petite erreure dans le fichier d envoi:
data[] est defini comme un tableau de char: char data[3];
lors de l envoi tu charge data[0]avec t qui est bien un char mais apres tu charge data[1] avec
un float , du coup on ne sais pas ce qui est chargé ( mon compilateur m interdit carement ca)
Essai de charger data[1]='a' ca devrai afficher "ta " a la reception. Apres il faudra comvertir le float
en chaine de caracteres dans datq et tu pourra les transmettres.
@+
une petite erreure dans le fichier d envoi:
data[] est defini comme un tableau de char: char data[3];
lors de l envoi tu charge data[0]avec t qui est bien un char mais apres tu charge data[1] avec
un float , du coup on ne sais pas ce qui est chargé ( mon compilateur m interdit carement ca)
Essai de charger data[1]='a' ca devrai afficher "ta " a la reception. Apres il faudra comvertir le float
en chaine de caracteres dans datq et tu pourra les transmettres.
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
Re: nRF24L01 et B+ [tuto en fin de topic]
Hello,
Merci pour l'explication, j'ai bien compris le principe, mais à savoir si j'arriverai à mettre en oeuvre tes conseils c'est autre chose.
Tu as un ouvrage sur lequel je pourrais approfondir ces connaissances ? tu as l'air extrêmement calé dans la matière !
Merci pour l'explication, j'ai bien compris le principe, mais à savoir si j'arriverai à mettre en oeuvre tes conseils c'est autre chose.
Tu as un ouvrage sur lequel je pourrais approfondir ces connaissances ? tu as l'air extrêmement calé dans la matière !
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: nRF24L01 et B+ [tuto en fin de topic]
Bonsoir, pour les exemples je suis parti de ce site: http://tmrh20.github.io/RF24/
je joins aussi trois pdf pour les bases du langage C , il y en a un orienté pour la programmation des µc PIC mais les principes et le fonctionnement sont applicables sur tous les autre plateforme (c'est le but du C)
Les deux autre sont plus complet mais plus indigestes, ces pdf sont restés longtemps en raccourci sur mon bureau, aprés pour plus compliqué , GOOGLE est ton ami (ou parfois pas )
bonne lecture .
@+
je joins aussi trois pdf pour les bases du langage C , il y en a un orienté pour la programmation des µc PIC mais les principes et le fonctionnement sont applicables sur tous les autre plateforme (c'est le but du C)
Les deux autre sont plus complet mais plus indigestes, ces pdf sont restés longtemps en raccourci sur mon bureau, aprés pour plus compliqué , GOOGLE est ton ami (ou parfois pas )
bonne lecture .
@+
Modifié en dernier par guillaume9344 le jeu. 16 avr. 2015 06:08, modifié 1 fois.
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: nRF24L01 et B+ [tuto en fin de topic]
Avec les pièces jointe c'est mieux........
- Fichiers joints
-
- cours C.7z
- (822.98 Kio) Téléchargé 192 fois
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
Re: nRF24L01 et B+ [tuto en fin de topic]
Hello,
Je te remercie beaucoup ! Je vais tester ta solution et te donner les retours
Pour les exemples j'ai la même librairie que toi !
ET pour autant, je n'arrive pas aussi facilement à les détourner ^^
Edit : Tu as tout à fait raison en modifiant le data 1 avec un 'a' à la réception j'ai Ta
Il faut donc que je modifie les variables.
Je suis en train tout simplement d'essayer de convertir la valeur reçue de température pour l'envoyer au format text et ainsi éviter les conversions de données !
Dès que je parviens à faire cela, je devrais recevoir la température en brut de l'autre côté.
Je te remercie beaucoup ! Je vais tester ta solution et te donner les retours
Pour les exemples j'ai la même librairie que toi !
ET pour autant, je n'arrive pas aussi facilement à les détourner ^^
Edit : Tu as tout à fait raison en modifiant le data 1 avec un 'a' à la réception j'ai Ta
Il faut donc que je modifie les variables.
Je suis en train tout simplement d'essayer de convertir la valeur reçue de température pour l'envoyer au format text et ainsi éviter les conversions de données !
Dès que je parviens à faire cela, je devrais recevoir la température en brut de l'autre côté.
- Jean-Marie
- Raspinaute
- Messages : 240
- Enregistré le : sam. 24 janv. 2015 18:01
- Localisation : Arlon, Belgique
- Contact :
Re: nRF24L01 et B+ [tuto en fin de topic]
Hello les amis,
Il y a probablement des choses intéressantes à trouver dans cet article expliquant l'envoi par NRF24L01 des données d'une sonde pilotée par Arduino, le tout alimenté par un capteur solaire et un super-condensateur. L'article est très bien écrit (en anglais), avec plein de détails et les programmes.
Il y a probablement des choses intéressantes à trouver dans cet article expliquant l'envoi par NRF24L01 des données d'une sonde pilotée par Arduino, le tout alimenté par un capteur solaire et un super-condensateur. L'article est très bien écrit (en anglais), avec plein de détails et les programmes.
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: nRF24L01 et B+ [tuto en fin de topic]
Merci Jean Marie , j 'ai vue le lien dans les poste sur les modules ESP.
De mon cotés grande avancée j 'allume et eteinds une led à distance , je sais ca parais pas mirobolant comme ca .
@+
De mon cotés grande avancée j 'allume et eteinds une led à distance , je sais ca parais pas mirobolant comme ca .
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
- Jean-Marie
- Raspinaute
- Messages : 240
- Enregistré le : sam. 24 janv. 2015 18:01
- Localisation : Arlon, Belgique
- Contact :
Re: nRF24L01 et B+ [tuto en fin de topic]
Mais si, c'est le principal ! Le plus difficile est de transmettre correctement l'ordre à distance. Après, iI n'y a pas une grande différence entre allumer une LED et allumer une centrale nucléaire. Bon, j'arrête là car je n'ai pas envie d'être mis sous surveillance anti-terroriste.Guillaume a écrit :De mon cotés grande avancée j 'allume et eteinds une led à distance , je sais ca parais pas mirobolant comme ca .