INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Nano + Funkmodul nRF24L01+
20.02.2016, 15:23
Beitrag #1
Arduino Nano + Funkmodul nRF24L01+
Hallo zusammen,

ich versuche gerade eine Funkverbindung zwischen zwei Arduino Nano´s (v3) und einem Funkmodul nRF24L01+ zu Stande zu bekommen. Allerdings gelingt mir dies nicht.

Folgendes Vorgehen dafür:
  1. Hardware-Verbindung zwischen Funkmodul und jedem Nano siehe Bild:
    [Bild: Nano-nRF24L01+-600x501.png]
    Funkmodul Pin-Nr. Funkmodul Pin-Name Arduino Nano Pin Farbe (vgl. Bild)
    1 GND GND Schwarz
    2 VCC (3.3V) 3.3V Rot
    3 CE D9 Grün
    4 CSN D10 Grau
    5 SCK D13 Gelb
    6 MOSI D11 Blau
    7 MISO D12 Violett
    8 IRQ nicht benutzt

    Ich verwende an den Nano´s den anderen GND, aber das spielt ja keine Rolle.
    Außerdem kommt die neueste Version vom nRF24L01+ (mit Antenne) zum Einsatz.
  2. Für die Arduino IDE habe ich die notwendige Bibliothek eingebunden: RF24 von TMRh20 (Version 1.1.5). Am Ende IDE neu gestartet.
  3. Dann habe ich den ersten Nano via USB mit dem Computer verbunden (USB-Treiber [Winchiphead Treiber] zunächst installiert).
  4. Den Sketch "GettingStarted" aus der RF24 Bibliothek ausgewählt.
    Zitat:/*
    * Getting Started example sketch for nRF24L01+ radios
    * This is a very basic example of how to send data from one node to another
    * Updated: Dec 2014 by TMRh20
    */

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

    /****************** User Config ***************************/
    /*** Set this radio as radio number 0 or 1 ***/
    bool radioNumber = 0;

    /* Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 */
    RF24 radio(7,8);
    /**********************************************************/

    byte addresses[][6] = {"1Node","2Node"};

    // Used to control whether this node is sending or receiving
    bool role = 0;

    void setup() {
    Serial.begin(115200);
    Serial.println(F("RF24/examples/GettingStarted"));
    Serial.println(F("*** PRESS 'T' to begin transmitting to the other node"));

    radio.begin();

    // Set the PA Level low to prevent power supply related issues since this is a
    // getting_started sketch, and the likelihood of close proximity of the devices. RF24_PA_MAX is default.
    radio.setPALevel(RF24_PA_LOW);

    // Open a writing and reading pipe on each radio, with opposite addresses
    if(radioNumber){
    radio.openWritingPipe(addresses[1]);
    radio.openReadingPipe(1,addresses[0]);
    }else{
    radio.openWritingPipe(addresses[0]);
    radio.openReadingPipe(1,addresses[1]);
    }

    // Start the radio listening for data
    radio.startListening();
    }

    void loop() {


    /****************** Ping Out Role ***************************/
    if (role == 1) {

    radio.stopListening(); // First, stop listening so we can talk.


    Serial.println(F("Now sending"));

    unsigned long time = micros(); // Take the time, and send it. This will block until complete
    if (!radio.write( &time, sizeof(unsigned long) )){
    Serial.println(F("failed"));
    }

    radio.startListening(); // Now, continue listening

    unsigned long started_waiting_at = micros(); // Set up a timeout period, get the current microseconds
    boolean timeout = false; // Set up a variable to indicate if a response was received or not

    while ( ! radio.available() ){ // While nothing is received
    if (micros() - started_waiting_at > 200000 ){ // If waited longer than 200ms, indicate timeout and exit while loop
    timeout = true;
    break;
    }
    }

    if ( timeout ){ // Describe the results
    Serial.println(F("Failed, response timed out."));
    }else{
    unsigned long got_time; // Grab the response, compare, and send to debugging spew
    radio.read( &got_time, sizeof(unsigned long) );
    unsigned long time = micros();

    // Spew it
    Serial.print(F("Sent "));
    Serial.print(time);
    Serial.print(F(", Got response "));
    Serial.print(got_time);
    Serial.print(F(", Round-trip delay "));
    Serial.print(time-got_time);
    Serial.println(F(" microseconds"));
    }

    // Try again 1s later
    delay(1000);
    }



    /****************** Pong Back Role ***************************/

    if ( role == 0 )
    {
    unsigned long got_time;

    if( radio.available()){
    // Variable for the received timestamp
    while (radio.available()) { // While there is data ready
    radio.read( &got_time, sizeof(unsigned long) ); // Get the payload
    }

    radio.stopListening(); // First, stop listening so we can talk
    radio.write( &got_time, sizeof(unsigned long) ); // Send the final one back.
    radio.startListening(); // Now, resume listening so we catch the next packets.
    Serial.print(F("Sent response "));
    Serial.println(got_time);
    }
    }




    /****************** Change Roles via Serial Commands ***************************/

    if ( Serial.available() )
    {
    char c = toupper(Serial.read());
    if ( c == 'T' && role == 0 ){
    Serial.println(F("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK"));
    role = 1; // Become the primary transmitter (ping out)

    }else
    if ( c == 'R' && role == 1 ){
    Serial.println(F("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK"));
    role = 0; // Become the primary receiver (pong back)
    radio.startListening();

    }
    }


    } // Loop
    Hier kommt es nun zum ersten Konflikt:
    /* Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 */
    RF24 radio(7,8);

    Hardwaremäßig verwende ich die Pins 9+10, allerdings wenn ich dies in der Software anpasse sehe ich keine Übertragung, aber dazu später mehr.
    Desweiteren lässt sich jedem Nano eine Radio Number zuordnen. Der erste bekommt die null. Der Sketch wird sodann ohne Fehler auf den Nano übertragen.

    Gleicher Vorgang für den zweiten Nano. Nur mit Radio Number 1.
  5. Sodann öffne ich das Programm CoolTerm, mit diesem ist es möglich zwei COM-Ports gleichzeitig zu beobachten. Der eine Nano wird sodann mittels T als Sender und der andere mit R als Empfänger geschalten.

    JETZT DAS KOMISCHE. Ändere ich in der Software die Pins auf meine Hardware-Belegung, sprich ich ändere 7+8 in 9+10, so sehe ich keine Übertragung. Belasse ich allerdings den Sketch bei 7+8 sowie meine Hardware-Belegung bei 9+10, so kann ich feststellen, dass etwas gesendet und empfangen wird. Allerdings kann das Empfangene nicht wirklich dem Gesendeten zugeordnet werden. D. h. es kommt zwar teilweise etwas an, aber man kann nicht nachvollziehen ob es auch das richtige ist.


Hat jemand eine Idee was für einen Bock ich geschossen habe?

Vielen Dank vorab!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2016, 17:05 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2016 17:09 von arduinopeter.)
Beitrag #2
RE: Arduino Nano + Funkmodul nRF24L01+
Nimm mal diese Librarie im Anhang.
Umbenennen in zip.

Byte senden :
Code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN   53
#define CSN_PIN  48

byte inbyte;
byte daten[1];

const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);

void setup()
{
  Serial.begin(9600);
  delay(1000);
  radio.begin();
  radio.setRetries(0, 15);
  radio.setPALevel(RF24_PA_HIGH);
  radio.openWritingPipe(pipe);
}

void loop()
{
  inbyte = inbyte+1;
  daten[0] = inbyte;
  radio.write(daten, sizeof(daten));
}

Byte empfangen:
Code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN  53
#define CSN_PIN 48

const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);

byte daten[1];

void setup()
{
  Serial.begin(9600);
  delay(1000);
  radio.begin();
  radio.setRetries(0, 15);
  radio.setPALevel(RF24_PA_HIGH);
  radio.openReadingPipe(1,pipe);
  radio.startListening();
}

void loop()
{
  if ( radio.available() )
  {
    bool done = false;
    while (!done)
    {
      done = radio.read( daten, sizeof(daten) );
      Serial.print("X = ");
      Serial.println(daten[0]);
    }
  }
  else
  {    
    Serial.println("No radio available");
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Gemeinsame Spannungsversorgung für Arduino Nano und WS2812b and1 11 187 Gestern 17:38
Letzter Beitrag: georg01
  nRF24L01 im Batteriesparbetrieb alpenpower 4 143 01.12.2016 16:28
Letzter Beitrag: MeisterQ
  Ardunio Nano 3,3V Mathias 5 130 24.11.2016 22:38
Letzter Beitrag: Tommy56
  Arduino NANO mit zwei 1.8 SPI-tfts Thandor 2 104 15.11.2016 23:18
Letzter Beitrag: Thandor
  nRF24L01 und Arduino UNO AvrRobot 0 101 10.11.2016 17:24
Letzter Beitrag: AvrRobot
  Arduino Nano - VIN Mathias 16 697 22.09.2016 21:39
Letzter Beitrag: ardu_arne
  Arduino Nano und SD Card emjott 3 334 09.09.2016 12:15
Letzter Beitrag: Bitklopfer
  Arduino Nano. Externe Stromversorgung reimundko 1 631 26.06.2016 13:44
Letzter Beitrag: hotsystems
  Arduino Nano - RGB LED Controller MasT3r-A 13 834 29.04.2016 11:43
Letzter Beitrag: hotsystems
Photo 2 RC-Kanäle am Arduino Nano Clone do1xxy 1 444 04.04.2016 21:10
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste