No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Comunicación de mensajes entre tarjetas LoRa con FreeRTOS

11/17
Recursos

¿Cómo configurar la transmisión de mensajes con LoRa?

Para transmitir mensajes de Lora es fundamental entender la importancia de gestionar tanto el envío como la recepción de mensajes de manera adecuada. Dado que no podemos enviar y recibir con la misma antena al mismo tiempo, es crucial crear pausas cuando trabajamos con sistemas de radio. Aquí mostramos cómo configurar la transmisión usando FreeRTOS para gestionar tareas de recepción y transmisión.

¿Qué herramientas y configuraciones iniciales necesitamos?

Primero, tendrás que tener a la mano dos tarjetas de desarrollo, ya que una se encargará de transmitir y otra de recibir. Además, es esencial identificar a qué puertos COM están conectadas tus tarjetas (COM7 y COM9, por ejemplo, aunque esto puede variar en tu caso).

Recuerda tener el entorno configurado con el editor Visual Studio Code y las bibliotecas necesarias cargadas en tu proyecto. Deberás familiarizarte con la librería de tareas FreeRTOS para manejar la manipulación de las tareas de transmisión y recepción.

¿Cómo implementar la función de transmisión de mensajes?

Para transmitir un mensaje, empleamos la función loraSendPacket, que requiere un buffer para el mensaje y su tamaño. Antes de comenzar el envío:

  1. Indica el estado de transmisión: Usa printf para mostrar un mensaje en la terminal que indique que estás transmitiendo.
  2. Convierte el mensaje: Si estás trabajando con cadenas de char, conviértelas al tipo uint8_t.
  3. Imprime confirmación de envío: Nuevamente, usa printf para confirmar que el mensaje fue enviado. Asegúrate de incluir un cambio de línea para organizada presentación en la terminal.

Además, utiliza las funciones taskSuspend y taskResume para evitar que la tarea TX y RX choquen. Cuando envíes un mensaje, suspende temporalmente la recepción hasta que la transmisión haya concluido.

// Código para manejar transmisión y recepción
void enviarMensaje() {
    char* msg = "pink";
    uint8_t largoMsg = 5; // largo del mensaje
    printf("Transmisión del paquete: %s\n", msg);
    
    loraSendPacket((uint8_t*)msg, largoMsg);
    
    taskSuspend(handleRxTask);  // Suspende recepción
    taskResume(handleRxTask);   // Reanuda recepción después de enviar
}

¿Cómo se optimizan los ciclos para evitar errores?

Para evitar errores como ciclos infinitos, incluye delays estratégicos después de tus operaciones de loop. Esto puede realizarse añadiendo un taskDelay en tu ciclo principal para manejar los intervalos entre transmisiones.

Recomendación: Integre un taskDelay de 2 segundos para permitir una pausa significativa entre cada mensaje enviado.

// Ejemplo de delay en transmisión
for(;;) {
    enviarMensaje();
    taskDelay(2000 / portTICK_PERIOD_MS);
}

Implementa las recomendaciones de FreeRTOS para que tu sistema gestiona correctamente el paso del tiempo y no sobrecargues a tu microcontrolador con tareas sin control.

¿Cómo solucionar errores comunes?

En caso de que experimentes problemas de compilación o funcionamiento, revisa los siguientes puntos:

  • Conversión de tipo incorrecta: Asegúrate que cuando conviertes cadenas a uint8_t, estés señalando que es un puntero.
  • Configuración de las tareas: Asegúrate de que las tareas estén correctamente manejando sus contextos y argumentos.
  • Mensajes no recibidos: Si ves que la tarea de recepción no muestra actividad, puede ser que te falte un printf para mostrar al recibir, así como asegurar el manejo correcto de los mensajes.

Estos pasos te ayudarán a configurar cualquier proyecto de LoRa que desees emprender, permitiéndote expandirte hacia aplicaciones de sensores, sistemas de comunicación, y mucho más. ¡Ánimo con tu desarrollo!

Aportes 2

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

.
Este es el modulo central
.

.
este es el modulo remoto
.

.
El codigo de los modulos esta muy largo y se queda en “Tu comentario esta en proceso de revision”

Qué satisfacción tan bonita ver a las tarjetas subiendo el count y cambiando la potencia al alejarlas. Trabajar con hardware es genial!