MÓDULO NRF24L01
El NRF24L01 posee un circuito amplificador de potencia (!"# un circuito amplificador de $a%o ruido (LN!" adem&s de una antena 'M! ue en con%unto le permiten lo)rar un ran)o de *asta 1000m+ primer ero o ue ue tien tienes es ue ue *ace *acerr es Es neces necesari ario o usar usar la li$rer li$rer,a ,a RF24+ Lo prim descar)ar la -ltima .ersi/n li$rer,a RF24 e RF24 e importarla a tu DE de !rduino# para esto esto en la $arra $arra de menmen-ss .as .as a 'et 'etc* c*m mpor porta tarr Li$r Li$rer, er,a a!d !dd d Li$r Li$rar3 ar3## 3 seleccionas la carpeta o arc*i.o descar)ado# despu5s de esto de$er&s cerrar 3 .ol.er a a$rir el DE+
!*ora e6plicaremos las funciones ue usaremos de la li$rer,a+
RF24 (uint78t8cepin# uint78t8cspin" uint78t8cspin" Funci/n 9onstructor: 9rea una nue.a instancia (O$%eto" de este dispositi.o+ La instancia se crea con los pines de comunicaci/n ' pero es necesario especificar los pines de control ue est&n conectados al m/dulo+ ar&metros 8 cepin: in del !rduino !rduino conectado conectado al pin 9*ip 9*ip Ena$le (9E" del del m/dulo 8 cspin: in del del !rduino !rduino conectado conectado al pin 9*ip 'elect (9'" (9'" del m/dulo E%emplo:
;define 9E8N < ;define 9'N8N 10
RF24 radio(9E8N# 9'N8N"=
Void begin(void)
niciali>a el o$%eto creado# )eneralmente se llama a esta funci/n en setup ("# antes de llamar a cualuier otro m5todo+ E%emplo: radio.begin();
void openWritingPipe(const uint8_t* addrees
!$re un canal de comunicaci/n de escritura+ La direcci/n se asi)na a tra.5s de una matri> de ? $3te de lon)itud+ ar&metros Address: La direcci/n del canal para a$rir+
E%emplo byte dirección[5] ={'c','a','n','a','l'}; radio.openWritingipe(direccion);
bool escribir(const void* buf,uint8_tlen)
En.,a un dato por el canal definido en openWritingPipe(), el dato es de m&6imo @2$3tes+ ar&metros Auf: untero al datos ue se en.iar& Len: N-mero de $3tes a en.iar De.uel.e
Brue si la car)a -til fue entre)ada con 56ito 3 falso si no se lo)r/ en.iar E%emplo: int dato=!5; bool o" = radio.#rite($dato, si%eo&(dato));
void openReadingPipe(uint8_number,const uint8_t*
!$re un canal de comunicaci/n de lectura+ La direccion se asi)na a tra.5s de una matri> de ? $3te de lon)itud+ 'e pueden a$rir *asta C canales de lectura pero sus direcciones solo pueden ser diferentes en el primer $3te ar&metros Num$er : n-mero de canal del 0? (canal 0 )eneralmente reser.a para escritura"+ !ddress : Direcci/n del canal para a$rir+ E%emplo: byte direccion[5] = {'c','a','n','a','l'}; radio.openeadingipe(, direccion);
void starListening(void)
!l llamar esta funci/n se empie>a a escuc*ar por los canales definidos como lectura# despu5s de llamar a esta funci/n no podemos *acer escrituras# para esto antes de$emos llamar a stopListenin) (" E%emplo: radio.startistening();
bool available (void)
9omprue$e si *a3 $3tes disponi$les para ser le,dos De.uel.e Brue si e6isten datos disponi$les en el canal de lectura 3 falso si no *a3 nin)-n dato reci$ido E%emplo i& (radio.a*ailable()){ radio.read($data,si%eo&(data));
void read( void* buf, uint8_t len)
Leer los datos disponi$les en el canal de lectura ar&metros Auf: untero a un $uffer donde los datos de$en ser escritos Len: El n-mero de $3tes a leer en el $-fer E%emplo int dato; i& (radio.a*ailable()){
radio.read($dato,si%eo&(dato)); }
Una .e> e6plicado lo necesario para empe>ar a usar los NRF24L01# .amos a .er un e%emplo:
Enviar variables desde un rduino a otro usando !R"#$L%&
'e en.iaran desde un !rduino *acia otro !rduino tres datos# estos ser&n: el .olta%e le,do por el pin anal/)ico !0# el .alor de millis("# 3 un dato adicional ue podr,a ser el de cualuier sensor+ ara esto necesitamos 2 !rduinos# dos m/dulos NRF24L01 (con o sin antena"# un potenci/metro 3 ca$les Dupont+
Empecemos 'aciendo las coneiones entre el rduino el !R"#$L%&
Las cone6iones ser&n las mismas tanto en el Emisor 3 Receptor# con la -nica diferencia ue en el receptor no usaremos el potenci/metro+
+-/
Arduino UNO, Nano
Arduino Mega
1: 2: 3: : ": $: &:
pin 0+1 pin 232 pin 4 pin / pin 2 pin pin -
pin 0+1 pin 2.23 pin 4 pin / pin 5pin 5 pin 5/
GND VCC CE C!N !C# MO!% M%!O
9omo se o$ser.a en la ima)en el pin 2 del NRF24L01 (99" .a conectado al pin @@ del !rduino# esto porue el modulo funciona con @+@+ NO conectar a ? porue podemos uemar al m/dulo# los pines de datos lo estamos conectando directamente al !rduino a pesar ue los ni.eles l/)icos del NRF24L01 son tam$i5n de @+@# esto con el tiempo podr,a afectar al NRF24L01 por lo ue se recomienda usar un adaptador para ue tra$a%e con .alores de ?
El c/di)o para el emisor es el si)uiente:
incl6de 789.: incl6de 7n-/.: incl6de 7-.: <<1eclareos los pines >? y el >8+ de@ne >?9+ 4 de@ne >8+9+ / <<3ariable con la dirección del canal por donde se *a a transitir byte direccion[5] ={'c','a','n','a','l'}; <?9+, >8+9+); <<*ector con los datos a en*iar
Coat datos[2]; *oid 'etup() { <
el c/di)o ara el recetor:
incl6de 789.: incl6de 7n-/.: incl6de 7-.: <<1eclareos los pines >? y el >8+ de@ne >?9+ 4 de@ne >8+9+ / <<3ariable con la dirección del canal G6e se *a a leer byte direccion[5] ={'c','a','n','a','l'}; <?9+, >8+9+); <<*ector para los datos recibidos Coat datos[2]; *oid 'etup() { <
{ !eria.println(E+o :ay datos de radio disponiblesE); } delay(///); }
'i anali>amos el c/di)o lo ue *acemos es inicialmente confi)urar el m/dulo 3 lue)o en.iar o leer los datos transmitidos por el m/dulo NRF24L01# la .aria$le ue se .a a transmitir puede ser un solo dato o un arra3 de datos como se lo est& *aciendo en este tutorial# pero siempre la .aria$le o .ector ue se .a a reci$ir tiene ue ser del mismo tamaGo 3 tipo ue la .aria$le en.iada# de lo contrario se perder&n datos+ 'i *an *ec*o $ien todo lo descrito en el tutorial# al a$rir el monitor serial les de$er,a mostrar los si)uientes resultados Monitor serial del Emisor:
Monitor serial del receptor:
La distancia o alcance entre m/dulos NRF24L01 depender& del modelo ue est&n usando 3 del lu)ar en donde est&n tra$a%ando# si *a3 muros# ruido# o si est&n en lu)ares a$iertos+ Los ue .ienen sin antena son de poco alcance un poco menos ue la seGal HF# pero los modelos ue .ienen con antena 3 amplificador de potencia pueden comunicarse *asta un 1m de distancia+