Pro Micro mit NRF24L01

Hallo,
ich habe es geschafft, meinen Pro Micro so zu programmieren dass er beim Tippen eines Buzzers ein 'Leerzeichen' an meinen PC sendet.

Nun wollte ich das ganze ohne Verbindungskabel über zwei NRF24L01 und einem weiteren Pro Micro lösen. Aber bekomme die zwei Sketches nicht so zusammengefügt dass da was funktionstüchtiges dabei rüber kommt.

Dies ist mein Grundsketch um ein 'Leerzeichen' zu erzeugen


#include <Keyboard.h>

// Einen Taster mit dem Pin 9 verbinden
int space = 9;

void setup()
{
  // Den Taster als Active-Low verschalten, als INPUT konfigurieren und
  // das ausgehende Signal bei ungedruecktem Taster ueber einen Pull-up
  // Widerstand auf VCC leiten
  pinMode(space, INPUT_PULLUP);
  Keyboard.begin();
}

void loop()
{
  // Wenn der Taster gedrueckt wird
  if (digitalRead(space) == 0)
  {
    // Dem Computer das Enter senden. Die Zahl 32 entspricht
    // dabei der Leertaste in der ASCII-Tabelle
    ;Keyboard.write(32);
    // Kurze Pause, um Wiederholungen zu vermeiden
    delay(1500);
  }
}

dies wäre Jetzt der Sender Code welcher beim NRF24L01 dabei war und darunter der Empfänger Code welche ich eben mit dem obigen vereinen möchte damit ich das Leerzeichen über Funk senden kann. Seid mir bitte nachsichtig dass ich nicht so viel plan habe.

In diesem Beispiel werden wir einfach eine "Hello World"-Nachricht vom
Sender zum Empfänger senden. Hier ist der Sketch für den Sender:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 8); // create an RF24 object, CE, CSN
const byte address[6] = "00001"; // address
void setup() {
radio.begin();
radio.openWritingPipe(address); // set the address
radio.stopListening(); // set module as transmitter
}
void loop() {
const char text[] = "Hello World"; // message
radio.write(&text, sizeof(text)); // send message
delay(1000);
}

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 8); // CE, CSN
const byte address[6] = "00001"; // address
void setup() {
while(!Serial);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address); // set the address
radio.startListening(); // set module as receiver
}
void loop() {
// Read the data if available in buffer
if(radio.available()) {
char text[32] = {0};
radio.read(&text, sizeof(text));
Serial.println(text);
}
}

das der Serielle Port hier nur zum Anzeigen ist weiß ich. Aber bei mir kommt eben nichts an..

Vllt hat ja jemand Tipps wie ich die Sketches vereinen kann.

Danke

Funktionieren Sender und Empfänger bei Dir fehlerfrei?
Also bekommst Du auf dem SerMon des Empfängers das Hello World angezeigt?

Wenn ja, ist es doch nicht ganz so schwer :wink:

Zuerst solltest du sicherstellen, dass beide Micros mit ihren NRFs reden können.

In Robin2's Tutorial gibt es einen Connection Test Sketch dafür,
du könntest auch deine Sketches mit einen radio.printDetails() am Ende von setup versehen,
schau nach, was man dafür sonst noch machen muss.
https://nrf24.github.io/RF24/classRF24.html#adc95213ed4c8569a90eb33122e16cea6
Dieser Test funktioniert mit jeder Art von 3.3V Stromversorgung.

Die NRFs brauchen eine gute (oder zumindest Spitzenstrom resistente) Spannungsversorgung,
die von 5V Arduinos oft nicht zur Verfügung gestellt wird.
Manchmal hilft ein Kondensator nahe am NRF (2 bis 10 uF),
manchmal braucht man einen eigenen 3.3V Regler.

Eine schlechte Stromversorgung ist für die Mehrzahl an NRF Problemen verantwortlich.

3 Likes

alles klar, dass werde ich mir mal ansehen. Vielen Dank

Nein eben noch nicht. da bin ich gerade dran.

Eine Frage habe ich noch. Ich habe jetzt Sender und Empfänger exakt gleich an die beiden arduinos angeschlossen. Ist das korrekt oder liegt hier der Fehler ?

Solange die Verbindungen von CE und CSN zu den Sketches passen ist das in Ordnung.
Welche Pins für SPI an einem Micro verwendet werden, ist von der Hardware vorgegeben,
könnte sein, dass das von denen eines Nanos/Unos abweicht.

Die Belegung habe ich im Internet gefunden und danach dann angestöpselt. Nur bekomme ich schon keine Verbindung hergestellt. Hoffe es liegt nicht am Strom.

Im Internet steht viel. Welche Pins benutzt du für SPI?

die 15-16

Hi also hab jetzt alles angeschlossen, er überträgt auch sobald ich es einstecke. aber es kommt das Hello World nicht an.

Habe "CSN" und "CE" jetzt auf 5 und 6 gelegt. ist das richtig?? Der rest der Pins habe ich nach herstellerangaben angesteckt.

Sender

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(6, 5); // create an RF24 object, CE, CSN
const byte address[6] = "00001"; // address
void setup() {
radio.begin();
radio.openWritingPipe(address); // set the address
radio.stopListening(); // set module as transmitter
}
void loop() {
const char text[] = "Hello World"; // message
radio.write(&text, sizeof(text)); // send message
delay(1000);
}

Empfänger

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(6, 5); // CE, CSN
const byte address[6] = "00001"; // address
void setup() {
while(!Serial);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address); // set the address
radio.startListening(); // set module as receiver
}
void loop() {
// Read the data if available in buffer
if(radio.available()) {
char text[32] = {0};
radio.read(&text, sizeof(text));
Serial.println(text);
}
}

kann mir irgendwer sagen was ich falsch mache, weil da nichts rauskommt? Das angehängte Bild zeigt meinen Seriellen Monitor (Baud ist auf 9600)

Was zeigt der Serielle Monitor wenn du ein einfachen Sketch ohne RF24, mit nur einer einfachen Ausgabe. Funktioniert es dann mit der Ausgabe auf dem Monitor?
Ist COM10 die Schnittstelle des Empfänger Arduinos?

Kannst du ein Bild zeichnen, wo alle Verbindungen zu sehen sind?
Hast du einen 10µF Kondensator zwischen 3,3V und GND nahe am RF24? Ohne diesen bricht die Spannung am RF24 zusammen sobald er senden will, da der 3,3V Regler auf dem Arduino Board dafür zu schwach ist. Der Kondensator puffert dies.

Auch müssen die zwei RF24 einen Mindestabstand haben, damit sie störungsfrei miteinander kommunizieren können. Mindestens 30-50cm (bei meinen Tests).

Ich kann mich nur wiederholen:

Die Frequenz der Ausgabezeilen deutet an, dass du nicht korrekt mit dem RX NRF reden kannst.

Schau mal meinen - fehlerfrei funktionierenden - Aufbau:

Das war in voller Ausdehnung mal mit 10 NRF's... :slight_smile:

@lukas1995 ich schliesse mich @Whandall an. Mach erstmal etwas, was irgendwie geht.
Mich würde interessieren, ob Du unten rechts im serMon auch eine 9600 drin stehen hast.

Wenn ja, dann könntest Du dazu noch die debugAusgaben der lib aktivieren.
Damit habe ich vor einger Zeit mal experimentiert und war nach anfänglichen Schwierigkeiten gut...
Dann siehst Du auch, ob der Sender macht, was Du anforderst.

Danke an alle.. dann bestell ich mir mal den Kondensator und schau ob es läuft und den rest probiere ich auch einmal. dann würde ich mich nochmals melden. danke euch

Ich hätte mir lieber die Sockel besorgt. Das vermeidet unnötiges löten und garantiert eine saubere Anbindung der Versorgung. https://www.amazon.de/dp/B086TTZG94/

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.