Skip to content

ebalvis/SensorCast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SensorCast

Descripción General del Proyecto

Este es un proyecto de aplicación para Android, desarrollado en B4A (Basic4android), diseñado para funcionar como un servidor de sensores. Su función principal es capturar datos en tiempo real del acelerómetro y el magnetómetro del dispositivo móvil y retransmitirlos a través de la red local a uno o varios clientes usando el protocolo UDP.

La aplicación no solo envía datos, sino que también gestiona una lista de clientes, permitiendo que múltiples dispositivos se suscriban para recibir la información de los sensores.


Funcionalidad Detallada

1. Interfaz de Usuario (UI)

La interfaz de la aplicación es sencilla y está diseñada para la monitorización directa de los datos.

  • Muestra los valores de los ejes X, Y, Z tanto para el acelerómetro como para el magnetómetro en etiquetas de texto (Label).
  • También muestra la dirección IP del servidor (es decir, la IP del propio teléfono en la red WiFi) para que los clientes sepan a dónde conectarse.

2. Captura de Sensores

  • Inicialización: En el arranque (Activity_Create), la aplicación inicializa los sensores de tipo TYPE_ACCELEROMETER y TYPE_MAGNETIC_FIELD del teléfono.
  • Recepción de Datos: Los eventos SensorAcc_SensorChanged y SensorMag_SensorChanged se disparan cada vez que hay una nueva lectura. Los valores de los ejes (X, Y, Z) se almacenan en variables globales para su posterior envío.

3. Comunicación UDP (El Núcleo del Programa)

Esta aplicación actúa como un servidor UDP que realiza dos tareas principales:

  • Escucha de Clientes:

    • Se inicializa un socket UDP (UDPSocket) que escucha en el puerto 51042.
    • Cuando un cliente quiere recibir datos, debe enviar un mensaje de texto con la palabra "HOLA" a la IP del teléfono en el puerto 51042.
    • El evento UDP_PacketArrived recibe este mensaje, extrae la dirección IP del remitente (el cliente) y la añade a una lista interna (ListaDeClientes), siempre que no estuviera ya registrada. De esta forma, se crea una lista de "suscripción".
  • Publicación de Datos:

    • Un temporizador (Timer1) se configura para ejecutarse cada 200 milisegundos.
    • Cada vez que el temporizador se activa, llama a la subrutina EnviarDatosUDP.
    • Esta subrutina recopila los últimos valores leídos del acelerómetro y el magnetómetro.
    • Los datos se empaquetan en un formato JSON estructurado, similar a este:
      {
        "accelerometer": { "x": 1.23, "y": 0.45, "z": 9.81 },
        "magnetometer": { "x": 30.1, "y": -15.6, "z": 22.8 }
      }
    • Finalmente, la aplicación recorre la ListaDeClientes y envía este paquete JSON a cada cliente registrado, usando el puerto de destino 51043.

4. Gestión del Ciclo de Vida

  • El código gestiona correctamente el ciclo de vida de la aplicación de Android. En Activity_Resume se inician los sensores y el temporizador, y en Activity_Pause se detienen para no consumir batería cuando la app está en segundo plano.
  • Se declara el permiso de INTERNET en el manifiesto para permitir la comunicación por red.

Resumen del Flujo de Trabajo

  1. El usuario inicia la aplicación en su teléfono Android. La app muestra la IP del teléfono y los datos de los sensores.
  2. Un programa cliente (en un PC, Raspberry Pi, etc.) en la misma red envía el mensaje "HOLA" a la IP del teléfono, puerto 51042.
  3. La aplicación recibe el "HOLA", registra la IP del cliente.
  4. Cada 200 ms, la aplicación envía un paquete JSON con los datos actualizados de los sensores a la IP del cliente, al puerto 51043.
  5. Este proceso se repite para todos los clientes que se hayan registrado.

En conclusión, es una solución eficiente y ligera para usar un teléfono Android como un dispositivo de medición inercial (IMU) inalámbrico, perfecto para proyectos de robótica, sistemas de control, o cualquier aplicación que requiera datos de movimiento y orientación en tiempo real.

About

App Android (B4A) que convierte tu móvil en un servidor de sensores. 📡 Captura datos del acelerómetro y magnetómetro y los transmite en formato JSON a través de UDP a clientes en la red local. Perfecta para telemetría y proyectos de robótica.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages