geen communicatie tussen twee arduino's nrf24l01

Arduino specifieke Software
Berichten: 21
Geregistreerd: 25 Mei 2016, 10:21

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor tim- » 26 Mei 2016, 08:45

De bovenste transmitter receiver code werkt :D :D
ik heb nu de volgende opstelling zoals aangegeven dus met 2 arduino uno's een knop en een led.

ik ga zo meteen proberen de nrf24l01s aan te sluiten op de arduino mini (pro) en die laten communiceren!

BEDANKT!!
zodra ik dit werkend heb ga ik eens kijken naar de code om met meerdere nrf24l01s te communiceren op de manier die je als laatst genoemd hebt!

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor nicoverduin » 26 Mei 2016, 09:56

Da's mooi.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 21
Geregistreerd: 25 Mei 2016, 10:21

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor tim- » 26 Mei 2016, 10:56

Heb nu de receiver op de mini pro en dat werk ook (maak nu gebruik van 1 transmitter 2 receivers) nu ga ik dit nog proberen om te draaien. 2 transmitters 1 receiver

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor nicoverduin » 26 Mei 2016, 11:14

op zich zou dat wel moeten kunnen, maar dan moet je ze wel allemaal op dezelfde pipe zetten en hopen dat je niet op hetzelfde moment zit te zenden. Dan krijg je het effect wat ze nu steeds meer op de WiFi krijgen. Teveel routers in de buurt die continu moeten hoppen naar een ander sterker kanaal. Blijft er niks van je bandbreedte over.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 21
Geregistreerd: 25 Mei 2016, 10:21

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor tim- » 26 Mei 2016, 14:00

als ik dit probeer krijg je inderdaad afwijkende waardes
dan maar beginnen met 1 op 1
ik wil niet constant meten maar om een bepaalde tijd (ongeveer 5 minuten of 10 minuten)
Op dit moment probeer ik het met een delay(5000) (5 seconden) gewoon om te testen.. uiteraard krijg je deze delay nooit gelijk aan die van de receiver

nu dacht ik aan een timer.. maar ook daar ga je het probleem tegen komen dat de receiver de transmitter "mis" kan lopen.. Iemand een idee hoe ik dit het beste op kan lossen zodat ik 100% voorkom dat ze elkaar missen..

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor nicoverduin » 26 Mei 2016, 14:43

Waarom zou je het jezelf moeilijk maken? Je kan het probleem ook omdraaien. In feite wil je dat meerdere sensoren hun data door sturen toch? Elk met een eigen Arduino (dure oplossing overigens). Je kan ook een zender nemen en 2 ontvangers. Je geeft elke ontvanger een ID. Je stuur via de zender aan alle ontvangers het ID waarvan je de data wilt hebben. Die doen dan hun meting en vervolgens vraag je aan de volgende voor de data.
Dan bepaalt de zender wie er data door stuurt. Zo heb ik dat indertijds gedaan met een UNO als webserver en elke device default in ontvangstmode.
in pseudoe code:
cpp code
ONTVANGER

setup()
Ga in receiveModus.

loop()
Als er een bericht is ontvangen DAN
Als ontvangen DeviceID = mijn ID DAN
lees sensoren
Ga in sendModus
Verstuur bericht
Ga in ontvangstMoodus
Einde Als
Einde Als

ZENDER

setup()
Start Timer // timer om eens in de zoveel tijd alle devices te pollen
index DeviceID's = 1 // begin bij de eerste deviceID uit lijst
Ga in zendModus

loop()
ALS timer is verlopen
ZOLANG niet alle devices verwerkt
Stuur bericht naar alle devices met DeviceID[index]
ga in OntvangstModus
start TimeOutTimer
ZOLANG TimeOutTimer niet is verlopen
ALS bericht is ontvangen DAN
ALS DeviceID = DeviceID[index]
Verwerk ontvangen data uit bericht
break uit te timeout cylus
EINDE ALS
verhoog index
EINDE ALS
EINDE ZOLANG
EINDE ZOLANG
Ga in zendModus
start timer opnieuw
EINDE ALS


Vwb. de kosten een NodeMCU of Wemos-D1 zouden alternatieven kunnen zijn voor sensoren omdat je feitelijk ongeveer hetzelfde bereik hebt als die nRF24L01's. Daarna kan je gebruik maken van websockets waardoor je over wifi de connectie maakt en dan via poorten een pijplijntje maakt tussen de zender en ontvanger. Het mooie van de websockets is dat als deze wegvallen de connectie automatisch hersteld kan worden. En kun alles in slaap mikken tot je iets nodig hebt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 21
Geregistreerd: 25 Mei 2016, 10:21

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor tim- » 02 Jun 2016, 12:48

sorry voor het vertragende antwoord.. was zo aan het proberen en met andere dingen bezig dat ik niet meer aan het forum heb gedacht :oops:
maar na een aantal dagen weer proberen... kwam ik niet veel verder wat betreft de data zenden en ontvangen met de nrf24l01..

Ik heb nu meerdere fora gelezen en alles bij elkaar kwam het bij mij zo over:

Met pipes is de meest gangbare en betrouwbare manier van data sturen is. ZONDER dat de data van andere pipes gelezen word.

Dit is alleen bij mij niet het geval... Simpel voorbeeld code:

TX1
cpp code
// --------------- llibrary's voor transmitter ---------------------------------
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include "printf.h" // comment this out if no radio info on serial
#include <SPI.h>


// ---------------------------------- Variabelen voor transmitter ---------------------------------
float temp1;

// LET OP WELKE CE - CSN PIN JE GEBRUIKT!!
RF24 radio(9, 10);
const uint64_t pipes[6] = { 0xE8E8F0F0E1LL, 0xE8E8F0F0E2LL, 0xE8E8F0F0E3LL, 0xE8E8F0F0E4LL, 0xE8E8F0F0E5LL, 0xE8E8F0F0E6LL };

// ---------------------- setup ------------------------------
void setup(void) {
Serial.begin(115200); // start the serial
Serial.println("Start zender");
radio.begin(); // start the radio
radio.openWritingPipe(pipes[1]); // open our pipe for communication
}

// ------------------------------------- loop ---------------------------

void loop(void) {

temp1 = 11.11; // stuur 11.11
radio.write(&temp1, sizeof(temp1));

}


TX2
cpp code
// --------------- llibrary's voor transmitter ---------------------------------
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include "printf.h" // comment this out if no radio info on serial
#include <SPI.h>


// ---------------------------------- Variabelen voor transmitter ---------------------------------
float temp2;

// LET OP WELKE CE - CSN PIN JE GEBRUIKT!!
RF24 radio(9, 10);
const uint64_t pipes[6] = { 0xE8E8F0F0E1LL, 0xE8E8F0F0E2LL, 0xE8E8F0F0E3LL, 0xE8E8F0F0E4LL, 0xE8E8F0F0E5LL, 0xE8E8F0F0E6LL };

// ---------------------- setup ------------------------------
void setup(void) {
Serial.begin(115200); // start the serial
Serial.println("Start zender");
radio.begin(); // start the radio
radio.openWritingPipe(pipes[2]); // open our pipe for communication
}

// ------------------------------------- loop ---------------------------

void loop(void) {

temp2 = 22.22; // stuur 22.22
radio.write(&temp2, sizeof(temp2));

}


RX
cpp code
// --------------- llibrary's voor receiver ---------------------------------
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include "printf.h"
#include <SPI.h>

// ---------------------------------- Variabelen voor receiver ---------------------------------
float temp1, temp2;

// LET OP WELKE CE - CSN PIN JE GEBRUIKT!!
RF24 radio(46, 48);
const uint64_t pipes[6] = { 0xE8E8F0F0E1LL, 0xE8E8F0F0E2LL, 0xE8E8F0F0E3LL, 0xE8E8F0F0E4LL, 0xE8E8F0F0E5LL, 0xE8E8F0F0E6LL };
// ---------------------- setup ------------------------------
void setup() {

Serial.begin(115200);

//--------------SETUP nRF24L01------------------------
Serial.println("start ontvanger");
radio.begin(); // start the radio
radio.openReadingPipe(1, pipes[1]);
radio.openReadingPipe(2, pipes[2]);
radio.startListening();
}

// ------------------------------------- loop ---------------------------

void loop() {
if (radio.available()) {
// Waarde temp1
radio.read(&temp1, sizeof(temp1));
Serial.println(temp1); // zou 11.11 moeten zijn

// waarde temp2
radio.read(&temp2, sizeof(temp2));
Serial.println(temp2); //zou 22.22 moeten zijn

}

}


Dit is de output dat ik krijg van de receiver in de serial monitor
Code: Alles selecteren
11.11
0.00
11.11
0.00
11.11
0.00
22.22
0.00
22.22
0.00
11.11
0.00
11.11


Iemand enig idee waar die 0.00 vandaan komt en waarom de output van de rx niet gewoon:
Code: Alles selecteren
11.11
22.22
11.11
22.22
11.11
22.22
11.11
22.22
is?

Heb ook nog code gevonden waar ze een
Code: Alles selecteren
uint8_t pipe_num
aanmaakte en met deze code gingen kijken
Code: Alles selecteren
radio.available(&pipe_num)
dit heb ik ook geprobeerd maar kreeg hetzelfde resultaat... misschien heb ik daar een fout gemaakt? heb helaas de code niet meer.. maar als dat de manier is waardoor het zou moeten lukken ga ik dat zeker weer opnieuw maken.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor nicoverduin » 02 Jun 2016, 13:19

http://tmrh20.github.io/RF24/classRF24. ... 5faa07620f
Heb je dit al eens gelezen? Staat een voorbeeld hoe je available met read moet gebruiken:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 21
Geregistreerd: 25 Mei 2016, 10:21

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor tim- » 02 Jun 2016, 13:24

Nee daar ben ik gek genoeg nog niet op uit gekomen.. ondanks dat mijn zoekterm toch echt wel in die richting was...

ik zal het gaan lezen en wat uitproberen :D hopen dat ik er uit kom

Berichten: 21
Geregistreerd: 25 Mei 2016, 10:21

Re: geen communicatie tussen twee arduino's nrf24l01

Berichtdoor tim- » 02 Jun 2016, 13:33

True if there is a payload available, false if none is

houd dat in dat je de payload optie van de library moet gebruiken? of payload in het algemeen of er iets gestuurd word of niet?

als het het eerste is moet ik daar eens naar gaan kijken.. ik stuur nu (niet in de code op het forum) gewoon de waardes dat word uitgelen door de sensor zonder wat te doen aan de payload van de library..


@EDIT:
of je probeert het gewoon en kijkt even iets langer hoe het werkt :P
Ben er al achter en de waardes blijven nu netjes van elkaar gescheiden :D

Wederom super bedankt voor je reactie :D

Merk nu trouwens wel dat de waardes wat trager bijgewerkt worden op het scherm.. heb je daar toevallig ook een oplossing voor?? dit komt omdat het nu eerst alles uitvoert dat te maken heeft met pipe1 en dan pas met pipe 2 gok ik.. is verder geen probleem maar heb natuurlijk het liefst zo min mogelijk "vertraging"

Heb hier natuurlijk zo snel zelf nog niet over nagedacht en ga dit zeker nog doen maar als u iets weet dan hoor ik dat graag :D
Laatst gewijzigd door tim- op 02 Jun 2016, 14:10, in totaal 1 keer gewijzigd.

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten