Skocz do zawartości

NRF24L01 problem z adresacją


Pomocna odpowiedź

Ostatnio staram się okiełznać radioodbiornik nRF24L01. Udało mi się z sukcesem spiąć dwa moduły arduino. Zaczęłem mieć problemy gdy chciałem zrobić klasyczny "Hello World" między arduino i raspberry pi. Korzystałem z tutoriala:

http://invent.module143.com/daskal_tutorial/raspberry-pi-3-wireless-pi-to-arduino-communication-with-nrf24l01/

I nie działa. Kod testowałem na dwóch różnych modułach: z zewnętrzną antenta i bez. Kod uruchamiałem z poziomu admina. Anteny miałem od 20 do 100cm od siebie. Może moja pinolgoia jest zła, ale wykonałem ją zgodnie z ze schematem na stronie:

nRF24L01 <-> Nr Pin PI*

VCC <-> 1

GND <-> 6

CE <-> 11

CSN <-> 24

SCK <-> 23

MISO <-> 21

MOSI <-> 19

Specjalnie nie podaje GPIO bo na różnych schematach widziałem inne opisy wyjść, dlatego uznałem, że po numerze pinu będzie najbardziej adekwatne. I właśnie jest to jedna z rzeczy która mnie zastawia w kontekście linijki kodu

radio.begin(0, 17)

Bo ona totalnie nie zgadza mi się z tymi pinologiami które widziałem. Lecz z drugiej strony nie wiem czy ona ma wpływ na adresacje.

Jednak coś mi nie pasuje gdyż używam prawie dwóch identycznych kodów które generują dwa różne adresy. Kod i wyjście z parametrami na dole

import RPi.GPIO as GPIO 
from lib_nrf24 import NRF24
import time
import spidev

GPIO.setmode(GPIO.BCM)

pipes = [[0xE8, 0xE8, 0xF0, 0xF0, 0xE1], [0xF0, 0xF0, 0xF0, 0xF0, 0xE1]]
radio = NRF24(GPIO, spidev.SpiDev())
radio.begin(0, 17)

radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)

radio.setAutoAck(True)
radio.enableDynamicPayloads()
radio.enableAckPayload()

radio.openReadingPipe(1, pipes[1])
radio.printDetails()
radio.startListening()
i = 0

while True:

   print(i)
   i = i + 1
   while not radio.available(0):
       time.sleep(1/100)

   time.sleep(1)
   receivedMessage = []
   radio.read(receivedMessage, radio.getDynamicPayloadSize())
   print("Received: {}".format(receivedMessage))

   print("Translating our received Message into unicode chcaracters.... ")
   string = ""

   for n in receivedMessage:
       if (n >= 32 and n <= 126):
           string += chr(n)
   print("Our received messgae decodes to: {}".format(string))
STATUS	 = 0x03 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=1 TX_FULL=1
RX_ADDR_P0-1	 =
[b] 0x000000f018 0x000000001e[/b]
RX_ADDR_P2-5	 =
0xf8
0xf9
0xf9
0xf9

TX_ADDR		 =
0xfdfdfdfdfd
RX_PW_P0-6	 =
0x00
0x0c
0x00
0x00
0x00
0x00

EN_AA		 =
0x0f

EN_RXADDR	 =
0x00

RF_CH		 =
0x18

RF_SETUP	 =
0x00

CONFIG		 =
0x03

DYNPD/FEATURE	 =
0x03
0x01

Data Rate	 = 1MBPS
Model		 = nRF24L01
CRC Length	 = Disabled
PA Power	 = PA_MIN
import RPi.GPIO as GPIO
from lib_nrf24 import NRF24
import time
import spidev

GPIO.setmode(GPIO.BCM)

pipes = [[0xE8, 0xE8, 0xF0, 0xF0, 0xE1], [0xF0, 0xF0, 0xF0, 0xF0, 0xE1]]
radio = NRF24(GPIO, spidev.SpiDev())
radio.begin(0, 17)

radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)

radio.setAutoAck(True)
radio.enableDynamicPayloads()
radio.enableAckPayload()

radio.openReadingPipe(1, pipes[1])
radio.printDetails()
radio.startListening()

while(1):
   # ackPL = [1]
   while not radio.available(0):
       time.sleep(1 / 100)
   receivedMessage = []
   radio.read(receivedMessage, radio.getDynamicPayloadSize())
   print("Received: {}".format(receivedMessage))

   time.sleep(1)

   print("Translating the receivedMessage into unicode characters")
   string = ""
   for n in receivedMessage:
       # Decode into standard unicode set
       if (n >= 32 and n <= 126):
           string += chr(n)
   print("Out received message decodes to: {}".format(string))
STATUS	 = 0x03 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=1 TX_FULL=1
RX_ADDR_P0-1	 =
0x000000001e 0x000000001e
RX_ADDR_P2-5	 =
0xf8
0xf9
0xf9
0xf9

TX_ADDR		 =
0xfdfdfdfdfd
RX_PW_P0-6	 =
0x00
0x0c
0x00
0x00
0x00
0x00

EN_AA		 =
0x0f

EN_RXADDR	 =
0x00

RF_CH		 =
0x18

RF_SETUP	 =
0x00

CONFIG		 =
0x03

DYNPD/FEATURE	 =
0x03
0x01

Data Rate	 = 1MBPS
Model		 = nRF24L01
CRC Length	 = Disabled
PA Power	 = PA_MIN

Na dole dla formalności kod po stronie Adruino

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

RF24 radio(9, 10); // CE, CSN
int i = 0; 

void setup() {
 radio.begin();
 radio.setPALevel(RF24_PA_MAX);
 radio.setChannel(0x76);
 radio.openWritingPipe(0xF0F0F0F0E1LL);
 radio.enableDynamicPayloads();
 radio.powerUp();
 Serial.begin(9600);
 Serial.println("zakonczony intit");
}

void loop() {

 if(i > 30000) {
   i = 0; 
 }

 const char text[] = "Hello World";
 radio.write(&text, sizeof(text));
 Serial.print("wyslano wiadomosc: ");
 Serial.println(i);
 i++;
 delay(1000);

}

__________

Komentarz dodany przez: Treker

Link to post
Share on other sites

Zadając pytanie na forum malinki

Udało się rozwiązać problem.

Jeżeli ktoś będzie próbował używać tej biblioteki do obsługi NRF24L01 w Ras PI 3

https://github.com/Blavery/lib_nrf24

to w obecnej wersji (tj. 0.3 Beta) powinien dopisać do linijki numer 374 w lib_nrf24.py taktowanie SPI na 8 MHz

def begin(self, csn_pin, ce_pin=0):   # csn & ce are RF24 terminology. csn = SPI's CE!
       # Initialize SPI bus..
       # ce_pin is for the rx=listen or tx=trigger pin on RF24 (they call that ce !!!)
       # CE optional (at least in some circumstances, eg fixed PTX PRX roles, no powerdown)
       # CE seems to hold itself as (sufficiently) HIGH, but tie HIGH is safer!
       self.spidev.open(0, csn_pin)
       self.spidev.max_speed_hz=8000000
       self.ce_pin = ce_pin

Wtedy transmisja będzie działać

Kolejna uwaga przy używaniu tej biblioteki po stronie malinki to unikać przesyłania liczb zmienno przecinkowych.

  • Pomogłeś! 1
Link to post
Share on other sites

@Rutra mamy tu idealny dowód na to, że warto na dzielić się na forach rozwiązaniami swoich problemów - temat założony ponad 2 lata temu, a nadal okazał się pomocny 😉

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.