|
| 1 | +# Telemetría IoT para vehículo eléctrico |
| 2 | + |
| 3 | +Sistema de telemetría en tiempo real para un vehículo eléctrico (batería, corriente, temperatura del motor, RPM de motor y rueda, acelerador y freno), con tres implementaciones equivalentes sobre distinto hardware. Cada nodo lee los sensores analógicos/digitales del vehículo y publica un mensaje JSON por MQTT sobre TLS mutuo (mTLS) a **AWS IoT Core**. |
| 4 | + |
| 5 | +Proyecto desarrollado como parte de un Trabajo Fin de Máster (TFM). |
| 6 | + |
| 7 | +## Arquitectura |
| 8 | + |
| 9 | +``` |
| 10 | +Sensores del vehículo → [nodo embebido] → MQTT sobre mTLS (TLS 1.2, cert. X.509) → AWS IoT Core |
| 11 | +``` |
| 12 | + |
| 13 | +Cada nodo se autentica con su propio certificado de dispositivo (mTLS), no con usuario/contraseña. Los tres nodos implementan la misma lógica de lectura de sensores y publicación, adaptada a las capacidades de cada plataforma: |
| 14 | + |
| 15 | +| Carpeta | Placa | Lenguaje | Notas | |
| 16 | +|---|---|---|---| |
| 17 | +| `nanoesp32/` | Arduino Nano ESP32 | MicroPython | ADC interno de la placa | |
| 18 | +| `pipico-code/` | Raspberry Pi Pico W | MicroPython | ADC externo (ADC Pi); dos variantes: `main.py` y `main_python.py` (mismo hardware, publican en topics MQTT distintos) | |
| 19 | +| `pi_zerowh_code/` | Raspberry Pi Zero W | Python 3 | ADC externo (ADC Pi), usa el SDK oficial de AWS IoT | |
| 20 | + |
| 21 | +## Configuración (obligatoria antes de ejecutar) |
| 22 | + |
| 23 | +Ningún secreto (contraseña WiFi, certificados, claves privadas) está en el repositorio. Antes de usar cualquiera de los nodos: |
| 24 | + |
| 25 | +1. **Credenciales de conexión** — en `nanoesp32/` y `pipico-code/`, copia `config.example.py` como `config.py` y rellena tu SSID/contraseña de WiFi y el endpoint de AWS IoT (Consola AWS IoT → *Configuración*). En `pi_zerowh_code/`, copia igualmente `config.example.py` como `config.py`. |
| 26 | +2. **Certificados del dispositivo** — crea una "Thing" (dispositivo) por nodo en AWS IoT Core, genera su certificado X.509 y su clave privada, adjúntale una policy (ver [`pi_zerowh_code/iot-policy.example.json`](pi_zerowh_code/iot-policy.example.json) como plantilla), y coloca los ficheros donde indica el `README.md` de cada subcarpeta de certificados (`cert_n/`, `cert_rpipico/`, `certs_n/`, `pi_zerowh_code/`). |
| 27 | + |
| 28 | +Ninguno de estos ficheros (`config.py`, certificados, claves privadas) se sube a git — están excluidos vía `.gitignore`. |
| 29 | + |
| 30 | +## Ejecución |
| 31 | + |
| 32 | +- **nanoesp32 / pipico-code (MicroPython):** copia todos los ficheros de la carpeta (incluido tu `config.py` y tus certificados) a la placa, por ejemplo con [`mpremote`](https://docs.micropython.org/en/latest/reference/mpremote.html) o [`rshell`](https://github.com/dhylands/rshell). Al arrancar, `boot.py` conecta el WiFi y `main.py` publica telemetría por MQTT cada segundo. |
| 33 | +- **pi_zerowh_code (Python 3):** |
| 34 | + ```bash |
| 35 | + pip install -r requirements.txt |
| 36 | + python3 main.py |
| 37 | + ``` |
| 38 | + `start.sh` es un script auxiliar (basado en el ejemplo oficial de AWS) para probar la conectividad pub/sub contra AWS IoT antes de lanzar `main.py`; requiere la variable de entorno `AWS_IOT_ENDPOINT`. |
| 39 | + |
| 40 | +## Firmware |
| 41 | + |
| 42 | +Para flashear MicroPython en la Raspberry Pi Pico W, descarga el `.uf2` oficial desde [micropython.org/download](https://micropython.org/download/RPI_PICO_W/). |
| 43 | + |
| 44 | +## Licencia |
| 45 | + |
| 46 | +MIT — ver [LICENSE](LICENSE). |
0 commit comments