Witajcie przyjaciele, mam nadzieję, że wszystko u was w porządku i dobrze się bawicie.
Dzisiaj podzielę się z wami problemem i jego rozwiązaniem. Kilka dni temu kupiłem nowe moduły NRF24L01, gdyż były mi potrzebny do projektu. Tak więc dzisiaj, kiedy zacząłem nad nimi pracować, napotkałem bardzo dziwny problem. Kiedy połączyłem mój NRF24L01 z Arduino i załadowałem do nich kody nadawcze i odbiorcze, nie mogłem uzyskać niczego na moim terminalu szeregowym, jak wyjaśniłem w moim poprzednim poście Interfejs NRF24L01 z Arduino. Było to dla mnie dość dziwne, ponieważ pracowałem z tym modułem wiele razy i nigdy wcześniej nie sprawiał mi on kłopotów. Więc pracuję nad tym, ale bez powodzenia. Zmieniłem nawet moje moduły RF, ponieważ myślałem, że mogą być wadliwe, ale nadal bez rezultatu.
Więc następną rzeczą, która przyszła mi do głowy jest wgranie przykładu Getting Started z biblioteki RF24, który również podałem w moim poprzednim poście Interfejs NRF24L01 z Arduino i teraz, kiedy sprawdziłem terminal szeregowy, otrzymałem następujący błąd:
Failed, response timed out (niepowodzenie, upłynął limit czasu odpowiedzi).
Zrzut ekranu tej odpowiedzi wygląda następująco:
Jak widać na powyższym rysunku, w ostatnich linijkach dostajemy błąd, treści "Now sending 4679…failed. Failed, response timed out” (Wysyłanie 4679...nie powiodło się. Niepowodzenie, upłynął limit czasu odpowiedzi). Tak więc, to był problem, który napotykałem przez prawie pół godziny, a potem w końcu zdałem sobie sprawę, czego mi brakuje i jak to rozwiązać. Zanim przejdę do rozwiązania, pozwólcie, że najpierw opowiem wam o typach tych modułów.
Typy modułów NRF24L01
Kiedy napotkałem ten problem, zamiast wielu wysiłków i nie mogąc go rozwiązać, w końcu pomyślałem o użyciu starego modułu. Szukałem go zatem i na szczęście znalazłem jeden z nich.
Tak więc, teraz podłączyłem nowy moduł z innym Arduino i sprawdziłem właściwości obu z nich (tj. starego i nowego) i w tym celu po prostu załadowałem poniższy szkic do obu moich płytek Arduino i otworzyłem terminal szeregowy.
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
typedef enum { role_ping_out = 1, role_pong_back } role_e;
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
role_e role = role_pong_back;
void setup(void)
{
Serial.begin(57600);
printf_begin();
radio.begin();
radio.setRetries(15,15);
radio.openReadingPipe(1,pipes[1]);
radio.startListening();
radio.printDetails();
}
void loop(void)
{
}
W tym szkicu, po prostu wyświetlam szczegóły modułu NR24L01. Zatem załadowałem powyższy szkic w obu Arduino, jeden ze starym modułem NRF24L01 i jeden z nowym, po czym otrzymałem poniższą odpowiedź.
Teraz miałem powód, dla którego nie dostaję odpowiedzi na ten sam kod, który działał na starym, ponieważ stary model modułu to NRF24L01, podczas gdy nowy moduł to NRF24L01+, który jest nieco inny niż NRF24L01.
Więc to jest powód, dlaczego ciągle dostawałem błąd "Failed, response timed out" dla tego modułu. Zatem spójrzmy teraz jak rozwiązać ten problem.
Jak rozwiązać problem "Failed, response timed out" dla NRF 24L01+ z Arduino
Tak więc, kiedy już wiedziałem, że mój moduł to NRF24L01+, a nie NRF24L01 musiałem połączyć NRF24L01+ z Arduino.
Zacząłem więc szukać w sieci i zdobyłem jego specyfikację, co bardzo mi pomogło i w końcu udało mi się ją zdobyć.
NRF24L01+ pobiera więcej prądu niż NRF24L01 podczas startu i Arduino nie było w stanie mu tego prądu dostarczyć. To jest powód, dla którego NRF24L01+ nie mógł się zainicjować i nie mógł wysłać ani odebrać odpowiedzi.
Tak więc, aby usunąć ten problem, po prostu umieściłem Kondensator 100uF pomiędzy 3,3 V i GND Arduino i to załatwiło sprawę.
Szczegółowy schemat układu jest następujący:
Zatem to jest to proste rozwiązanie, które zajęło mnie na około godzinę. Ale w końcu się udało.
Jak widać na powyższym rysunku, jest to dokładnie taki sam schemat układu, a jedynym dodatkiem jest kondensator umieszczony pomiędzy 3,3 V a GND.
Po tym wgrałem oba kody dla odbiornika i nadajnika, które już zamieściłem w moim starym poście interfejs NRF24L01 z Arduino i zadziałało jak marzenie.
To wszystko na dzisiaj, spotkamy się w następnym poradniku już wkrótce.
Trzymajcie się!