Forum: Mikrocontroller und Digitale Elektronik Arduino Funkverbindung mit mehren clients


von Digit (Gast)


Lesenswert?

Hallo,

ich würde gerne einen Arduino (Master) mit 4 Arduinos (Clients) 
verbinden, das alles über Funk. Der Master soll dabei nach und nach in 
einer Schleife die Clients abfragen.
Ich habe an die Bluetooth Module HC05 gedacht, aber Bluetooth 
funktioniert immer nur zwischen zwei Modulen.
Ich dachte daher, das der Master die Verbindung zum Client 1 trennt und 
dann eine Verbindung zum Client 2 Aufbaut... Das ist aber irgendwie 
unschön und funktioniert scheinbar nur über die Programmierschnittstelle 
in dem die Client Adresse eingetragen werden muss.

Übersehe ich irgendetwas?
Hat jemand eine Idee?

vielen Dank

von Mick (Gast)


Lesenswert?

Verwende lieber die nRF24L01+ Module.

von Arduinoquäler (Gast)


Lesenswert?

Mick schrieb:
> Verwende lieber die nRF24L01+ Module.

Ja, ist dafür bestens geeignet da er vielfältige Adressierung
und ein Acknowledge-Protokoll kennt.

von Mesh (Gast)


Lesenswert?

Und außerdem gibts für die nRF24L01 auch schon ein funktionierendes 
Mesh-Funknetz:

https://tmrh20.github.io/RF24Mesh/

von Wilhelm M. (wimalopaan)


Lesenswert?

Wie ist denn der RFM75 im Vergleich zum nRF24L01? Der RFM75 hat ja - 
wenn ich mich recht erinnere - 6 FiFos.

von Digit (Gast)


Lesenswert?

Danke für die Antwort, ich habe mir mal ein paar Module bestellt und 
versuche es dann damit...

von Pandur S. (jetztnicht)


Lesenswert?

Die Terminologie ist noch nicht ganz richtig.

Es gibt Client & Server.
Der Server wartet bis der Client etwas will, dann macht er das, und 
wartet wieder. Der Server macht von sich aus nichts. Der Client macht 
quasi den Ablauf.

Es gibt Master & Slave.
Der Master befiehlt, der Slave macht. Der Slave macht von sich aus 
nichts.

Ein Sensor misst und wartet bis etwas die Daten haben will. Ein Sensor 
kommuniziert nicht von selbst.

In einem Sensornetzwerk redet man von Master und Slave.
Bei Datenbanken und Internet von Client & Server

Server toent wuchtiger und teurer, deshalb der Unterschied, ist aber 
funktional dasselbe wie ein Slave.

von Kolja L. (kolja82)


Lesenswert?

Mesh schrieb:
> Und außerdem gibts für die nRF24L01 auch schon ein funktionierendes
> Mesh-Funknetz:
>
> https://tmrh20.github.io/RF24Mesh/

Gibt es das auch für die ESP8266?

von Cyblord -. (cyblord)


Lesenswert?

Kolja L. schrieb:
> Mesh schrieb:
>> Und außerdem gibts für die nRF24L01 auch schon ein funktionierendes
>> Mesh-Funknetz:
>>
>> https://tmrh20.github.io/RF24Mesh/
>
> Gibt es das auch für die ESP8266?

Klassisches WLan wie es die ESPs bereitstellen ist dafür nicht 
sonderlich gut geeignet, weil WLAN eine Client<->AP Infrastruktur ist.

von Einer K. (Gast)


Lesenswert?

Kolja L. schrieb:
> Gibt es das auch für die ESP8266?

Ja, sicherlich!
Schon lange in der ESP8266 API eingebaut.
Auch im Ardiono ESP Paket.

Google: "ESP8266 Mesh"

von Digit (Gast)


Lesenswert?

Hallo,

ich meine natürlich Master und Slave.
Ein Master und 4 Slaves.

Ich habe nun einmal zwei Arduino Nanos mit je einen RF24 Modul 
verbunden.

Ich habe folgende Lib eingebunden: https://github.com/TMRh20/RF24
wenn ich hier das Beispiel Programm: "GettingStarted" aufspiele, 
funktioniert es soweit.

Ich habe dann einmal ein eigenes kleines Programm geschrieben:

Sender:
1
#include <SPI.h>
2
#include <nRF24L01.h>
3
#include <RF24.h>
4
5
RF24 radio(7, 8); // CE, CSN
6
7
const byte rxAddr[6] = "00001";
8
int i;
9
void setup()
10
{
11
  i = 0;
12
  radio.begin();
13
  radio.setRetries(15, 15);
14
  radio.openWritingPipe(rxAddr);
15
  
16
  radio.stopListening();
17
18
  Serial.begin(9600);
19
}
20
21
void loop()
22
{
23
  const char text[] = "Hallo";
24
  bool ok = radio.write(&text, sizeof(text));
25
26
  if(ok)
27
    Serial.println("gesendet");
28
  else
29
    Serial.println("Fehler");
30
  
31
  delay(1000);
32
}

Empfänger:
1
#include <SPI.h>
2
#include <nRF24L01.h>
3
#include <RF24.h>
4
5
RF24 radio(7, 8);
6
7
const byte rxAddr[6] = "00001";
8
9
void setup()
10
{
11
  while (!Serial);
12
  Serial.begin(9600);
13
  
14
  radio.begin();
15
  radio.openReadingPipe(0, rxAddr);
16
  
17
  radio.startListening();
18
19
  Serial.println("Start");
20
}
21
22
void loop()
23
{
24
  if (radio.available())
25
  {
26
    char text[32] = {0};
27
    radio.read(&text, sizeof(text));
28
    
29
    Serial.println(text);
30
  }
31
}

Ich hatte es einmal geschafft "Hallo" ein oder zweimal zu übertragen, 
aber eigentlich funktioniert es nicht. Es wird auf der Sender Seite auch 
immer nur "Fehler" ausgegeben.

kann hier mal jemand rüber gucken und mir bitte helfen?

danke

von Digit (Gast)


Lesenswert?

Nachtrag:
Angeschlossen ist es am Arduino Nano

GND -> GND
3,3V -> Versorgung
D7 -> CE
D8 -> CSN
D10 -> IRQ
D11 -> MOSI
D12 -> MISO
D13 -> SCK

ich weiß das an der D13 auch eine auf dem Arduino Nano Board befindliche 
LED angeschlossen ist, kann diese ein Problem darstellen?

von NRFTestGuy (Gast)


Lesenswert?

Digit schrieb:
> ich weiß das an der D13 auch eine auf dem Arduino Nano Board befindliche
> LED angeschlossen ist, kann diese ein Problem darstellen?

Nein, aber die üblichen fehlenden Abblock-Kondensatoren.

Die Leute bei denen "es geht" behaupten man bräuchte sie nicht.

Die Leute bei denen es nicht geht sagen "die anderen brauchen
auch keine Abblock-Kondensatoren".

Seltsam ist nur dass meine Schaltungen alle einwandfrei funktionieren.
Allerdings habe ich keine Kosten, Mühe und Arbeit gescheut und überall
mindestens ein Kermaik-C und einen Elko verbaut. Das war teuer!

Beitrag "NRF24L01 - Testprogramm für Windows PC"
Beitrag "NRF24L01+ test program for Arduino Uno"
Beitrag "NRF24L01+ test program for Arduino Mega"

Fliegende Aufbauten sind oft auch sehr hilfreich gegen
einwandfreies funktionieren.

von Digit (Gast)


Lesenswert?

ok, es lag an der lib, die die ich verwendet hat funktioniert irgendwie 
nicht...


habe jetzt allerdings eine andere Frage:
Ich habe zum Beispiel drei Module A, B und C.
Kann ich nun ein Netzwerk der Datenübertragen wie folgt aufbauen?

A <-> B <-> C <-> A


Würde es mit der folgenden Zeile funktionieren?
1
  radio.openReadingPipe(0, rxAddr);

in dem die "0" für die einzelnen Verbindungen verwendet wird?
Ich finde dazu leider nichts...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.