Skip to main content

Control de Autos RC de Shell Motorsport a través de Bluetooth Low Energy (BLE)

Project description

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.

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shell_motorsport-0.1.1.tar.gz (3.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shell_motorsport-0.1.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file shell_motorsport-0.1.1.tar.gz.

File metadata

  • Download URL: shell_motorsport-0.1.1.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.10.0

File hashes

Hashes for shell_motorsport-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c08339ced3cbedfd81e2a3540c8c72c94ebac4d6a1a87c39b76d7e2d397aebf5
MD5 b942a953826a412061357a32d56b583a
BLAKE2b-256 3aaa9e08721c8bf0a55bb4c24e48a65a51cfbe0831324c6824d8b6437e587317

See more details on using hashes here.

File details

Details for the file shell_motorsport-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for shell_motorsport-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3bda31780540c6df60c6529f786e324b1e352397ed325ed121287601b42c924d
MD5 803a0a9be0a7d7ecf78cc6bc6588a248
BLAKE2b-256 2c6e5db63930748147e634157453d0ee3511867b897f212db9d77edb98b04f40

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page