Envío de datos GPS mediante Módulos de radiofrecuencia

Buen día a todos. Apreciaría mucho que me ayudaran con esto:
Quiero enviar los datos que me proporciona un módulo GPS Neo-6m mediante un módulo de radiofrecuencia NRF24L01 que será el emisor, hacia otro módulo NRF24L01(receptor) y ver los datos del receptor en el monitor serie de Arduino.
Los códigos que tengo hechos hasta ahora no me funcionan, no puedo ver los datos en el monitor serie y creo que ni siquiera se envían; también estoy mandando los valores que obtengo de un potenciómetro y un pulsador y esos datos sí puedo visualizarlos correctamente en el monitor serie, pero como he mencionado los de GPS no.

Estos son los códigos que tengo que no funcionan correctamente que me gustaría que me ayudaran a corregir;

Emisor:

///////////////////////////////////////EMISOR///////////////////////////////////
#include <SPI.h>               
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SoftwareSerial.h>  
SoftwareSerial gps(4,3);   

const int CE = 9;             
const int CSN = 10;            
RF24 radio (CE , CSN );         

                                                
const uint64_t canal[2]= {0xE8E8F0F0E1LL,0xE8E8F0F0E2LL};       
float pot ;                //Potenciómetro  
float boton;            //Pulsador  
float datogps;        //GPS

float lectura_datos[3];         
 //*

void setup() {
radio.begin();       
  //*
 gps.begin(9600);     //*
radio.setRetries(5,10);               

                                     
radio.openWritingPipe(canal[0]);       
radio.openReadingPipe(1,canal[1]);     
radio.setPALevel(RF24_PA_MAX);        
}

void loop() {
  
  radio.stopListening();                                
  
    datogps=gps.read();  
  
  
  pot=analogRead(A0);                                 
  boton=digitalRead(7);                                 
  lectura_datos[0] = pot ;                              
  lectura_datos[1] = boton;                          
  lectura_datos[2]= datogps;  
  radio.write(&lectura_datos,sizeof(lectura_datos));    
                                                      
  delay (5);                                            

}

Receptor:

//////////////////////////RECEPTOR//////////////////
#include <SPI.h>                                           
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>

const int CE = 9;                                           
const int CSN = 10;                                        
RF24 radio (CE , CSN );                                     
                                                         
const uint64_t canal[2]= {0xE8E8F0F0E1LL,0xE8E8F0F0E2LL};    
float lectura_datos[3];           

void setup() {
Serial.begin(115200);                                       
radio.begin();                                            

radio.setRetries(5,10);                                     
                                                                                                                  
radio.openWritingPipe(canal[1]);                             
radio.openReadingPipe(1,canal[0]);                          
radio.setPALevel(RF24_PA_MAX);                              
}

void loop() {

radio.startListening();                                      
if (radio.available())                                      
  radio.read(&lectura_datos,sizeof(lectura_datos));           
                                                         
  Serial.print("GPS= ");
  Serial.print(lectura_datos[2]);
  Serial.println();
  Serial.print("Batería= ");                                  
  Serial.print(lectura_datos[0]);
  Serial.print(" V, ");
  Serial.print("Led= ");
  Serial.print(lectura_datos[1]);
  Serial.println();
  delay(5);                                                  


}

De antemano gracias por su atención amigos.

Cuando trabajas con el nRF24 debes primero lograr que se comunica y luego agregar lo que quieres enviar.
Un paso extra es el de soldar un capacitor electrolítico de 100uF entre Vcc y GND del nRF24. Eso evita picos de corriente que terminan generando caidas de tensión en el módulo. Algo muy perjudicial a la hora de transmitir.
Mira los ejemplos de la librería sin nada mas. No avances hasta que los mòdulos se comuniquen.

De hecho, ya logré que se comuniquen, los datos del potenciómetro y el pulsador que recibe el receptor desde el emisor sí puedo verlos en el monitor serie, pero los datos del GPS no.

¿Estás seguro que lees los datos del GPS correctamente?
Porque yo solo veo que lees 1 caracter y listo.

¿Has probado imprimir los datos por el puerto serie del emisor para ver si son correctos?

Bueno me quedé con que no podias leer los datos y SI expicabas que el potenciometro podías leerlo.
Los datos de un gps no son float para comenzar.
Son una cadena de caracteres que expresan muchas cosas de hecho es algo asi

$GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh
Siendo,

hhmmss.ss Hora UTC
A Estado receptor (A = OK, V = warning)
llll.ll,a Latitud (a = N o S)
yyyy.yy,a Longitud (a = E o W)
x.x Velocidad en nudos in knots
x.x Curso en grados
ddmmyy Fecha UT
x.x,a Variacion magnética en grados (a = E o W)
*hh Checksum

mira esto
LOCALIZACIÓN GPS CON ARDUINO Y LOS MÓDULOS GPS NEO-6

asi que esto

float lectura_datos[3];   

no alcanza para presentar los datos, de hecho mejor procesalos antes y luego envialos.

Ok, también intenté usando double para los datos del GPS pero tampoco funcionó
Leeré esta información que mencionas a ver cómo me va

Lo intenté también, pero sigo sin ver los datos del GPS

Es que el GPS envía los datos como texto, además lees sin verificar que haya datos disponibles.

Por otro lado tienes un error de concepto, como mínimo un GPS tiene que enviar dos valores: longitud y latitud, ambos en coma flotante, imposible que entren en una sola variable.

Lee el artículo de Luis Llamas que te linkeo @Surbyte que está bastante bien explicado y ves cual es el formato del paquete de datos que te envía el GPS.

Saludos

Lo leeré, gracias

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.