Trabajando en mi nuevo proyecto, me estuve peleando con la Raspberry Pi y el módulo nRF24l01. La idea era conectar la Raspberry Pi 3 a un Arduino a través de nRF24l01, y de esta manera poder enviar datos de uno a otro. De hecho, era suficiente con que la Rpi3 recibiera datos.

Sin embargo, me encontré con que existen multitud de librerías ya obsoletas, o que no funcionan como deberían con la última versión de Raspbian. Así, que para ahorraros tiempo, voy a haceros un resumen tutorial de cómo conectar la Raspberry Pi 3 a un nRF24l01.

Foto del nRF24l01

Componentes necesarios

Conexión Rpi3 con nRF24L01

La conexión entre la Raspberry pi 3 y el nRF24L01 es un poco caótica, pero si la hacéis despacio no tendréis ningún problema. A continuación os dejo una imagen con las conexiones. Os recomiendo hacer esta operación con la raspberry pi apagada. Y antes de conectarla a la alimentación, aseguraos de la conexión de los pines de alimentación (cables rojo y negro)

Además, a veces es necesario colocar un condensador de 1-10 uF entre las patas de alimentación del RF24. En mi caso lo soldé directamente en los propios pines. Este condensador se conecta para ayudar con los picos de corriente que tiene el transmisor, y que a veces la fuente es incapaz de proporcionar.

Instalar librería RF24 en Raspberry Pi

Lo que más tiempo me ha llevado es encontrar la librería que funcione bien y a la primera. Al principio intenté instalar una librería que fuera únicamente Python. Sin embargo, no encontré nada más sencillo que lo que os añado aquí, aunque parezca mentira…

Activar SPI con raspi-config

Lo primero que necesitamos es saber cómo activar el interfaz SPI en la Raspberry Pi, ya que es el tipo de comunicación que utiliza el nRF24l01. Para ello, tenemos que abrir la aplicación raspi-config:

sudo raspi-config

Dentro de esta aplicación tenemos que navegar a través de: ‘Interfacing Options’ -> ‘SPI’ -> ‘Yes’ -> ‘Ok’.

Con esto ya tenemos el interfaz SPI activado, aunque tenemos que reiniciar la Raspberry Pi para que los cambios tengan efecto. Para ello desde la consola podemos escribir:

sudo shutdown -r now

Instalar el RF24 para la Raspberry Pi

Ahora os dejo la lista de comando a realizar para instalar la librería, se puede resumir en: instalar las librerías necesarias, obtener el repo con todo el código, instalar la librería de linux, y luego generar el wrapper para poder usar la librería RF24 en python3.

sudo apt-get install python3-dev libboost-python-dev python3-setuptools python3-rpi.gpio

git clone https://github.com/nRF24/RF24 nrf24

cd nrf24
./configure --driver=SPIDEV
make
sudo make install

cd pyRF24/
python3 setup.py build
sudo python setup.py install

Cuando termines de ejecutar estos comandos, tendrás la librería RF24 disponible para ser usada con python, y que ahora veremos con un ejemplo.

Recibir datos del nRF24 con Python

Un ejemplo para recibir datos usando la librería nRF24 de python en Raspberry Pi.

import RF24
import time

import struct

pipes = [ 0x52, 0x78, 0x41, 0x41, 0x41 ] 
pipesbytes = bytearray(pipes)

radio = RF24.RF24()
radio.begin(25, 0) #Set CE and IRQ pins
radio.setPALevel(RF24.RF24_PA_MAX)
radio.setDataRate(RF24.RF24_250KBPS)
radio.setChannel(0x4c)
radio.openReadingPipe(1, pipesbytes)
radio.startListening()
radio.printDetails()

#radio.powerUp()
cont=0

while True:
  pipe = [1]

  while not radio.available():
    time.sleep(0.250)
    

  recv_buffer = bytearray([])
  recv_buffer = radio.read(32)
  print(recv_buffer)

Enviar datos con nRF24 y RPi 3

import RF24
import time

pipes = [ 0x52, 0x78, 0x41, 0x41, 0x41 ] 

pipesbytes = bytearray(pipes)

radio = RF24.RF24()
radio.begin(25, 0) #Set CE and IRQ pins
radio.setDataRate(RF24.RF24_250KBPS)
radio.setRetries(3,5)


radio.setPALevel(RF24.RF24_PA_MAX)
radio.openWritingPipe(pipesbytes)
radio.powerUp()
radio.printDetails()


while True:
  print(radio.write(b"Hola"))
  time.sleep(1)
Categorías: Raspberry

Gluón

Teleco con ganas de aprender más y compartirlo. Viajero empedernido y amante de la fotografía y la tecnología. Espero dejar mi granito de arena y que este pueda servir de ayuda.