Skocz do zawartości

Moduł sieciowy nRF24L01 - komunikacja UNO z Nano


Bonkers

Pomocna odpowiedź

Witam,

Mam pewien problem z komunikacją pomiędzy dwoma mikrokontrolerami, z powodów finansowych określonych projekcie muszę wykonać go na klonach arduino.
W tym celu podłączyłem do każdego arduino moduł sieciowy nRF24L01, zgodnie ze schematami występującymi na różnych tutorialach w necie. Tak aby z Nano zrobić nadajnik, a z Uno odbiornik. Do każdego z arduino wgrałem poniższe przykładowe programy, które zamieszczam poniżej. Niestety transmisja danych w tym kierunku nie zadziałała - nano wysyłało dane, natomiast uno nie chciało ich odbierać. W drugą stronę było już lepiej, uno zadziałało i zaczęło przesyłać dane do nano, które je odbierało. Dla sprawdzenia czy dany moduł działa dobrze podłączyłem go do oryginału Arduino UNO i wtedy komunikacja w obu kierunkach działała bez zarzutu. Teraz rodzi się takie pytanie czy jest jakieś rozwiązanie aby komunikacja nano z klonem uno działała poprawnie w obu kierunkach? Czy po prostu będe musiał zakupić nowy egzemplarz?  Albo w kodzie trzeba coś zmienić?

Odbieranie danych:

#include <SPI.h>  
#include "RF24.h" 

RF24 myRadio (7, 8); 
struct package
{
  int id=0;
  float temperature = 0.0;
  char  text[100] ="empty";
};

byte addresses[][6] = {"0"}; 



typedef struct package Package;
Package data;

void setup() 
{
  Serial.begin(9600);
  delay(1000);

  myRadio.begin(); 
  myRadio.setChannel(115); 
  myRadio.setPALevel(RF24_PA_MAX);
  myRadio.setDataRate( RF24_250KBPS ) ; 
  myRadio.openReadingPipe(1, addresses[0]);
  myRadio.startListening();
  delay(1000);
  
}


void loop()  
{

  if ( myRadio.available()) 
  {
    while (myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
    }
    Serial.print("\nPackage:");
    Serial.print(data.id);
    Serial.print("\n");
    Serial.println(data.temperature);
    Serial.println(data.text);
  }

  
}

Wysyłanie:

#include <SPI.h>  
#include "RF24.h"

RF24 myRadio (7, 8);
byte addresses[][6] = {"0"};

struct package
{
  int id=1;
  float temperature = 18.3;
  char  text[100] = "Text to be transmitted";
};


typedef struct package Package;
Package data;


void setup()
{
  Serial.begin(9600);
  delay(1000);
  myRadio.begin();  
  myRadio.setChannel(115); 
  myRadio.setPALevel(RF24_PA_MAX);
  myRadio.setDataRate( RF24_250KBPS ) ; 
  myRadio.openWritingPipe( addresses[0]);
  delay(1000);
}

void loop()
{
  myRadio.write(&data, sizeof(data)); 

  Serial.print("\nPackage:");
  Serial.print(data.id);
  Serial.print("\n");
  Serial.println(data.temperature);
  Serial.println(data.text);
  data.id = data.id + 1;
  data.temperature = data.temperature+0.1;
  delay(1000);

}

 

Link do komentarza
Share on other sites

Dolutowałeś kondensatory do nRF24L01? Jak nie to dorzuć jakieś po 100n między VCC a GND, najlepiej wprost na płytkę nRF. Same moduły najlepiej też zasilać z pewnego źródła 3.3V, a tylko GND i linie komunikacyjne dajesz z Arduino, najlepiej przez konwerter poziomów logicznych. Oryginał wcale nie jest potrzebny, ale może ma lepsze parametry zasilania i stąd problemy na klonie. Zobacz też to: adapter .

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.