Skip to content

Este proyecto proporciona una librería para controlar los autos de radio control (RC) de Shell Motorsport mediante Bluetooth Low Energy (BLE). Diseñada para entusiastas de los autos RC, esta herramienta permite conectarte al vehículo, enviar comandos personalizados y gestionar múltiples autos simultáneamente.

Notifications You must be signed in to change notification settings

AMasetti/shell-motorsport-rc-lib

Repository files navigation

Control de Autos RC de Shell Motorsport

Shell Motorsport RC Car

Esta librería permite controlar los autos de radio control (RC) de Shell Motorsport a través de Bluetooth Low Energy (BLE). Proporciona funciones para conectarse al vehículo, enviar comandos de movimiento y administrar múltiples autos.

Instalación

Opción 1: Via PIP

pip install git+https://github.com/AMasetti/shell-motorsport-rc-lib

Opción 2: Clonar el Repo

  1. Clona este repositorio:

    git clone
  2. Navega al directorio del proyecto:

    cd ShellMotorSport
  3. Instala las dependencias requeridas:

    pip install -r requirements.txt

Asegúrate de tener instalados los paquetes bleak y pycryptodome para manejar las conexiones BLE y la encriptación AES.

Uso con main.py

El archivo main.py es un ejemplo de cómo utilizar la librería para controlar tu auto RC.

import asyncio
from shell_motorsport import ShellMotorsportCar

car_name = 'AMASETTI_F1_75_44' # Cambia esto al nombre que desees asignar a tu auto

async def main():
    car = ShellMotorsportCar()

    try:
        if car_name not in car.vehicle_list:
            await car.find_and_name_car(car_name)
        else:
            await car.connect(car_name)

        # Mover hacia adelante por 1 segundo
        await car.move_command(car.retreive_precomputed_message(forward=1))
        await asyncio.sleep(1)
        await car.stop()

        # Mover hacia atrás por 1 segundo
        await car.move_command(car.retreive_precomputed_message(backward=1))
        await asyncio.sleep(1)
        await car.stop()

        # Prueba de dirección
        await car.move_command(car.retreive_precomputed_message(left=1))
        await asyncio.sleep(1)
        await car.move_command(car.retreive_precomputed_message(right=1))
        await asyncio.sleep(1)
        await car.stop()

        # Mover hacia adelante a la derecha y luego hacia atrás a la izquierda
        await car.move_command(car.retreive_precomputed_message(forward=1, right=1))
        await asyncio.sleep(1)
        await car.move_command(car.retreive_precomputed_message(backward=1, left=1))
        await asyncio.sleep(1)

    finally:
        await car.disconnect()

if __name__ == "__main__":
    asyncio.run(main())

Para ejecutar el script:

python main.py

Asegúrate de modificar el valor de car_name en main.py con el nombre que desees asignar a tu auto.

Descubrir IDs y guardar tus autos

Para descubrir el device_id de tu auto y asignarle un nombre personalizado:

  1. Enciende tu auto RC y asegúrate de que esté en modo de emparejamiento.

  2. En main.py, asigna un nombre único a car_name:

    car_name = 'NOMBRE_DE_TU_AUTO'
    # ...existing code...
  3. Ejecuta main.py. El programa buscará dispositivos BLE cercanos, encontrará tu auto y guardará su device_id en el archivo vehicle_list.json.

Conectar y controlar varios vehículos

La librería permite controlar múltiples autos RC simultáneamente:

  1. Asegúrate de que los nombres y device_ids de tus autos estén guardados en vehicle_list.json.

  2. En tu script, crea instancias separadas de ShellMotorsportCar para cada auto y conéctalas utilizando sus nombres:

    car1 = ShellMotorsportCar()
    await car1.connect('NOMBRE_AUTO_1')
    
    car2 = ShellMotorsportCar()
    await car2.connect('NOMBRE_AUTO_2')
    
    # Controlar car1
    await car1.move_forward()
    # Controlar car2
    await car2.move_backward()
  3. Utiliza las funciones de movimiento para controlar cada auto de forma independiente.

Soporte para JoyCon

JoyCon

La librería ahora soporta control de los autos RC utilizando los controladores JoyCon de Nintendo. Puedes controlar múltiples autos simultáneamente usando los JoyCon Plus y Minus.

Instalación de Dependencias Adicionales

Asegúrate de instalar pyjoycon para manejar la conexión con los JoyCon:

pip install joycon-python hidapi pyglm

Uso con main_joycon.py

El archivo main_joycon.py proporciona un ejemplo de cómo utilizar los JoyCon para controlar varios autos RC.

import asyncio
from shell_motorsport import ShellMotorsportCar
from pyjoycon import JoyCon, get_R_id, get_L_id

# ...existing code...

Selección de Velocidad

Puedes seleccionar diferentes niveles de velocidad para tu auto RC utilizando los botones del JoyCon. Las velocidades predefinidas son:

  • 0x16: Velocidad baja
  • 0x32: Velocidad media
  • 0x48: Velocidad alta
  • 0x64: Velocidad máxima

Personalización de Velocidad

Modifica las condiciones en get_joycon_command dentro de shell_motorsport.py para ajustar las velocidades según tus necesidades.

Funcionamiento del protocolo de comunicación

Los autos RC de Shell utilizan Bluetooth Low Energy (BLE) para comunicarse. La librería maneja el protocolo de comunicación que incluye:

  • Mensajes cifrados: Los comandos se encriptan utilizando AES-128 en modo ECB.
  • Servicios y características BLE: Se utiliza el servicio con UUID fff0 y las características de escritura y notificación correspondientes.
  • Formato de los mensajes: Los mensajes de control tienen una longitud de 16 bytes y contienen información sobre dirección (avance, retroceso, izquierda, derecha) y velocidad.

Para obtener más detalles técnicos, te invitamos a consultar la siguiente documentación con toda la información de los protocolos y formato de los mensajes.

Agradecimientos

Queremos expresar nuestro agradecimiento a Scrool por sus valiosas contribuciones en la ingeniería inversa, que han sido fundamentales para este proyecto.

About

Este proyecto proporciona una librería para controlar los autos de radio control (RC) de Shell Motorsport mediante Bluetooth Low Energy (BLE). Diseñada para entusiastas de los autos RC, esta herramienta permite conectarte al vehículo, enviar comandos personalizados y gestionar múltiples autos simultáneamente.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages