Capteur RF24 et B+

Bonjour à tous,

Je tente de me lancer dans une aventure Arduino, B+, j'ai une grande envie d'apprendre mais je ne parviens pas à faire ce que mes pensées me demandent de faire ^^

En effet, j'ai bien réussi à faire communiquer un B+ avec un Uno via les transmetteurs RF24, maintenant je souhaiterai envoyer une info des uno vers mon pi au travers des RF24....

Le soucis c'est que je n'ai pas vraiment trouvé de tutoriel sur la structure du message à faire pour le RF24. En effet, l'idée est également de comprendre pour mieux transposer après.

J'ai tenté de m'inspirer des multiples exemples, mais j'avoue ne pas trop y arriver.

J'ai branché un capteur Dallas sur mon uno pour lire la température et envoyer le message au travers de l'arduino et je ne parviens pas à coder correctement dans la mesure ou en essayant de récupérer l'info côté raspberry je ne reçois rien...

( A noter que j'ai bien entendu testé les fonctionnalités avec le gettingstarted qui fonctionne parfaitement, j'ai fini par en faire un tuto d'ailleurs car je trouvais que c'était pas forcément des plus clair pour faire fonctionner les deux ensemble )

si quelqu'un pouvait m'aider à construire / comprendre cela serait bien aimable !

Bien cordialement,

Si tu veux des réponses, il faudra donner du code, des schémas de montage que tu as fait.

Pardonnez-moi, je vais donner les éléments.

Dans un premier temps,pour la partie logicielle, ayant fait un tuto je le reproduis ci-dessous :

J'ai fais une sorte de Tuto pour installer et faire marcher deux modules nrf24l01 entre un arduino et un raspberry b+ :

1ere étape : les branchements

Côté B+

Raspberry ====> NRF24L01

le 3v3 ==> VCC
GND ===> GND
CE0 ===> CSN
SCLK ===> SCK
MISO ==> MISO
MOSI ==> MOSI
GPIO22 => CE

Côté Arduino ( j'tutilise un nano )

NRFL => Arduino

GND ==> GND
VCC ==> 3.3V
CE ==> D7
CSN ==> D8
SCK ==> D13
MOSI ==> D11
MISO ==> D12

Voilà en ce qui concerne le côté branchement.

On passe à la partie logicielle !

Arduino

Il suffit d'installer le logiciel, mais il faut importer la bonne librairie !

GitHub - nRF24/RF24: OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices rendez vous sur cette page et cliquer sur download ( pas besoin de décompresser le fichier ).

Ouvrez le logiciel Arduino

  • cliquez sur Croquis
  • Importer bibliothèque
  • Ajouter bibliothèque...

Programmez votre arduino en cliquant sur ouvrir puis Gettingstarted.

( Vérifiez bien que les nodes sont bien 9,10 et pas 8,9

Côté Raspberry b+ :

Il faut activer le SPI si ce n'est pas encore activé.

Lancez raspi-config et activez le SPI.

Il faut ensuite redémarrer le raspberry.

Mettez à jour votre raspberry :
apt-get update
apt-get upgrade

Allez dans le répertoire de votre choix sur votre pi puis effectuez les opérations suivantes :

Lancez le logiciel sur votre arduino (Outils moniteur série...)

Allez sur votre raspberry

lancez la commande "./gettingstarted"

A ce moment là il faut soit le mettre en position d'écoute ou d'envoie et l'inverse côté Arduino.

Vous devriez avoir ces fenêtres si tout fonctionne :

http://www.hostingpics.net/viewer.php?id=650467image567.png

Et je post le code ce soir pour ma partie interrogation des sondes

Bonsoir à tous,

ayant été un peu débordé je ne reviens que maintenant avec mes codes !

Côté arduino ça donne ça :

//DS18b20 libraries
#include <OneWire.h>
#include <DallasTemperature.h>
//NRF24L01 libraries
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN 9
#define CSN_PIN 10

const uint64_t canal =  0xF0F0F0F0D2LL;

RF24 radio(CE_PIN, CSN_PIN);

const byte delay_seconds = 1; //Segundos entre ejecuciones del loop
const byte TEMPERATURE_SENSOR_BUS = 2; //Pin al que esta conectado el sensor de temperatura

OneWire oneWire(TEMPERATURE_SENSOR_BUS);
DallasTemperature sensors(&oneWire);

void setup()
{
 Serial.begin(9600); //Start serial port

 sensors.begin();

radio.begin();

 radio.openWritingPipe(canal);

}

void loop()
{

 String a = String(request_temperature());

 char s[a.length()];
 a.toCharArray(s, a.length());

 bool ok = radio.write( s, sizeof(s));


 delay(delay_seconds * 1000);
}

float request_temperature() {
 sensors.requestTemperatures();
return sensors.getTempCByIndex(0);
}

Côté raspberry :

#!/usr/bin/python
# raspberry pi nrf24l01 hub

from nrf24 import NRF24
import time
from time import gmtime, strftime

pipes = [0xf0, 0xf0, 0xf0, 0xf0, 0xd2]

radio = NRF24()
radio.begin(0, 0,25,18) #set gpio 25 as CE pin
radio.setRetries(15,15)
radio.setPayloadSize(32)
radio.setChannel(0x4c)
radio.setDataRate(NRF24.BR_250KBPS)
radio.setPALevel(NRF24.PA_MAX)
radio.setAutoAck(1)
radio.openWritingPipe(pipes[0])
radio.openReadingPipe(1, pipes[1])

radio.startListening()
radio.stopListening()

radio.printDetails()
radio.startListening()

while True:
    pipe = [0]
    while not radio.available(pipe, True):
        time.sleep(1000/1000000.0)
    recv_buffer = []
    radio.read(recv_buffer)
    out = ''.join(chr(i) for i in recv_buffer)
    print out

Donc voilà, si vous avez une solution n’hésitez pas !

Sachant que ces codes ont été créé en glanant sur internet, car vous l’aurez compris j’essaie d’apprendre à m’en servir…

Merci à tous :slight_smile:

Please help ^^

D'ailleurs je reviens vers vous car j'ai tenté de réinstaller la librairie côté Raspberry car finalement le duino marche bien...

Et là aujourd'hui j'ai une erreur étrange "no module named NRF24" line...

C'est étrange car cette erreur n'apparaissait pas avant.

En outre j'ai tenté de changer l'emplacement de mon programme directement dans le dossier de la librairie & modifié le code en précisant import NRF24 simplement et non plus from etc... pour éviter qu'il aille dans tous les coins.

Mais rien n'y fait...

Es ce quelqu'un aurait une idée ?