04-08-2015, 01:01
Poradnik jak za pomocą modułów nRF24l01+ komunikować ze sobą 2 uc Arduino .
niestety zasięg w pomieszczeniach to około 15-20 m 3-4 ściany , na otwartej przestrzeni producent podaje około 100 m przy idealnych warunkach Z własnego doświadczania wiem że ten zasięg to 50-60 m ale za 5zł nie można spodziewać się cudów
Moduły nRF pracują w paśmie 2.4 GHz
Zasilanie 1.9v- 3,3v
Interfejs SPI tolerancja do 5v
Podłączenie :
1. GDN---->GDN (masa)
2. VCC----> 3,3v !!
3. CE----> Pin 9
4. CSN----> Pin 10
5. SCK----> Pin 13
6. MOSI----> Pin 11
7. MISO----> Pin 12
8. IRQ----> Pin 2 ( opcjonalnie , pin służy do wzbudzania)
Uwaga!! jeśli moduły nie komunikują się ze sobą musimy dołożyć 2 kondensatory 10uF między VCC a GDN
Przykładowy Program do wł/wył diody :
Nadajnik:
Odbiornik :
niestety zasięg w pomieszczeniach to około 15-20 m 3-4 ściany , na otwartej przestrzeni producent podaje około 100 m przy idealnych warunkach Z własnego doświadczania wiem że ten zasięg to 50-60 m ale za 5zł nie można spodziewać się cudów
Moduły nRF pracują w paśmie 2.4 GHz
Zasilanie 1.9v- 3,3v
Interfejs SPI tolerancja do 5v
Podłączenie :
1. GDN---->GDN (masa)
2. VCC----> 3,3v !!
3. CE----> Pin 9
4. CSN----> Pin 10
5. SCK----> Pin 13
6. MOSI----> Pin 11
7. MISO----> Pin 12
8. IRQ----> Pin 2 ( opcjonalnie , pin służy do wzbudzania)
Uwaga!! jeśli moduły nie komunikują się ze sobą musimy dołożyć 2 kondensatory 10uF między VCC a GDN
Przykładowy Program do wł/wył diody :
Nadajnik:
Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void){
pinMode(4,INPUT_PULLUP); // Tact switch nr1 , podciagniety do stanu wysokiego
pinMode(5,INPUT_PULLUP); // Tact switch nr2
radio.begin();
radio.openWritingPipe(pipe);
}
void loop () {
if (digitalRead(4) == LOW) { // jesli odczyt na pinie 4 (przycisk nr 1 OFF) jest niski to wykonaj..
msg[0] = 110; // wpisywanie do zmiennej msg wartosci 110
radio.write(msg, 1); // Wysylanie wartosci ze zmiennej msg
delay(50);
radio.write(msg, 1); // wysylamy ponownie po 50ms poniewaz czasami nasza "wiadomosc" nie dociera
}
if (digitalRead(5) == LOW){ // przycisk nr 2 ON
msg[0] = 111; // inna wartosc w tym przypadku 111
radio.write(msg, 1); // wysylamy wartosc ze zmiennej msg
delay(50);
radio.write(msg, 1); // wysylamy ponownie po odczekaniu 50ms poniewaz nie zawsze "wiadomosc" dociera do obiornika
}
}
Odbiornik :
Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void){
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
pinMode(7, OUTPUT); // dioda
}
void loop(void){
if (radio.available()){
bool done = false;
while (!done){
done = radio.read(msg, 1);
Serial.println(msg[0]); // wyswietlamy na serial monitor wartosc ze zmniennej msg
if (msg[0] == 111){delay(10);digitalWrite(7, HIGH);} // jesli otrzymamy wartosc 111 to czekamy 10ms i ustawiamy stan wysoki na pinie 7
if (msg[0] == 110){delay(10);digitalWrite(7, LOW);} // jesli otrzymamy wartosc 110 czekamy 10ms i ustaiwamy stan niski na pinie 7
delay(10);}}
else{Serial.println("Nic nie dostałem :(");}}