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.
Opción 1: Via PIP
pip install git+https://github.com/AMasetti/shell-motorsport-rc-lib
Opción 2: Clonar el Repo
-
Clona este repositorio:
git clone
-
Navega al directorio del proyecto:
cd ShellMotorSport
-
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.
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.
Para descubrir el device_id
de tu auto y asignarle un nombre personalizado:
-
Enciende tu auto RC y asegúrate de que esté en modo de emparejamiento.
-
En
main.py
, asigna un nombre único acar_name
:car_name = 'NOMBRE_DE_TU_AUTO' # ...existing code...
-
Ejecuta
main.py
. El programa buscará dispositivos BLE cercanos, encontrará tu auto y guardará sudevice_id
en el archivovehicle_list.json
.
La librería permite controlar múltiples autos RC simultáneamente:
-
Asegúrate de que los nombres y
device_ids
de tus autos estén guardados envehicle_list.json
. -
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()
-
Utiliza las funciones de movimiento para controlar cada auto de forma independiente.
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.
Asegúrate de instalar pyjoycon
para manejar la conexión con los JoyCon:
pip install joycon-python hidapi pyglm
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...
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
Modifica las condiciones en get_joycon_command
dentro de shell_motorsport.py
para ajustar las velocidades según tus necesidades.
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.
Queremos expresar nuestro agradecimiento a Scrool por sus valiosas contribuciones en la ingeniería inversa, que han sido fundamentales para este proyecto.