Page 3 sur 5

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : mar. 26 janv. 2016 20:40
par abrieg
bonjour, et merci pour ce tuto.

est ce qu' il y a beaucoup de modification à effectuer pour faire fonctionner cette installation avec un DHT11?

Brieuc

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : mar. 23 août 2016 13:15
par finopat
bonjour,
merci dom pour ce tuto qui a fonctionné pour moi.
J'ai comme besoin de pouvoir commander deux relais sur l'arduino, j'ai donc modifié le programme côté arduino :
j'ai joué sur l'ID de l'arduino, en effet je ne maîtrise pas suffisamment le json pour arriver à envoyer autre chose que set=on set=off et get.
J'aimerai arriver à faire cela avec json, avez vous des pistes à me donner pour cela ?
J'ai aussi utilisé digitalRead pour lire l'état des leds .

voici le code pour ceux que ça intéresse :

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

/* Définition des Pins CE, CSN et connexion de la LED sur ARDUINO */
#define RF_CE 9
#define RF_CSN 10
#define LED_PIN_1 6
#define LED_PIN_2 7


RF24 radio(RF_CE,RF_CSN);

/* Définition de l'id de l'Arduino */
byte myID1 = 0x01;
byte myID2 = 0x02;

byte pipes[][7] = {"master","slave","idle"};

struct payload_request_t
{
uint8_t number;
uint8_t destination;
char message[14];
};

struct payload_general_t
{
uint8_t number;
char message[15];
};

payload_request_t incoming;
payload_general_t outgoing;


/* Envoi de la réponse */
/* ******************* */
void sendReply()
{
/* Message visible si la console est ouverte */
Serial.print("Message de retour de la commande \"");
Serial.print(outgoing.message);
Serial.println("\"");

/* Retour de la reponse au demandeur */
radio.stopListening();
radio.openWritingPipe(pipes[1]);
delay(10);
radio.write(&outgoing,sizeof(payload_general_t)+1);
delay(10);
radio.startListening();
}


// Variables Etat de la led
int val = 0;
char* etat = "off";


/* Initialisation du programme */
/* *************************** */
void setup()
{
Serial.begin(9600);
/* Définition des pin des LED comme SORTIE */
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
/* On met le pin à l'état éteind */
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, LOW);

printf_begin();
radio.begin();
radio.setAutoAck(1);
radio.setRetries(1,3);
radio.enableDynamicPayloads();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1, pipes[0]);
radio.startListening();
radio.printDetails();

}

/* Boucle de "travail" */
/* ******************* */
void loop(void)
{
if(radio.available()) {
radio.read(&incoming, sizeof(payload_request_t));
/* Affichage de la commande demandée dans la console */
Serial.print("Commande recu : ");
Serial.println(incoming.message);

/* Aduino vérifie que c'est bien à son ID que la demande s'adresse */
/*si ID=1 = LED-1 à allumer; si ID=2 LED-2 à allumer */
int LED_PIN = 0;
if (incoming.destination==myID1 || incoming.destination==myID2) {
if (incoming.destination==myID1) {
LED_PIN = LED_PIN_1;
} else if (incoming.destination==myID2) {
LED_PIN = LED_PIN_2;
}

/* Si le message est "get", on retourne l'état enregistré de la LED */
if (strncmp(incoming.message, "get", 3) == 0) {


val = digitalRead(LED_PIN);
if (val == 1) {
etat = "on";
} else {
etat = "off";
}
strcpy(outgoing.message, etat);

/* Sinon, la commande est t'elle de type "set" */
} else if (strncmp(incoming.message, "set", 3) == 0) {
if (strncmp(&incoming.message[4], "on", 2)==0) {
/* Si la commande est "on", on allume la LED */
digitalWrite(LED_PIN, HIGH);
strcpy(outgoing.message, "ok");
} else if (strncmp(&incoming.message[4], "off", 3)==0) {
/* Si la commande est "off", on éteind la LED */
digitalWrite(LED_PIN, LOW);
strcpy(outgoing.message, "ok");
} else
/* Sinon, Commande inconnue, ni"on", ni "off" */
strcpy(outgoing.message, "?");

/* Sinon, Commande inconnue, ni "get", ni "set" */
} else {
strcpy(outgoing.message, "?");
}

/* On retourne le résultat du traitement */
outgoing.number = incoming.number;
sendReply();
}
}
delay(100);
}

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : sam. 13 mai 2017 00:14
par jpdlespace
Bonjour,
Je suis un noob en C++ (et en générale), mes bases en informatique remonte à la programmation de ZORGON REVENGE sur mon ORIC 1 à la fin des années 80' (non, non je suis encore jeune). Mais j'ai découvert le RASPBERRY, KODI, DOMOTICZ etc...ET c'est GENIAL. Donc j'ai essayé le tuto (que j'ai suivis à la lettre, et je suis aussi reparti de zéro (2 fois) en formatant la carte SD, car à force de chercher comment résoudre mon problème, je ne savais plus ou j'en étais dans l'installation de bibliothèque et mise à jour divers).
Ceci dit : j'ai toujours le même message d'erreur quand je fais le make ou le sudo make et aussi quand je compile les exemples du répertoire exemple LINUX :

sudo make all && sudo make install "Et là, la galère commence..."

g++ -c -o PiGateway.o PiGateway.cpp -Wall -Ofast -lpthread -g -D__Raspberry_Pi -mfloat-abi=hard -D_TTY_NAME=\"/dev/ttyMySensorsGateway\" -D_TTY_GROUPNAME=\"tty\" -march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp -I. -I/usr/local/include/RF24
PiGateway.cpp: In function ‘void setup()’:
PiGateway.cpp:51:21: error: ‘RPI_V2_GPIO_P1_22’ was not declared in this scope
gw = new MyGateway(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ, 60);
^
PiGateway.cpp:51:40: error: ‘RPI_V2_GPIO_P1_24’ was not declared in this scope
gw = new MyGateway(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ, 60);
^
PiGateway.cpp:51:59: error: ‘BCM2835_SPI_SPEED_8MHZ’ was not declared in this scope
gw = new MyGateway(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ, 60);
^
Makefile:61: recipe for target 'PiGateway.o' failed
make: *** [PiGateway.o] Error 1

Ou avec le fichier SENDER.CPP

make
g++ -o sender -Wall -I../ sender.cpp -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -l json -l rf24-bcm
sender.cpp:10:12: error: ‘RPI_BPLUS_GPIO_J8_15’ was not declared in this scope
RF24 radio(RPI_BPLUS_GPIO_J8_15,RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ);
^
sender.cpp:10:33: error: ‘RPI_BPLUS_GPIO_J8_24’ was not declared in this scope
RF24 radio(RPI_BPLUS_GPIO_J8_15,RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ);
^
sender.cpp:10:55: error: ‘BCM2835_SPI_SPEED_8MHZ’ was not declared in this scope
RF24 radio(RPI_BPLUS_GPIO_J8_15,RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ);
^
sender.cpp: In function ‘int main(int, char**)’:
sender.cpp:70:24: warning: ‘json_object* json_object_object_get(json_object*, const char*)’ is deprecated (declared at /usr/include/json/json_object.h:271) [-Wdeprecated-declarations]
json_object * key = json_object_object_get(jobj, "to");
^
sender.cpp:70:57: warning: ‘json_object* json_object_object_get(json_object*, const char*)’ is deprecated (declared at /usr/include/json/json_object.h:271) [-Wdeprecated-declarations]
json_object * key = json_object_object_get(jobj, "to");
^
sender.cpp:77:10: warning: ‘json_object* json_object_object_get(json_object*, const char*)’ is deprecated (declared at /usr/include/json/json_object.h:271) [-Wdeprecated-declarations]
key = json_object_object_get(jobj, "message");
^
sender.cpp:77:48: warning: ‘json_object* json_object_object_get(json_object*, const char*)’ is deprecated (declared at /usr/include/json/json_object.h:271) [-Wdeprecated-declarations]
key = json_object_object_get(jobj, "message");
^
sender.cpp:84:10: warning: ‘json_object* json_object_object_get(json_object*, const char*)’ is deprecated (declared at /usr/include/json/json_object.h:271) [-Wdeprecated-declarations]
key = json_object_object_get(jobj, "TTL");
^
sender.cpp:84:44: warning: ‘json_object* json_object_object_get(json_object*, const char*)’ is deprecated (declared at /usr/include/json/json_object.h:271) [-Wdeprecated-declarations]
key = json_object_object_get(jobj, "TTL");
^
Makefile:13: recipe for target 'sender' failed
make: *** [sender] Error 1


J'ai cherche a comprendre le GPIOXXX was not declared in this scope mais ce que j'ai trouvé ne fonctionne pas..... Lors de mes recherches j'ai trouvé à remplacer :
RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ, 60
Par:
RPI_BPLUS_GPIO_J8_22,RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ
Mais idem pour le message d'erreur (j'avais bien noté le changement de P1_22 en J8_22 sur le RASPBERRY mais je ne sais pas si cela a une influence sur la PIN 22 à connecter)

En pensent que la version du RASPBERRY pouvait être le problème... mais non. J' aussi cherché dans le RF24.h, voir si il c'était pas un problème de déclaration. Mais mes compétence sont beaucoup trop limiter pour modifier quoi que ce soit.

Pour les warning... je ne sais pas si ils sont important. j'ai compris qu'il y avait un problème d'obsolescence des bibliothèques mais sans trouver comment les mettre à jour.


Alors je m'en remet à vous et je serais le plus heureux du monde si une âme charitable daignais s'intéresser à mon problème car depuis 2 semaines et quelque nuits de recherche, je n'ai pas trouvé.....

PS: J'ai branché le nrf24l01 à l' ARDUINO NANO, compilé et versé le prog à priori il est prêt.

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : sam. 13 mai 2017 08:26
par domi
Tu as installé la bibliothèque WiringPi sur le Raspberry ?

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : dim. 14 mai 2017 00:28
par jpdlespace
Bonjour Domi,
Oui j ai installé la bibliothèque wiringpi. J'ai suivis le tuto de ce site: http://wiringpi.com/download-and-install/. A priori l'installation c'est bien passé.
Les commandes gpio -v et gpio readall fonctionnent.

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : dim. 14 mai 2017 09:06
par domi
Bonjour,

La procédure datant de près de deux ans, dès que j'ai un moment je la testerai sur une distribution récente afin de vérifier si elle est toujours d'actualité, et si il n'y a pas des modifications a apporter.

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : dim. 14 mai 2017 13:57
par jpdlespace
Merci, je vais attendre tout en continuant mes recherches...

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : dim. 14 mai 2017 20:23
par guillaume9344
Bonsoir,en fouillant un peut dans les sources , je pense que la bibliothèque RF24 utilise plutôt la lib BCM2835 que wiringpi , pour instaler la lib:
http://www.airspayce.com/mikem/bcm2835/index.html.

les terms "‘RPI_V2_GPIO_P1_22" correspondent à la déclaration des pin du pi pour cette lib.

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : lun. 15 mai 2017 00:17
par jpdlespace
MERCI MERCI MERCI.... Je suis comme un gosse a qui on a offert KINDER surprise. Ca marche !!! (Je suis quand même reparti de zéro car j'avais réussi cet après-midi à faire planter le RASPBERRY, il redémarrais non-stop...)

Re: Faire dialoguer un Raspberry et un Arduino via nRF24L01

Posté : dim. 14 oct. 2018 10:41
par m3sh331
jpdlespace a écrit :
lun. 15 mai 2017 00:17
MERCI MERCI MERCI.... Je suis comme un gosse a qui on a offert KINDER surprise. Ca marche !!! (Je suis quand même reparti de zéro car j'avais réussi cet après-midi à faire planter le RASPBERRY, il redémarrais non-stop...)
Bonjour,
Comment avez-vous résolu le problème de l'installation de la bibliothèque libjson0-dev (impossible de trouver le packet libjson0-dev)?
J'ai essayé avec une autre bibliothèque (qui existe) : libjsoncpp-dev , mais le make (pour sender.cpp) échoue avec de nombreuse erreurs..

Cordialement,

Michel