Arduino Polska Forum
nRF24L01 - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: "Projekt Arduino Polska" (https://forum.arduinopolska.pl/dzial-projekt-arduino-polska)
+--- Dział: Zarys "Projektu Arduino Polska" (https://forum.arduinopolska.pl/dzial-zarys-projektu-arduino-polska)
+--- Wątek: nRF24L01 (/watek-nrf24l01--3131)

Strony: 1 2


nRF24L01 - Julek Rogalski - 18-09-2019

Witam!
Od dłuższego czasu męczę się z modułami nRF24L01. wgrywałem wiele różnych programów ale żaden nie działa. Ostatni był ze strony Arduino.   https://create.arduino.cc/projecthub/muhammad-aqib/nrf24l01-interfacing-with-arduino-wireless-communication-0c13d4
Kod nadajnika:
Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN         
const byte address[6] = "00001";     //Byte of array representing the address. This is the address where we will send the data. This should be same on the receiving side.
int button_pin = 2;
boolean button_state = 0;
void setup() {
pinMode(button_pin, INPUT);
radio.begin();                  //Starting the Wireless communication
radio.openWritingPipe(address); //Setting the address where we will send the data
radio.setPALevel(RF24_PA_MIN);  //You can set it as minimum or maximum depending on the distance between the transmitter and receiver.
radio.stopListening();          //This sets the module as transmitter
}
void loop()
{
button_state = digitalRead(button_pin);
if(button_state == HIGH)
{
const char text[] = "Your Button State is HIGH";
radio.write(&text, sizeof(text));                  //Sending the message to receiver
}
else
{
const char text[] = "Your Button State is LOW";
radio.write(&text, sizeof(text));                  //Sending the message to receiver
}
radio.write(&button_state, sizeof(button_state));  //Sending the message to receiver
delay(1000);
}
Kod odbiornika:
Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
boolean button_state = 0;
int led_pin = 3;
void setup() {
pinMode(6, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);   //Setting the address at which we will receive the data
radio.setPALevel(RF24_PA_MIN);       //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
radio.startListening();              //This sets the module as receiver
}
void loop()
{
if (radio.available())              //Looking for the data.
{
char text[32] = "";                 //Saving the incoming data
radio.read(&text, sizeof(text));    //Reading the data
radio.read(&button_state, sizeof(button_state));    //Reading the data
if(button_state == HIGH)
{
digitalWrite(6, HIGH);
Serial.println(text);
}
else
{
digitalWrite(6, LOW);
Serial.println(text);}
}
delay(5);
}
Próbowałem na 4 modułach i zero czegokolwiek. Proszę o pomoc.
Pozdrawiam!


RE: nRF24L01 - kaczakat - 19-09-2019

Jakie moduły, czy aby nie te o dalekim zasięgu? Jak zasilasz, jak podłączyłeś przycisk, dołożyłeś kondensator na NRF?
Tu wrzuciłem działający przykład https://forum.arduinopolska.pl/watek-komunikacja-nrf-24l01 , nie zadziała to przepnij w inne miejsce stykówki, wymień kable, sprawdź połączenia.


RE: nRF24L01 - Julek Rogalski - 19-09-2019

Tak, są to te moduły. Zasilam z arduino, podłączyłem przycisk tak jak na na stronie arduino i wlutowałem kondensator ceramiczny 10nF. Spróbuje z tym przykładem i dam znać


RE: nRF24L01 - kaczakat - 19-09-2019

Jak to są moduły ze wzmacniaczem to jednak nie postępujesz zgodnie z wymienionym poradnikiem, bo moduły masz inne. Te wymagają zasilania (bezpiecznie zakładając) 500mA, Arduino oferuje ze swojego regulatora 50mA.
Od strony programowej będzie to samo. Możesz wziąć 5V z Arduino, ale przez porządny regulator liniowy lub przetwornicę. Możesz sprawdzić mniejszej wydajności, ja akurat wziąłem taki bo był pod ręką. Zasilany z płytki Arduino prądowo nie wydalał. A przy testach zasięgu szału nie było w porównaniu do tych płytek bez wzmacniacza.


RE: nRF24L01 - Julek Rogalski - 19-09-2019

No to próbuje nie jestem pewien ale we wszystkich tutorialach było zailanie 3,3v a piny di sterowania na 5v. Nie spale w taki sposób modułu?


RE: nRF24L01 - kaczakat - 20-09-2019

Oczywiście spalisz jak podasz 5V na chip, 5V masz podać na przetwornicę 3.3V.


RE: nRF24L01 - semi - 20-09-2019

Czy temat nie jest powiązany z https://www.elektroda.pl/rtvforum/topic3609408.html
Jeśli tak, to RFM12B na 343 bez problemu zadziała przez 3 stropy, więcej nie sprawdzałem. Można się spodziewać, że 868 będzie miało mniejszy zasięg w tym przypadku, 2,4GHz jeszcze mniejszy.


RE: nRF24L01 - kaczakat - 20-09-2019

Gościu z elektrody tylko jęczy, że praca i dzieci. Palcem w bucie nie ruszył by coś samemu z tym zrobić, więc żadnego związku nie ma - nasz kolega z forum od paru miesięcy pokazuje różne próby działania w Arduino.


RE: nRF24L01 - Julek Rogalski - 20-09-2019

Próbowałem wszystkiego. Wgrywałem przykład pingpair dyn i wyszło mi to:


RF24/examples/pingpair_dyn/
ROLE: Ping out
STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1 = 0x0000000000 0x0000000000
RX_ADDR_P2-5 = 0x00 0x00 0x00 0x00
TX_ADDR = 0x0000000000
RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR = 0x00
RF_CH = 0x00
RF_SETUP = 0x00
CONFIG = 0x00
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = Disabled
PA Power = PA_MIN
Now sending length 1..
Niestety tylko tak mi si udało wkleić 

Próbowałem tego programu co tym temacie co podałeś i też nie działa. Na monitorze portu szeregowego nic nie ma.


RE: nRF24L01 - kaczakat - 20-09-2019

Co zrobiłeś w kwestii zasilania? Jak prosty przykład z komunikacją jednokierunkową Ci nie działa to brnięcie głębiej nie jest dobrym pomysłem.
Używasz tego z UNO? Ta biblioteka nie działała mi prawidłowo z STM, ale zapewne to nie jest Twój przypadek. Z nudów możesz spróbować biblioteki NRF Lite od Dave Parson, u mnie działa zarówno z AVR jak i STM. Najpier jednak zasilanie musi być prawidłowe 3.3 -3.6V o wydajności 500mA i do tego kondensator z 1000uF.