Cómo construí mi sustituto del Blue&Me: guía paso a paso
Sustituí el módulo Magneti Marelli Blue&Me roto (50521871) por una Raspberry Pi Zero W. Responde al Body Computer, lee los mandos del volante, reproduce música Bluetooth y permite hacer llamadas con la radio original y el micrófono del coche.
- Línea de 3.3 V
- Línea de 5 V
- Masa
- Peligro
01 Antes de empezar
En el artículo anterior expliqué qué es este proyecto y por qué lo construí. En esta guía cuento cómo lo hice, en quince pasos desde las primeras comprobaciones hasta la música y las llamadas en el coche.
Las medidas son de mi hardware y de mi coche. Otro puede dar resultados distintos. Por eso empecé midiendo y grabando, antes de transmitir mensajes o hacer más conexiones.
El software está en GitHub: github.com/crimeofheart/giulietta-blue-me.
Empezar escuchando
No encontré información publicada sobre el CAN del Giulietta 940. Partí de fmntf/fiatcan para el Fiat Doblò 263 y karolkrupa/alfa-blue-me para el Alfa 159. Pero describen otros coches y difieren en muchos identificadores. Comparé los mensajes con grabaciones de mi coche. Cada mensaje de las tablas del software lleva una referencia a su grabación, y el control de transmisión solo permite los confirmados por ellas.
Al instalarlo, la transmisión queda bloqueada en dos sitios: el controlador CAN está en modo de solo escucha y la lista de tramas permitidas en la aplicación está vacía. Puede recibir y decodificar el tráfico del coche, pero no puede transmitir. Activé la transmisión en el paso 12 con un comando que también permite desactivarla.
Reconstruir el protocolo sin un módulo en buen estado
Al principio no tenía un módulo funcionando que grabar, y el coche estaba configurado sin Blue&Me. Grabé el coche dos veces: primero tal como estaba y después de decirle al Body Computer que esperase un módulo Blue&Me. La comparación con blueandme-diff mostró qué buscaba el coche (paso 10). Más adelante saqué otros identificadores del tráfico que aún enviaba el módulo roto, como cuento en el artículo.
El valor PROXI sale del coche en el que se hace el montaje, no de mi proyecto. Son los seis bytes que envían sus módulos cuando pregunta el Body Computer. Dejé el mío fuera del código publicado, que lo lee de un ajuste de la configuración. El paso 10 explica cómo leerlo de una grabación; el paso 12, dónde ponerlo en la configuración de la Pi.
Dónde se hace cada prueba: banco indica trabajo fuera del coche; coche, trabajo conectado al bus del vehículo. Los pasos 1–6 se hacen en el banco. En el paso 7 conecté la Pi al coche por primera vez, solo para escuchar. No transmití hasta el paso 12.
Componentes necesarios
Primero van las piezas necesarias y después las opcionales. Al final he añadido las herramientas que utilicé.
| Componente | Cant. | Notas |
|---|---|---|
| Imprescindible | ||
| Raspberry Pi Zero W, con su cabecera de 40 pines | 1 | Bluetooth y Wi-Fi integrados, un núcleo, alrededor de 1 W. La Zero sin W no vale. |
| Tarjeta microSD, de 16 GB o más | 1 | Para Raspberry Pi OS Lite, 32 bits (paso 3). 16 GB es el mínimo que recomienda Raspberry Pi para la imagen Lite. La mía es una SanDisk de 64 GB. |
| Módulo CAN MCP2515 + TJA1050 | 1 | La típica placa azul. Su cristal puede ser de 8 o de 16 MHz, y hay que mirar cuál es. Necesita dos modificaciones (pasos 1–2). Con una placa SN65HVD230 no hacen falta. |
| Tarjeta de sonido USB con salida de audio y entrada de micrófono | 1 | Debería servir cualquier tarjeta que Linux reconozca como dispositivo de audio USB, sea C-Media o no. Usé un adaptador Ugreen USB-A con chip C-Media HS-100B, salida estéreo y entrada de micrófono mono. Con otra tarjeta comprobaría que el contacto exterior del jack de auriculares está realmente a masa y qué nombre aparece en aplay -l (paso 13). Si solo se quiere escuchar música, no hace falta entrada de micrófono. |
| Cable estéreo de 3.5 mm | 1 | De la salida de auriculares de la tarjeta a los pines de audio de la radio (paso 14). |
| Convertidor reductor (buck) de 12 V a 5 V, con salida USB | 1 | Usé un módulo TECNOIOT con entrada de 6–24 V y salida USB de 5 V. La Pi consume hasta unos 0.3 A. Lo importante es que siga alimentándola durante el arranque del motor. Antes de instalarlo conviene comprobarlo con una fuente regulable (paso 15). |
| Pines de tira, 2.54 mm, cuadrados de 0.64 mm | 32 | Cuatro tiras de ocho. Encajan tal cual en el conector del coche. |
| Tira de placa perforada, 2 × 16 agujeros con un marco de 5 mm | 1 | Se corta de un trozo de placa perforada. Sujeta los 32 pines y hace de conector hacia el enchufe del coche (paso 15). |
| Cable de conexión, tubo termorretráctil, pegamento | Cable fino para la modificación de 5 V del paso 2. | |
| Recomendado | ||
| Condensador electrolítico, 2200 µF, 35 V o más | 1 | Apoyo de alimentación durante el arranque, en paralelo con la entrada del buck (paso 15). |
| Diodo, 1N5822 o 1N4007 | 1 | Apoyo de alimentación durante el arranque, entre el pin 16 y el condensador. |
| Transistor PN2222 | 1 | Encendido con el contacto: la llave reinicia la Pi cuando el coche lleva aparcado más de tres días. Sin él, toca quitar y volver a poner el fusible F36. |
| Diodo, 1N4007 | 1 | Encendido con el contacto, entre base y emisor. |
| Resistencia, 100 kΩ | 2 | Encendido con el contacto. |
| Placa perforada, 3 × 7 cm | 1 | 10 × 24 agujeros, 2.54 mm. Para los circuitos de apoyo de alimentación y encendido con el contacto. |
| La caja original del Blue&Me | 1 | La caja del módulo averiado. Encaja en el soporte original del coche y su plástico deja pasar la señal Bluetooth. |
| Soporte impreso: marco y base de montaje | 1 | PETG o ASA. El PLA se ablanda en un coche aparcado. |
| Tornillos M3 y separadores, bridas | Separadores de 4 mm bajo el módulo CAN y de 5 mm bajo la Pi. Las bridas sujetan el buck y la tarjeta de sonido. | |
| Opcional: llamadas manos libres | ||
| Cable de 3.5 mm | 1 | Del circuito del micrófono a la entrada de micrófono de la tarjeta. |
| Resistencia, 2 kΩ | 1 | Alimentación del micrófono. |
| Resistencia, 1 kΩ | 2 | Una en paralelo con la resistencia de 2 kΩ de la alimentación y otra en el divisor. |
| Resistencia, 10 kΩ | 1 | Divisor del micrófono. |
| Condensador electrolítico, 10 µF, 10 V o más | 1 | Impide que la tensión continua del micrófono llegue a la tarjeta. |
| Opcionales para facilitar el montaje | ||
| Adaptador Micro-USB OTG | 1 | Para el banco. Dentro de la caja la tarjeta va soldada a la Pi (paso 15). |
| Condensador cerámico, 100 nF | 1 | Solo si el transceptor CAN no lleva uno en su alimentación (paso 2). |
| Herramientas | ||
| Multímetro, soldador, bisturí | Imprescindible. El importante es el multímetro. | |
| Un móvil | 1 | Imprescindible. El que va a poner la música. |
| Power bank USB | 1 | Imprescindible. Alimenta la Pi en todo el trabajo en el coche hasta el paso 15. |
| Adaptador OBD y MultiEcuScan en una tablet con Windows | 1 | Imprescindible para la alineación del paso 10. |
| Fuente de laboratorio regulable | 1 | Recomendado. Permite variar la tensión de entrada del convertidor y comprobar cuándo deja de funcionar, antes de instalarlo en el coche. |
| Impresora 3D | 1 | Opcional. Para imprimir el soporte y las plantillas de prueba. |
02 Montaje en el banco pasos 1–6
Paso 1 — Identificar el módulo MCP2515
Dos cosas que dejé claras antes de cablear nada.
a) Frecuencia del cristal
Empecé por la inscripción del cristal de la placa CAN: 8.000 significa 8 MHz y 16.000, 16 MHz. Una foto de cerca con buena luz ayuda si cuesta leerla. El instalador necesita ese valor correcto; de lo contrario, más adelante el bus parecerá silencioso aunque el cableado esté bien.
b) Resistencia de terminación
Sin nada conectado, medí con el multímetro la resistencia entre los bornes de tornillo CAN-H y CAN-L.
- ~120 Ω → la placa lleva una terminación. La mía la llevaba, y la quité. En la típica placa azul MCP2515+TJA1050 está justo entre los dos bornes, serigrafiada
120Ry marcada121. Vale desoldarla o levantarle una pata. - Decenas de kΩ → no hay terminación. Ese es el resultado bueno, y no es un circuito abierto: la resistencia de entrada diferencial del propio TJA1050 se queda siempre entre los pines, más o menos 20–100 kΩ. Con el transceptor montado nunca se lee infinito, así que no tiene sentido buscar una resistencia que no existe.
El B-CAN del coche ya está terminado en sus dos extremos. Una tercera terminación baja la impedancia diferencial y puede dejar el bus sin funcionar para todos los módulos, no solo para el que se añade. A dos personas les pasó exactamente esto antes que a mí: a karolkrupa en el Alfa 159 y a un usuario de fiatcan en el Doblò. Llama la atención el contraste con fmntf, que añadió un puente de 120 Ω: él estaba sondeando una sola centralita aislada en el banco, donde nada más termina el bus. En esto, el banco y el coche piden justo lo contrario.
Resultado de las comprobaciones
| Valor | Consecuencia | |
|---|---|---|
| Cristal | 8 MHz | install.sh --oscillator 8000000 |
| Terminación (121, 120 Ω) | desoldada | CAN-H↔CAN-L midió después 45 kΩ: solo el transceptor, sin terminación |
La frecuencia del cristal está clara, y entre CAN-H↔CAN-L se lee muy por encima de 120 Ω: decenas de kΩ es lo correcto, y un circuito abierto de verdad no es lo esperable.
Paso 2 — Resolver el problema de los 5 V
La placa tiene un solo pin VCC que alimenta los dos chips. Ese es todo el problema.
El transceptor TJA1050 necesita 5 V para mover un bus CAN: está especificado para 4.75–5.25 V y no tiene modo de 3.3 V. Así que la placa se alimenta a 5 V, el controlador MCP2515 funciona también a 5 V, y un chip que funciona a 5 V saca sus salidas a 5 V. Una de esas salidas es MISO, y MISO va directa al GPIO9 de la Pi, que no tolera 5 V y no tiene diodos de protección.
MISO. El cableado SPI, los 5 V del transceptor y el lado CAN se quedan como estaban.Aplicar demasiada tensión a un GPIO puede dañarlo sin que se note enseguida. La corriente que pasa por las estructuras de protección puede degradarlo con el tiempo. Que funcione una hora no demuestra que la conexión sea segura. Por eso hice la modificación antes de alimentar la placa por primera vez.
Tres opciones
Separar las alimentaciones
Corté la pista de cobre entre el pin VCC de la placa y el TJA1050, y luego soldé un cable para darle al transceptor sus 5 V por separado.
Un corte, un cable, ninguna pieza extra.
Adaptador de nivel en MISO
La placa se queda a 5 V y se pone un adaptador de nivel 3.3 V/5 V solo en la línea MISO, la única que empuja hacia la Pi.
No hay que cortar la placa, aunque se añade un componente y tres soldaduras al circuito SPI.
Comprar una placa de 3.3 V
Un módulo basado en el SN65HVD230 funciona de serie a 3.3 V, controlador y transceptor incluidos.
No hay nada que modificar. Barato. Para quien no quiera cortar la placa, es la opción buena.
En rigor solo importa MISO. MOSI, SCK y CS son salidas de la Pi y entradas del MCP2515: la Pi mete 3.3 V en un chip de 5 V, que lo lee sin problema como un nivel alto. MISO e INT son las dos líneas que van en el otro sentido, e INT es de drenador abierto. Por eso la opción B se apaña solo con MISO. Separar los raíles las arregla todas de una vez.
Qué significa de verdad "cortar la pista"
Una pista es una tira de cobre impresa en la superficie de la placa de circuito. Hace el trabajo de un cable: es plana, de una fracción de milímetro de ancho, está pegada a la placa y cubierta por la laca verde que se ve (la máscara de soldadura). Cada conexión del módulo es una de estas.
Cortarla es romper físicamente ese cobre con una cuchilla afilada para que la corriente ya no pueda pasar: raspé un pequeño hueco a través de la pista, hasta la fibra de vidrio de debajo. La placa no se corta, y no se dobla ni se quita nada. Lo que hice fue una interrupción a propósito en una sola conexión, de más o menos un milímetro de ancho, en una pista más fina que una raya de lápiz.
Una vez rota, los dos extremos quedan separados eléctricamente. Entonces soldé un cable a uno de ellos y lo alimenté desde otro sitio. Esa es toda la modificación: romper una conexión y volver a alimentar uno de sus lados.
Encontrar la pista correcta sin adivinar
Localicé la pista con el multímetro en lugar de fiarme de un dibujo de la placa. La misma comprobación sirve aunque el módulo tenga otra distribución. Con el multímetro en continuidad, la secuencia es esta:
- Puse una punta en el pin
VCCde la cabecera de la placa y la dejé ahí. - Fui tocando con la otra punta cada pin del TJA1050 (el chip pequeño de 8 pines más cercano a los bornes de tornillo del CAN) hasta que pitó. Ese es el pin de alimentación: el pin 3 según la ficha del TJA1050.
- Hice lo mismo en el MCP2515 (el chip grande) para encontrar su pin de alimentación. Apunté los dos.
- El cobre que va entre el pin
VCCy el pin de alimentación del TJA1050 es lo que hay que cortar. Lo seguí con la vista; suele ser corto.
Así sabía qué dos pines debían quedar separados y podía comprobarlo con el multímetro después del corte.
El corte, en el lado del transceptor y no en el del controlador
En los dos sentidos se consigue la misma separación de raíles. Pero si el pin de la cabecera se queda unido al MCP2515, el pin donde se enchufa el cable puente es el de 3.3 V: es más difícil conectarlo al revés más adelante, y coincide con todo lo que hay publicado.
Normalmente hay un condensador pequeño en la alimentación del TJA1050. Tiene que quedarse con el transceptor, en el lado de 5 V del corte. Si la placa no lleva condensador ahí, al terminar hay que soldar uno de 100 nF entre el pin de alimentación del transceptor y masa.
Qué hace falta
- Soldador de punta fina y estaño fino
- Bisturí o cúter de precisión para el corte
- Multímetro con pitido de continuidad lo importante
- Cable fino aislado 28–30 AWG, ~60 mm
- Condensador cerámico de 100 nF solo si no hay ya uno
- Lupa o cámara del móvil para encontrar la pista y revisar el corte
Antes de nada, una foto de la placa
Hice una foto de cerca y con buena luz antes de modificar nada. Sirve de referencia si, al cortar, deja de estar claro qué lado va a cada chip.
Raspar hasta atravesar el cobre
Rasqué la laca verde a través de la pista y luego corté el cobre de debajo. Bastaron dos o tres pasadas suaves con la cuchilla cruzada sobre la pista, no a lo largo de ella. Dejé un hueco de alrededor de un milímetro de ancho, hasta ver la propia placa.
Mejor varias pasadas suaves que una fuerte que haga un surco en la placa o se vaya a una pista vecina.
Comprobar el corte con el multímetro
Del pin
VCCde la cabecera al pin de alimentación del TJA1050: ahora tiene que dar abierto, sin pitido. Del pinVCCde la cabecera al pin de alimentación del MCP2515: tiene que seguir pitando. Si alguno de los dos sale al revés, toca parar y volver a mirar la placa.Soldar el cable de 5 V
Estañé el cobre que había quedado a la vista en el lado del TJA1050 y le soldé el cable. Lo dejé corto y lo sujeté (vale cola caliente o cinta): un cable que se suelta dentro de un coche se lleva el pad por delante.
Comprobar que no hay cortos antes de dar corriente
Los dos pines de alimentación tienen que ser ya independientes entre sí, y ninguno puede estar en corto con masa. Solo cuando lo comprobé conecté algo a la Pi.
121 es la que desoldé en el paso 1.MISO no puede darle a la Pi más de 3.3 V. Con el módulo alimentado y la Pi desconectada, en el pin de alimentación del MCP2515 se miden 3.3 V y en el del TJA1050, 5 V.
Paso 3 — Grabar la tarjeta SD
Usé Raspberry Pi Imager en mi ordenador.
- Sistema: Raspberry Pi OS Lite (32-bit). No la versión de escritorio. Tiene que ser de 32 bits, porque la Zero W es ARMv6.
- En "Edit Settings" puse: nombre de host
blueandme; SSH activado (clave o contraseña); usuario y contraseña; SSID, contraseña y país del Wi-Fi.
Arranqué la Pi alimentada por USB sin nada más conectado, esperé unos dos minutos y entré con ssh <user>@blueandme.local.
Ya puedo entrar en la Pi por SSH.
Paso 4 — Instalación
# on your dev machine
git clone https://github.com/crimeofheart/giulietta-blue-me
cd giulietta-blue-me
rsync -a --exclude .git --exclude .venv ./ <user>@blueandme.local:~/giulietta-blue-me/
# on the Pi
cd ~/giulietta-blue-me
sudo ./install.sh --dry-run --oscillator 8000000 # read what it will do
sudo ./install.sh --oscillator 8000000 # 8 MHz, confirmed in step 1
sudo rebootLa primera instalación tarda un rato en la Zero W; la mayor parte del tiempo se va en instalar paquetes con apt. Si no hay un paquete preparado para esa versión del sistema en packages/, también se compila bluez-alsa para las llamadas de banda ancha, lo que añade unos diez minutos (paso 13). La instalación reduce además el tiempo de arranque quitando componentes innecesarios en un equipo sin pantalla: initramfs, controladores de pantalla y cámara, y servicios de módem, disco y teclado. Los controladores CAN y Bluetooth se cargan al principio (tiempos en el paso 15). Si los paquetes ya están instalados, repetir el proceso lleva unos dos minutos: omite apt y reinstala la aplicación.
install.sh termina con "configuration is valid".
Paso 5 — Cablear el MCP2515 a la Pi
Primero apagué la Pi (sudo poweroff, y esperé a que el LED se parase).
El pin 1, antes de contar nada
Todos los números de abajo son posiciones físicas de pin, y solo significan algo cuando se sabe qué extremo de la cabecera es el pin 1. Hay tres formas de encontrarlo, de más a menos fiable:
- El pad cuadrado. El pin 1 es el único pad cuadrado de la placa; los otros treinta y nueve son redondos. Si la cabecera ya está soldada, se le da la vuelta a la placa y se miran las soldaduras por debajo.
- El contorno serigrafiado
J8. El pin 1 es la esquina de dentro más cercana a la ranura de la tarjeta microSD. - La propia ranura de la tarjeta. El pin 1 está en ese extremo de la cabecera, nunca en el extremo opuesto, donde están los pads
RUNy el segundo agujero de montaje.
Desde ahí la numeración avanza por parejas a lo largo de la cabecera, alejándose de la ranura: 1 y 2 en la esquina, luego 3 y 4, luego 5 y 6. Los impares quedan en la fila más cercana a la ranura; los pares, en la fila más cercana al borde exterior de la placa.
J8. Todos los demás pads son redondos. Si la cabecera ya está soldada, basta con darle la vuelta a la placa: el pad cuadrado se ve por debajo.| Módulo | Señal de la Pi | Pin físico | Notas |
|---|---|---|---|
| VCC (MCP2515, tras el corte) | 3.3 V | 1 | Alimenta solo al controlador |
| Alimentación del TJA1050 — el cable que añadí | 5 V | 4 | El pin 2 es equivalente |
| GND | GND | 39 | Con una masa basta; vale cualquier pin de masa. En este montaje el pin 6 lleva la masa del coche (paso 7) |
| CS | GPIO8 / CE0 | 24 | Coincide con spi0-0 en el overlay |
| MOSI | GPIO10 | 19 | La Pi habla, el módulo escucha |
| MISO | GPIO9 | 21 | La línea por la que existe la modificación |
| SCK | GPIO11 | 23 | Reloj |
| INT | GPIO25 | 22 | Debe coincidir con interrupt=25 en el overlay |
MOSI y MISO cruzados. No rompe nada, solo da un bus que nunca se inicializa, y se ve idéntico a un valor de cristal equivocado. Es más fácil comprobarlo dos veces en ese momento que depurarlo después.
Le di corriente y comprobé:
blueandme-statusTiene que salir interface present ok, link state UP, bitrate 50000, bus errors 0, spidev present ok. Si can0 no existe:
dmesg | grep -i -E "mcp251|spi" # driver probe failures show here
ls /dev/spidev* # SPI enabled?
grep -E "spi|mcp2515" /boot/firmware/config.txtmcp251x spi0.0: MCP2515 successfully initialized es lo que quería ver. Cannot initialize MCP2515 casi siempre es el cableado o el valor del oscilador equivocado.
blueandme-status muestra can0 levantada a 50000 con cero errores.
Paso 6 — Demostrar que el software funciona, sin coche
Todo se puede probar sobre una interfaz CAN virtual antes de meter el coche de por medio.
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan && sudo ip link set up vcan0
tests/fixtures/fetch.sh # once: the Doblò recordings some tests read
python3 -m pytest # the vcan0 tests now run too
blueandme-protocol-map # the profile tables, generated from codeTodas las pruebas deben pasar. El mapa del protocolo debe mostrar las tramas del perfil Giulietta.
03 En el coche pasos 7–10
Alimenté la Pi con un power bank USB en todo el trabajo de captura. Los 12 V del coche no van a la Pi. El USB de la Pi no va al coche. La tablet desde la que la manejaba iba también con su propia batería: una tablet cargándose del coche mientras está unida a la Pi crea justo el camino de masa que el power bank está para evitar.
Paso 7 — Primer contacto: solo escucha
Usé dos conectores distintos: uno para la Pi y otro para la tablet. Cada uno cumple una función.

Lo que hay que buscar
El enchufe del lado del mazo es la mitad que se queda en el coche: carcasa azul, palanca de bloqueo negra, el mazo que entra por detrás y dos filas de pequeños alojamientos cuadrados en la cara de acoplamiento. En mi coche cuelga suelto, porque el módulo original ya no está. Me conecté ahí, y así pude acceder a las señales sin cortar el cableado original.
Las fotografías identifican los dos conectores y los números marcados en su carcasa. NO indican qué lleva cada pin: eso está en el mapa de abajo. Los dos conectores no aparecen con la misma orientación en las fotos, así que hay que guiarse por esos números y no por la posición.


| Paso | Pin | Etiqueta | Va a |
|---|---|---|---|
| 1 | 8 | MIC TIP (micro +) | Unión A del circuito del micrófono: 2 kΩ ‖ 1 kΩ (unos 670 Ω, así quedó en el coche) desde el pin 2 de la Pi (5 V), y la pata + del de 10 µF. La señal sale de la unión B hacia la punta del conector del micro |
| 1 | 24 | MIC GND (micro −) | Unión G, la unión de masa |
| 2 | 5 | AUD L | Punta del conector de audio |
| 2 | 22 | AUD R | Anillo del conector de audio (el del medio) |
| 2 | 21 | AUD GND | Manguito del conector de audio. El conector va en la salida de auriculares de la tarjeta de sonido |
| 3 | 30 | CAN-H | Borne de tornillo H del MCP2515 |
| 3 | 14 | CAN-L | Borne de tornillo L del MCP2515 |
| 3 | 15 | GND | Unión G, que también lleva la masa de la Pi (pin 6). El paso 5 añade aquí un segundo cable, al K1 de la placa (apoyo de alimentación durante el arranque, luego buck IN−) |
| 4 | 32 | IGNITION | Circuito de encendido con el contacto: resistencia de 100 kΩ a la base del PN2222. Hay 12 V en MAR; nunca debe conectarse directamente a un pin de la Pi |
| 5 | 16 | +12V PERM | El I10 de la placa: diodo y 2200 µF (apoyo de alimentación durante el arranque), luego buck IN+. Con el F36 quitado mientras se cablea |
| – | 4 | GND | Nada: de reserva. Es la masa de la toma USB de la guantera y no está comprobado que llegue al chasis, así que todos los retornos se quedan en el 15 |
El mapa de pines
Lo corroboran dos fuentes independientes: un hilo alemán sobre el Alfa 159/Brera que documenta el conector del módulo M162, y un hilo italiano de ClubAlfa sobre montar el Blue&Me precisamente en un Giulietta. Coinciden entre sí y con los números que este proyecto ya usaba.
| Pines | Función | Hace falta para |
|---|---|---|
| 30 / 14 | CAN-H / CAN-L — "CAN alta" / "CAN bassa" | Paso 7, la toma |
| 15 | Masa | Paso 7, la toma |
| 16 / 32 | 12 V permanentes / 12 V de contacto | Solo en el paso 15. Hasta entonces, ni tocarlos. |
| 5 / 22 / 21 | Audio izquierdo / derecho / masa | Paso 14 |
| 7 / 23 / 25 | Audio+ / Audio− / MUTE, hacia la radio | Quizá en el paso 14 |
| 8 / 24 | Micrófono, desde el techo. Amplificado; necesita su propia alimentación de 5–8 V | Paso 14, llamadas |
| 3 / 19 / 20 / 4 / 31 | USB D+ / D− / VCC / masa / malla, hacia la toma USB del coche | No se usa. El módulo alimentaba VCC, así que la toma probablemente esté muerta mientras falte (sin verificar) |
Por qué me fío de la disposición aunque la foto esté tomada en ángulo. La carcasa figura como TE/AMP 968265-1, que TE cataloga como 32 posiciones en dos filas a 2.54 mm. La cara de acoplamiento de la foto muestra dos filas. Y las funciones se emparejan exactamente como cabría esperar de dos filas de dieciséis: 3/19 es el par diferencial del USB, 4/20 su par de alimentación, 8/24 el par del micrófono, 14/30 el par CAN, 16/32 las dos alimentaciones de 12 V. Cada par cae en una columna. Que coincidan tres indicios independientes es la razón de que esto esté dibujado y no supuesto.
Para conectar sin introducir puntas de prueba en el enchufe, las piezas correspondientes son la carcasa 929053-2 y los contactos 144969-1.
La columna 16 lleva las dos alimentaciones de 12 V y está pegada a la masa que se busca, en la columna 15. Un alojamiento de diferencia separa una toma que funciona de un cortocircuito en una alimentación permanente de batería.
Así que localicé el 16 y el 32 antes de ponerme a buscar el 30, el 14 y el 15. Medí contra el chasis con la llave en MAR: esos dos están a tensión de batería y ningún otro de este conector debería estarlo. Una vez localizados, conté a partir de ellos.
Dónde va de verdad cada cable
| Lado del coche | Pin del Blue&Me | Va a |
|---|---|---|
| CAN-H | 30 | Borne de tornillo H del módulo MCP2515 |
| CAN-L | 14 | Borne de tornillo L del módulo MCP2515 |
| GND | 15 | No a la regleta de tornillos: es de 2 vías, solo H y L. Directo a un pin de masa libre de la cabecera de la Pi: el 6 en este montaje (o el 9, 14, 20, 25, 30, 34, 39: son todos el mismo nodo) |
La conexión de masa es necesaria. Con una batería externa, la masa de la Pi está separada de la del coche. CAN es diferencial, pero las tensiones de entrada del transceptor deben mantenerse dentro de un margen respecto a la masa del coche. Por eso uní ambas masas. Sin esa conexión los mensajes pueden leerse mal o no leerse.
Vale cualquier pin de masa libre: son todos el mismo nodo. En este montaje la masa del coche está en el pin 6 y la masa del propio módulo en el pin 39.
30 / 14 / 15 salen del artículo de fmntf sobre el Doblò 263. En este coche son correctos: todas las capturas desde el 2026-09-13 se tomaron ahí, con cero errores de bus, y por el conector pasa todo el B-CAN, diagnosis (18DA…) incluida. Por la toma OBD solo pasa tráfico de carrocería, sin nada de diagnosis, así que las capturas de las dos tomas no se comparan nunca.
Si se invierten CAN-H y CAN-L en esta conexión de solo escucha, el controlador no transmite y candump no muestra nada. Ese error no daña el equipo. Lo que sí supone un peligro es tocar los pines 16 y 32, que llevan 12 V. Hay que identificarlos primero y evitar su contacto con las conexiones de señal.
Con el coche dormido y un multímetro, un par CAN marca más o menos 60 Ω entre las dos líneas (dos terminaciones de 120 Ω en paralelo) y cada línea da abierto contra el chasis. Cuando sale, es una confirmación útil, pero el B-CAN es un bus de baja velocidad y puede estar terminado de otra forma, así que una lectura distinta de 60 Ω no demuestra que los pines estén mal.
Después, escuchar
candump -e can0,#FFFFFFFF # errors and data, everythingGiré la llave a MAR. Tienen que aparecer tramas.
El paso 10 compara la captura H con la captura E, y dos capturas tomadas en puntos distintos del bus no son comparables: la diferencia mezclaría "tramas que el Body Computer espera ahora" con "tramas que se ven desde otro sitio".
La toma OBD2, y por qué la Pi normalmente no la usa
El B-CAN de carrocería está en los pines 1 (CAN-H) y 9 (CAN-L) del OBD2, con la masa en el pin 4 o el 5. Lo medí en este coche el 2026-09-21, a 122 tramas/s y con los ID de siempre (captura M), y el pinout quedó confirmado en el coche. En una versión anterior de esta guía supuse los pines 3 / 11, y estaba mal. Es una toma válida para el tráfico de carrocería, pero no oye la diagnosis. La captura N no contiene ni una sola trama 18DA… a lo largo de una alineación PROXI, una lectura de averías y un borrado de averías. Así que cualquier trabajo de alineación necesita la Pi en el conector del Blue&Me, y el adaptador de la tablet necesita un divisor OBD2 en Y si va a compartir la toma. Las capturas M y N son las únicas que hice aquí; no las comparo con las hechas en el conector.
Si no se ve nada
- ¿Está despierto el coche? La llave tiene que estar en MAR, o una puerta abierta.
- Cruzar CAN-H y CAN-L. Probar no hace daño, y es un error muy frecuente.
- ¿Está conectado el cable de masa? Sin él el bus no se lee.
ip -details -statistics link show can0: si el contadorbus-errorsube, está mal la velocidad de bits o el oscilador; si se queda en cero y no llegan tramas, es que no hay conexión eléctrica.- Volver a comparar la marca del cristal con lo que se le pasó a
install.sh.
Con la llave en MAR, candump debe mostrar un flujo continuo de tramas.
Paso 8 — Captura A: ¿11 bits o 29 bits?
El comando más importante de todo el proyecto. Empecé a grabar con la llave quitada, luego giré a MAR y esperé 60 segundos.
Esperé a que la herramienta anunciase que estaba grabando antes de girar la llave. En una Zero W tarda unos cuatro segundos en arrancar, y la petición PROXI llega en los primeros segundos tras despertar la red. Girar la llave justo después de pulsar Enter puede dejar fuera precisamente el mensaje que busca la captura A. Ese tiempo también importa en las grabaciones siguientes.
mkdir -p ~/captures
TAP="Blue&Me connector 30/14/15" # the same tap point for every capture
blueandme-capture --scenario A --out ~/captures/A-ignition-on.log \
--tap-point "$TAP" --duration 90Miré las últimas líneas de la salida:
ID widths seen: {'29-bit': 4127} <- the answerComprobar la anchura del identificador. El valor esperado es de 29 bits. El autor de alfa-blue-me lo indicó para el Giulietta y lo confirmé en el mío. Si la grabación muestra 11 bits, es un bus distinto y los mensajes de esta guía no son aplicables. Hay que entender esa diferencia antes de continuar.
blueandme-decode ~/captures/A-ignition-on.log --profile doblo263 --summaryEl perfil del Doblò es mi plantilla estructural. Contaba con que algunos ID coincidieran por suerte y la mayoría no. Lo que importa es si se mantiene la forma topic<<16|node: ¿se agrupan los ID en un conjunto pequeño de mitades bajas 0x40xx?
El ancho de los identificadores y la lista de nodos están claros.
En mi coche (2026-09-13): 29 bits.
Captura A: 4157 de 4157 tramas de 29 bits, cero errores de bus. Los ID son topic<<16 | node, como en el Doblò. Nodos: 4000 Body Computer, 4003 cuadro de instrumentos, 4005 radio, y 4001 4002 4006 400A 4018 401A; el Blue&Me es el 4021.
Paso 9 — El resto de las capturas
Hice una captura por escenario, sin prisas. Las comparaciones posteriores dependen de que estas grabaciones estén bien hechas.
# B — key MAR -> OFF, start recording first
blueandme-capture --scenario B --out ~/captures/B-ignition-off.log \
--tap-point "$TAP" --duration 90
# E — baseline: key in MAR, engine off, touch nothing at all
blueandme-capture --scenario E --out ~/captures/E-baseline.log \
--tap-point "$TAP" --duration 180
# C — one button at a time, 3 presses each, 2 seconds between
blueandme-capture --scenario C --out ~/captures/C-buttons.log \
--tap-point "$TAP" --duration 180 \
--label "vol+ x3, vol- x3, next x3, prev x3, src x3, mute x3, menu x3"
# F — radio: change source, volume up/down, mute
blueandme-capture --scenario F --out ~/captures/F-radio.log \
--tap-point "$TAP" --duration 120 \
--label "FM, volume, mute, source cycling"Después busqué la trama de los botones:
blueandme-diff ~/captures/E-baseline.log ~/captures/C-buttons.log --by bitsBusqué un ID cuya carga volviera a todo ceros entre pulsaciones y cuyos bits cambiantes formaran una máscara limpia. Lo comparé con las máscaras que comparten las dos plataformas de referencia: 0x8000 vol+, 0x4000 vol−, 0x2000 silencio, 0x0400 fuente, 0x0080 menú, 0x0040 windows.
Cuatro capturas en disco y una candidata a trama de botones.
En mi coche (2026-09-13).
Las capturas A, B, E, C y F están en disco. La trama del volante es 06354000, del Body Computer: el mismo ID del Doblò, con las mismas máscaras, más siguiente 1000 y anterior 0800. Se repite a 2 Hz, con una trama extra en cada cambio. La captura C solo tiene pulsaciones cortas.
Paso 10 — Captura H: volver a alinear PROXI con el Blue&Me
Es reversible: al volver a alinear sin Blue&Me, el parpadeo se acaba.
Con el adaptador OBD2 y el software de centralitas lancé la alineación PROXI con el Blue&Me presente en la configuración del Body Computer. El módulo seguía sin estar físicamente, así que el Body Computer buscó un nodo que no contesta nunca.
Conecté la Pi al enchufe del Blue&Me y dejé OBD2 para la tablet. Así pude usar ambas a la vez. Primero inicié la captura y, mientras seguía grabando, ejecuté la alineación.
blueandme-capture --scenario H --out ~/captures/H-proxi-with-bm.log \
--tap-point "$TAP" --duration 180
blueandme-diff ~/captures/E-baseline.log ~/captures/H-proxi-with-bm.logSi $TAP es distinto entre E y H, la comparación no significa nada: antes de fiarme, comprobé que los dos archivos .meta.json coincidían.
La comparación H − E mostró los mensajes que el Body Computer espera de Blue&Me: la consulta PROXI, sus repeticiones y las consultas de estado al nodo ausente. Utilicé esta comparación en lugar de una grabación del módulo original funcionando; el mío estaba averiado y no podía darme ese ejemplo.
Ya que estaba en el software de centralitas, miré también:
- si la radio necesita un ajuste propio para activar Blue&Me / la fuente multimedia; en ese caso, enviar los mensajes CAN no sería suficiente
- si se puede leer el valor PROXI guardado en el nodo Blue&Me (el plan B, por si los nodos no comparten un mismo valor)
La comparación H − E debe mostrar diferencias. También hay que revisar la información de la radio en el software de diagnosis.
En mi coche (2026-09-21): el PROXI está resuelto.
Más o menos un segundo después de despertar la red, el Body Computer envía 1E114000#. Los nodos 400A 4003 401A contestan en milisegundos con el mismo valor de seis bytes: el valor es compartido. A un nodo que se queda callado se le dan tres reintentos, y que algo no cuadre es lo que hace parpadear el cuentakilómetros.
Apunté los seis bytes con los que contestan los nodos de mi coche. En una captura son las tramas 1E11400A, 1E114003 y 1E11401A, justo después de 1E114000#. Ese es el valor PROXI de un coche; va a la configuración de la Pi en el paso 12.
El parpadeo lo arreglé en el propio Body Computer. Su registro PROXI 2023 necesita el grupo 6F 04 00 05 en 02, "telemática presente"; lo escribió experiments/node61/write_bc_record.py, guardando un archivo para deshacer. Ese script cambia la configuración del coche: antes de usarlo hay que leer experiments/README.md en el repositorio, y antes de nada leer el registro y guardarlo. Durante la alineación la Pi contestó también a la diagnosis como unidad telemática, 61, igual que hace el cuadro con 60. Desde entonces el coche espera un nodo Blue&Me, así que el parpadeo vuelve cada vez que falta la Pi. La radio no necesita nada propio (paso 12).
04 Perfil y primera transmisión pasos 11–12
Paso 11 — Contrastar el perfil con las capturas banco
Las tramas que la Pi espera y envía están en blueandme/protocol/profiles/giulietta940.py, cada una con la grabación de mi coche en la que se vio: el ancho de 29 bits, la trama del volante con sus máscaras y todas las tramas que el nodo Blue&Me intercambia con el coche. Recibidas: la consulta de estado y la pregunta PROXI del Body Computer, y la petición multimedia de la radio. Enviadas: el estado, la respuesta PROXI, el watchdog, el tiempo de pista, el canal de audio y el texto de la pista.
Comparé el perfil con mis grabaciones antes de permitir ninguna transmisión. Los comandos siguientes muestran el perfil y decodifican las capturas. Esa comparación hay que repetirla con el coche en el que se hace el montaje:
blueandme-protocol-map --profile giulietta940
blueandme-decode ~/captures/A-ignition-on.log --summary
blueandme-decode ~/captures/C-buttons.log --summaryLas grabaciones deben contener la consulta de estado 0E094000, la petición PROXI 1E114000 y la trama del volante 06354000. Los bits del volante también deben coincidir con los botones pulsados en la captura C. Si falla alguna comprobación, el coche difiere del mío: aquí hay que parar, con la transmisión todavía desactivada.
Las capturas muestran las tramas que nombra el perfil, y blueandme-giulietta --check pasa.
Lo rápido que contesta la Pi. Reproduciendo el tráfico de mi coche hacia la aplicación en un bus virtual (experiments/node4021/app_replay.sh): PROXI contestado en 3.3 ms, la petición de la radio en 3.1 ms (su ventana es de unos 100 ms), y las 62 consultas de estado con una mediana de 3.5 ms. La aplicación solo lee las tramas del perfil; el resto lo filtra el kernel, o la Zero W contesta a la radio demasiado tarde.
Paso 12 — Primera transmisión, una trama cada vez
Si pasa algo inesperado — testigos de aviso, un módulo que se cae, la radio haciendo cosas raras — vuelvo de inmediato a solo escucha y apunto lo que he visto.
Dos comprobaciones antes de transmitir. El módulo original debe estar desconectado: dos nodos con la misma dirección entran en conflicto. El valor PROXI del paso 10 debe estar en /etc/blueandme/config.yaml, bajo can:, escrito como 12 dígitos hexadecimales entre comillas. Si está vacío, la Pi no responde a PROXI. En mi Pi el valor va incluido en la copia que ejecuta. Este ajuste solo existe en el código publicado: lo cubren las pruebas, pero todavía no lo he probado en el coche.
can:
proxi_value: "............" # your car's six bytes, 12 hex digits, in quotesblueandme-giulietta --config /etc/blueandme/config.yaml --checkDespués, un solo comando saca el controlador del modo solo escucha y deja que la aplicación envíe las tramas que se le indiquen, las seis si no se dice nada; off deshace las dos cosas:
sudo ~/giulietta-blue-me/tx.sh on # all six node frames
sudo ~/giulietta-blue-me/tx.sh on bm_status_response # or one at a time
sudo ~/giulietta-blue-me/tx.sh status
journalctl -fu blueandme-giulietta # every transmitted frame is logged
sudo ~/giulietta-blue-me/tx.sh off # back to listen-onlyMi coche aceptó las seis tramas, así que uso on con todas activadas. Si el coche se comporta de forma inesperada, se pueden probar por separado en este orden:
| # | Trama | Pregunta que responde |
|---|---|---|
| 1 | bm_status_response | ¿Deja el Body Computer de tratar el nodo como ausente? |
| 2 | bm_proxi_response | ¿Deja de parpadear el cuentakilómetros? |
| 3 | bm_watchdog | ¿Algún cambio? |
| 4 | bm_audio_channel | ¿Ofrece ahora la radio la fuente Blue&Me, y la acepta? |
| 5 | bm_track_time, bm_text_message | ¿Aparece texto en las pantallas? |
En el punto 2 ya tenía un sustituto que el coche aceptaba. El punto 4 abrió la entrada de audio de la radio. Solo entonces tenía sentido conectar la tarjeta de sonido al coche.
Cómo se ponen de acuerdo la radio y la Pi sobre la fuente. La radio pregunta con 06314005#0C…, la Pi contesta 06314021#…84 en 3–5 ms, la trama de pantalla 0A114005 pasa a E2 y la radio confirma con 04…10. Salir es 24, y se contesta …80. La Pi solo contesta cuando le preguntan: un …84 enviado sin que nadie lo pidiera fue ignorado. A veces la radio se salta su 0C; basta con pulsar MEDIA otra vez.
El script que usé en las primeras pruebas. Antes de integrar la aplicación transmití con experiments/node4021/node4021_full.py, ejecutado a mano. Sigue disponible para las pruebas que la aplicación no incluye. Lo copié, junto con car_tx.sh, al directorio personal de la Pi. Durante la prueba, car_tx.sh permite transmitir a can0; al terminar restaura el modo anterior. Si no hay tráfico en el bus, no arranca. Se ejecuta así: sudo ~/car_tx.sh 1800 --value <your PROXI value> --text.
Desde que el coche espera el módulo, la Pi se queda en tx.sh on, también tras reinicios y reinstalaciones: sin su respuesta PROXI el cuentakilómetros parpadea. El modo solo escucha (tx.sh off) solo hace falta con los cables CAN recién conectados, hasta que ip -s -d link show can0 muestre tramas llegando y ningún error. preflight.sh comprueba que el controlador y la aplicación están de acuerdo, y tanto él como car_tx.sh devuelven el modo que encontraron (car_tx.sh para la aplicación mientras dura su prueba si es ella la que transmite, y la arranca otra vez después). tx.sh status enseña el controlador y la aplicación.
Parada de emergencia
sudo ~/giulietta-blue-me/tx.sh off
# or, if that script is not there:
sudo sed -i 's/^ mode:.*/ mode: listen-only/' /etc/blueandme/config.yaml
sudo systemctl restart blueandme-giuliettaFísicamente: se desconectan CAN-H y CAN-L.
05 Audio e instalación permanente pasos 13–15
Paso 13 — Tarjeta de sonido banco
Fui preparando el audio en casa mientras avanzaba con el CAN. La Pi Zero W no tiene entrada ni salida de audio analógico. La radio recibe el sonido por los pines 5 / 22 / 21 del conector Blue&Me, y el micrófono llega por los pines 8 / 24. Usé una tarjeta de sonido USB para ambos. El audio no puede pasar por CAN: B-CAN trabaja a 50 kbit/s, frente a los 1.4 Mbit/s que necesita el sonido estéreo con calidad de CD.
La tarjeta es un adaptador Ugreen USB-A basado en un C-Media HS-100B. Se enchufa al puerto micro-USB de datos de la Zero W, el marcado USB y no PWR, con un adaptador OTG.
- Tarjeta de sonido USB Ugreen C-Media HS-100B
- Adaptador micro-USB OTG micro-B macho a USB-A hembra
- Auriculares para la prueba de salida
- Unos auriculares con micrófono para la prueba de grabación
- Multímetro para comprobar el contacto exterior del jack
| HS-100B | |
|---|---|
| USB ID | 0d8c:0014 (C-Media), USB 1.1 a velocidad completa, 100 mA |
| Nombre ALSA | Device, es decir, plughw:CARD=Device |
| Salida | estéreo, salida de auriculares. Volumen Speaker de −37 a 0 dB |
| Entrada | entrada de micrófono mono. Mic Capture de −12 a +23 dB; Auto Gain Control viene activado; install.sh lo apaga, porque las llamadas necesitan una ganancia de micrófono fija |
| Frecuencias de muestreo | Solo 48 y 44.1 kHz. Las llamadas llegan a 8 o 16 kHz, así que la Pi las remuestrea |
Mic Playback tiene que quedarse apagado. Devuelve la entrada del micrófono directamente a la salida. Viene apagado, pero en el coche mandaría el micrófono del habitáculo a la radio. blueandme-status avisa si está encendido.
El contacto exterior del jack de la salida de auriculares es una masa de verdad. El HS-100B puede trabajar con una salida "sin condensadores", en la que el contacto exterior del jack queda a una tensión de polarización en vez de a masa. Esta tarjeta no: alimentada, el contacto exterior del jack marca 0 V respecto a la carcasa metálica de su conector USB. Hay que volver a comprobarlo si algún día se cambia de tarjeta, porque un contacto exterior del jack polarizado nunca debe tocar el pin 21.
La entrada de micrófono lleva unos 3 V de polarización, en circuito abierto, pensados para micrófonos electret sencillos. Es demasiado poco para el micrófono amplificado del coche, que nunca debe conectarse directamente a ella.
Primero en un PC
lsusblista la tarjeta con el identificador de fabricante0d8c. Luego medí el contacto exterior del jack de auriculares respecto a la carcasa del conector USB: 0 V.En la Pi: encontrar la tarjeta
La enchufé con el adaptador OTG. Tanto
aplay -lcomoarecord -ltienen que listarla, comocard N: Device [USB Audio Device].Reproducir y grabar
Mandé un tono a los auriculares, luego grabé cinco segundos con su micrófono y los escuché.
speaker-test -D plughw:CARD=Device -c 2 -t sine -f 440 -l 1
arecord -D plughw:CARD=Device -f S16_LE -r 48000 -c 1 -d 5 /tmp/mic.wav
aplay -D plughw:CARD=Device /tmp/mic.wavinstall.sh pone la tarjeta como dispositivo de sonido por defecto de la Pi, por su nombre Device. Y deja el Bluetooth configurado para música y para llamadas:
| Servicio | Qué hace |
|---|---|
bluealsa | receptor de música y el lado manos libres de las llamadas (-p a2dp-sink -p hfp-hf), en bluez-alsa 4.3.1 compilado con mSBC para llamadas de banda ancha |
bluealsa-aplay | reproduce la música en la tarjeta |
blueandme-sco-route | en el arranque, le dice al chip Bluetooth de la Zero W que lleve el audio de llamada por HCI; sin él, las llamadas quedan en silencio |
blueandme-sco-aplay | reproduce a quien llama en la tarjeta, con un búfer de 150 ms |
blueandme-sco-uplink | envía el micrófono de la tarjeta al móvil. Mantiene abierto el canal de llamada mientras el móvil esté conectado, y nunca deja que el audio viejo del micrófono se acumule y se convierta en retardo |
blueandme-bt-reconnect | intenta conectar con el móvil emparejado después del arranque. Mi teléfono solo se reconectaba por su cuenta al encender su propio Bluetooth; si la Pi arrancaba después, tenía que iniciar ella la conexión |
Las llamadas son de banda ancha. El bluez-alsa de Debian (4.0) solo lleva las llamadas a 8 kHz. install.sh pone en /usr/local un bluez-alsa 4.3.1 compilado con mSBC, sacado del paquete ya compilado de packages/ o compilándolo, y con dpkg-divert lo coloca en lugar de los archivos de Debian. El móvil elige entonces mSBC, 16 kHz, en el propio chip Bluetooth de la Zero W: en el banco se oyeron palabras dichas en voz baja que a 8 kHz se perdían, y los pocos paquetes dañados (unos tres en 75 s) quedaron disimulados. sudo ./install.sh --no-wideband devuelve los archivos de Debian.
El móvil se empareja una vez. Mientras la aplicación está en solo escucha nadie contesta a las peticiones de emparejamiento, así que blueandme-pair abre el emparejamiento un rato, confía en el móvil que se empareja y lo vuelve a cerrar. Emparejé después de haber lanzado install.sh, para que el móvil viera el perfil manos libres; un móvil emparejado antes solo muestra "Media audio" y hay que olvidarlo y emparejarlo otra vez.
sudo blueandme-pair --seconds 120
# on the phone: pair with "blueandme", then check Phone calls and Media audio are onProbé primero la música y después una llamada, con auriculares en la tarjeta y un micrófono en su entrada. Las dos direcciones tienen que funcionar antes de llevar el cableado de audio al coche. Durante una llamada, journalctl -u blueandme-sco-uplink muestra cuánto audio de micrófono se ha enviado.
La Pi controla las llamadas con comandos AT por la conexión manos libres: blueandme-call answer para contestar, blueandme-call hangup para colgar y blueandme-call calls para listarlas. Cada comando muestra la respuesta del móvil y se considera correcto si recibe OK. Tras reiniciar, blueandme-bt-reconnect vuelve a conectarlo automáticamente.
Tiempos del audio de llamadas
El servicio que envía la voz al teléfono descarta el audio que lleva más de 120 ms esperando. Cuando probé arecord | aplay, se acumulaban cuatro segundos de audio entre llamadas. También separé los reproductores de música y llamadas: con uno solo, la música no volvía al colgar. Consultar Bluetooth cada tres segundos y dar más prioridad al servicio del micrófono evitó sobrecargar el único núcleo.
El volante
La aplicación instalada convierte los botones del volante en acciones del móvil, tal como las describe el manual del Blue&Me del Giulietta (604_38_194, p. 9): la acción llega al soltar el botón, y una pulsación mantenida más de un segundo es una pulsación larga. En cada pulsación le pregunta al móvil qué llamadas hay (AT+CLCC), así que nunca se descoordina. No envía nada por CAN, de modo que también funciona en solo escucha. En el banco, con los botones inyectados por el loopback del controlador (sudo ~/press.sh phone 1.5), todo esto funcionó con un móvil de verdad y una llamada de verdad (2026-09-26). Después, en el coche y con los botones reales del volante, he comprobado responder una llamada normal, colgar, rechazar una llamada, silenciar el micrófono, pasar una llamada al móvil y de vuelta, y el asistente a través del micrófono del techo.
| Botón | Qué hace |
|---|---|
| ☎ teléfono | Pulsar: contesta una llamada que está sonando, o coge la que está en espera. Mantener: rechaza una llamada que está sonando (quien llama oye que comunica), o cuelga. |
| silencio / ESC | En una llamada, silencia y reactiva el micrófono. Fuera de las llamadas, pausa y reanuda la música. También cierra el asistente. |
| voz ("Windows") | Abre el asistente del propio móvil (AT+BVRA=1), que me oye por el micrófono del coche y contesta por los altavoces. El móvil cierra la sesión él solo cuando ha contestado; su página se queda en la pantalla del móvil. |
| ▲ ▼ | Pista siguiente y anterior. En mi teléfono, la primera pulsación de Anterior vuelve al principio de la canción. |
| SRC / OK | En una llamada, la pasa al auricular del móvil y la trae de vuelta. Fuera de las llamadas, la radio lo usa para cambiar de fuente. |
| + / − | Nada en la Pi: la radio ajusta su propio volumen. |
Pasar una llamada al móvil se hace en el enlace de radio: la Pi corta el enlace de audio de la llamada (hcitool, HCI Disconnect) y el móvil se lleva la llamada a su auricular. Para traerla de vuelta está AT+BCC, que le pide al móvil que vuelva a montar el enlace. Con bluez-alsa 4.3.1 no basta con parar los reproductores: el enlace sigue en pie y la llamada se queda muda en los dos lados.
La tarjeta aparece listada para reproducción y captura, el contacto exterior del jack marca 0 V, y tanto el tono como la voz grabada se oyen por los auriculares. Después, con el móvil emparejado, suena la música, y una llamada se queda en el Bluetooth, con los dos lados oyéndose y sin retardo apreciable.
Paso 14 — Conectar el audio y el micrófono al coche
La salida de auriculares de la tarjeta va a los pines de audio del conector del Blue&Me.
| Señal | Pin del Blue&Me |
|---|---|
| Izquierdo | 5 |
| Derecho | 22 |
| Masa de audio | 21 |
El contacto exterior del jack es una masa de verdad (paso 13), así que el conector se cablea tal cual: la punta es el izquierdo, al pin 5; el anillo es el derecho, al pin 22; el contacto exterior del jack, al pin 21.
Empecé con el volumen de la tarjeta bajo, seleccioné Blue&Me y comparé de oído su nivel con FM. El ajuste se hace en la Pi con el control de volumen de la tarjeta. Después toca comprobar si hay ruido del alternador con el motor en marcha. Si lo hay, un transformador de aislamiento de audio 1:1 entre la tarjeta y el coche rompe el bucle de masa.
El micrófono. Los pines 8 (MIC+) y 24 (MIC−) llevan el micrófono de la consola del techo, que es amplificado. Necesita su propia alimentación de 5–8 V por el cable de señal, y un divisor antes de la entrada de la tarjeta, porque la tarjeta no puede alimentarlo y su señal está cerca del nivel de línea. El circuito de abajo hace las dos cosas. En otros coches del grupo la cápsula es un Telicom MIC-98, que según su hoja de datos trabaja con 5–8 V a través de 680 Ω; nadie ha confirmado que el 940 lleve el mismo, así que el circuito está pensado para medirlo antes de fiarse. Durante una llamada la aplicación también le dice a la radio por CAN que hay una llamada en curso, con el valor que usa el módulo del Doblò.
La placa de prueba del micrófono
Monté primero el circuito en una protoboard. Alimenta el micrófono del techo como hacía el módulo original, pero con menos corriente. El condensador bloquea la tensión continua y las dos resistencias reducen la señal unas doce veces antes de la entrada de micrófono de la tarjeta. Con este circuito grabé, medí el nivel, escuché la grabación e hice una llamada. El circuito de encendido con el contacto del paso 15 está en las filas 20–27 de la misma protoboard.
| Pieza | Dónde | Comprobación |
|---|---|---|
| 2 kΩ | de 1c a 5c | multímetro en Ω, con la resistencia sobre la mesa (los dedos en las dos patas dan una lectura baja): unos 2.0 k |
| 1 kΩ | de 1b a 5b, junto a la de 2 kΩ | unos 1.0 k; con las dos puestas, de la fila 1 a la fila 5 se leen unos 670 Ω. Añadida en el coche (2026-09-27): el micrófono se quedó entonces en 2.37 V en vez de 2.16 V |
| 10 µF | + en 5d, − en 8d | la pata larga es +, la franja marca el −; de 10 V o más |
| 10 kΩ | de 8c a 12c | unos 10 k |
| 1 kΩ | de 12d a la tira − | unos 1.0 k |
| Cable de micrófono | punta en 12e, contacto exterior del jack en la tira − | un cable viejo de 3.5 mm, cortado; su hilo central encintado, sin conectar; conector en la entrada MIC de la tarjeta |
| Cables del coche | 5e (pin 8), tira − (pines 24 y 15) | cables puente dupont |
| Puente de masa | de la tira − al pin 6 de la Pi | se queda puesto |
| Puente de 5 V | de 1a al pin 2 de la Pi | solo en el coche: el pin 2 está en la fila exterior, primer pin desde el extremo de la microSD |
Prueba en casa, el 2026-09-27. Retiré el puente de 5 V, conecté la punta del cable de audio a la fila 5 y su contacto de masa a la tira −. Reproduje un tono de 200 Hz desde la tarjeta: medí 520 mV en la fila 5 y 41.6 mV en la fila 12. La señal se reducía doce veces y media. La grabación salió limpia: −37.5 dBFS con 0 dB de ganancia, sin recorte. Con esa ganancia la entrada admite unos 2 V antes de saturar, así que empecé la prueba en el coche con la ganancia máxima. Si la voz hubiera quedado baja, una resistencia mayor en lugar de la de 1 kΩ habría reducido la atenuación.
Medidas de mi coche
| Medida | Valor |
|---|---|
| Del pin 8 al pin 24, con el módulo fuera | 6.5 kΩ en ambos sentidos, abierto respecto al chasis |
| Alimentado desde 5 V a través de 2 kΩ | 2.16 V, 1.4 mA |
| Alimentado a través de 2 kΩ ‖ 1 kΩ (670 Ω, el que se quedó) | 2.37 V, 4.0 mA |
| Divisor, 10 kΩ sobre 1 kΩ | ÷ 12.5 (520 mV de entrada, 41.6 mV de salida) |
| Silencio, ganancia de micrófono de la tarjeta a +23 dB | −60 dBFS |
| Habla normal | de −41 a −55 dBFS, picos de unos −25 |
| Silbido fuerte | picos de −0.8 dBFS, sin recorte |
Grabé mi voz y unos silbidos para probar el micrófono del techo; después hice una llamada. Configuré el servicio del micrófono para añadir 15 dB antes de enviar la voz al móvil (--gain-db 15 en /etc/blueandme/sco-uplink.env). La otra persona me dijo que se oía muy bien. Esa prueba completaba lo que me habían indicado las medidas.
En el coche, por orden
Reuní las pruebas de audio y alimentación para la visita al coche: el paso 14 y la parte del paso 15 que se hace allí. El orden siguiente mantiene la Pi en la batería externa hasta conectar el convertidor, al final.
En casa, antes de salir
- Saqué de la protoboard los hilos del cable de audio (la punta de su fila, el contacto exterior del jack de la tira −): a partir de ahí ese cable va a los pines de audio 5, 22, 21 del coche.
- Saqué de la fila 26 el puente provisional de 5 V (era para la prueba en banco del encendido con el contacto).
- Para el viaje quedaron sin conectar el puente de 5 V del micrófono (fila 1) y los cuatro cables del coche (pines 8, 24, 15, 32). El cable del pin 5 de la Pi y la masa del pin 6 de la Pi se quedaron puestos.
- Buck: soldé un cable rojo a IN+ y uno negro a IN−, puse tubo termorretráctil sobre los pads y pines dupont en los extremos.
- Lo que llevé: la Pi con el MCP2515 y la tarjeta de sonido, la protoboard, el power bank, el buck con un cable USB para el puerto PWR de la Pi, el cable de audio, cables dupont, una resistencia de 1 kΩ de repuesto, multímetro, móvil, tablet y un extractor de fusibles.
sudo ~/giulietta-blue-me/preflight.shtermina enPREFLIGHT PASS, y despuéssudo ~/giulietta-blue-me/tx.sh off: la Pi se queda en solo escucha mientras se ponen los cables CAN. Hay que poder llegar a la Pi estando en el coche; yo usé el punto de acceso del móvil.
En el coche, primero medir (Pi con el power bank)
- Módulo Blue&Me desenchufado, y
can0todavía en solo escucha desde casa (tx.sh status) mientras se ponen los cables CAN. - Voltios en continua, sonda negra sobre metal sin pintar: pin 16 unos 12 V con la llave quitada y también en MAR (permanente); pin 32 0 V con la llave quitada, unos 12 V en MAR (contacto).
- Al quitar el F36 (la caja de fusibles de abajo), el pin 16 tiene que caer a 0 V. Luego se vuelve a poner.
- CAN: 30 a H, 14 a L, y el cable de la tira − al pin 15.
- Cuando
ip -s -d link show can0mostró tramas llegando y ningún error:tx.sh on. A partir de ahí es la Pi la que contesta al coche. Quité el contacto y lo volví a poner: el cuentakilómetros no parpadeó.
Después, el micrófono
- Solo multímetro, con la protoboard todavía sin conectar a los pines 8 y 24: Ω del pin 8 al 24, en los dos sentidos; y del pin 8 y del pin 24 a metal sin pintar (OL).
- Puse los cables de la protoboard en los pines 8 y 24, el puente de la fila 1 en el pin 2 de la Pi y el conector del micrófono en la entrada MIC de la tarjeta.
- Con el multímetro en tensión continua, puse la punta negra en la tira − y la roja en la fila 5. Una lectura claramente inferior a 5 V indica que el micrófono consume corriente; en torno a 3–4 V es una buena referencia inicial. Una lectura por debajo de unos 2.5 V, o distorsión al silbar fuerte, puede indicar que la resistencia de 2 kΩ limita demasiado la corriente. Se puede cambiar por una de 1 kΩ o añadir una de 1 kΩ en paralelo, entre las filas 1 y 5. Yo hice lo segundo: unos 670 Ω, cerca de los 680 Ω de la ficha técnica.
- Grabé en la Pi mientras silbaba y hablaba hacia la consola del techo, y lo escuché. Como sonaba limpio, hice una llamada de prueba con el micrófono del coche.
Después, el audio y la aplicación
- Conecté el cable de audio a los pines 5 (punta), 22 (anillo) y 21 (contacto exterior), y la clavija a la salida de auriculares. Al seleccionar Blue&Me, el móvil reproduce música si la aplicación se ha usado recientemente, y la radio muestra la pista. Ajusté el volumen y comprobé si había ruido con el motor en marcha. Con la Pi aún alimentada por la batería externa, había que repetir la comprobación al pasar a la alimentación definitiva.
- El volante: saltar pista, pausa, el asistente, contestar y rechazar una llamada.
Después, el contacto (paso 15)
- Contacto quitado. Puse el cable de la fila 26 en el pin 32.
- Configuré la Pi para que lea el contacto en GPIO3. Mientras la llave va a MAR y vuelve, esa entrada tiene que verse baja en MAR y alta con el contacto quitado.
Por último, el buck (paso 15)
Nunca a la protoboard ni a un pin de la Pi. Antes de tocar el pin 16 quito el F36.
- Llave fuera. Quité el F36.
- El IN+ del buck (rojo), al pin 16; el IN− del buck (negro), a un agujero libre de la tira −, que llega al pin 15 por su cable (unos 0.1 A; en la instalación permanente el buck tiene su propio cable de masa).
- Apagué la Pi (halt). Cuando se apagó su LED, pasé el cable PWR de la Pi del power bank a la toma USB del buck.
- Volví a poner el F36: la Pi arrancó desde el coche. Hay que medir la tensión de alimentación en la Pi, porque la Zero W no tiene detector de subtensión.
- Arranqué el motor: la Pi tenía que seguir funcionando. La mía se reinició hasta que cambié el convertidor; el diodo, el condensador y los resultados de las pruebas están en el paso 15.
- Al dejarlo hay dos opciones: o se queda, funcionando desde el coche con
tx.sh on, o se viene a casa conmigo. En ese caso la apago (halt) y luego quito el F36 antes de desenchufar nada.
La música debe oírse por los altavoces del coche con volumen suficiente y sin ruido del alternador.
Mandos y pantalla de la radio
Ajusté de oído el control Speaker para igualar el volumen de FM. A −20 dB la música se quedaba corta; terminé en 0 dB, el máximo de la tarjeta, y lo guardé con alsactl store. Después escuché con el motor en marcha. No había ruido, así que no necesité un aislador de bucle de masa. Esa primera comprobación fue con la batería externa. Con la unidad alimentada por el coche y el motor en marcha tampoco hay ruido.
La radio gestiona algunos botones por su cuenta. Fuera de una llamada comunica por CAN si está silenciada, y la Pi pausa el teléfono hasta que vuelve el sonido. También leí los botones de flecha en esos mensajes. Izquierda y derecha cambian de pista; arriba y abajo ajustan el volumen Bluetooth.
El texto de la pista usa el formato del módulo del Doblò, con su juego de caracteres de 6 bits, tal como está descifrado en fiatcan, y la radio del Giulietta lo acepta. La línea de arriba muestra los primeros doce caracteres de un campo de texto, así que la Pi va pasando por él "artista - título" cada cuarto de segundo. La línea de abajo muestra otro campo, que lleva el tiempo como M:SS. Cuatro códigos de ese juego no muestran nada en esta radio y ninguno es un paréntesis, así que los paréntesis de un título se convierten en *.
Comportamientos que dependen del teléfono. La primera pulsación de Anterior reinicia la canción actual. Si la aplicación de música lleva tiempo sin usarse, el teléfono ignora Reproducir hasta que la abro. YouTube Music no responde a los comandos de avance o retroceso rápido. Una llamada de WhatsApp no se puede responder por ahora desde el volante: el botón de teléfono responde una llamada normal, pero mi móvil presenta la llamada de WhatsApp entrante en un estado que la aplicación no trata como llamada entrante.
Paso 15 — Instalación permanente
Después de comprobar el audio en el paso 14, conecté la alimentación permanente. La Pi recibe los 12 V permanentes del coche a través del fusible F36. Permanece en espera hasta 72 horas, lista para responder al PROXI cuando despierta el coche. Después se apaga. Fui añadiendo piezas cuando las pruebas mostraban que hacían falta.
Por qué dejo la Pi encendida al aparcar
El coche pregunta por PROXI más o menos un segundo después de despertar, que es cuando se abre, antes de girar la llave. Pregunta tres veces en pocos segundos. Una Pi que tiene que arrancar en ese momento llega tardísimo: en un inicio en frío el 2026-09-27 el firmware tardó unos 3.8 s, el kernel 5.6 s, y la aplicación estuvo en el bus unos 53 s después de darle corriente.
Una Pi que ya está en marcha contesta al instante: 3.3 ms reproduciendo en el banco el tráfico del coche (paso 11), 8 ms con el script supervisado de la captura ZB. En todas las pruebas hasta ahora la Pi estaba en marcha cuando despertó el coche, así que PROXI siempre tuvo respuesta y el cuentakilómetros nunca parpadeó. Lo que hace el coche cuando una Pi arranca después de que él haya despertado, como pasaría tras un aparcamiento más largo que la espera, no lo he probado.
/sbin/init. Eso requiere un kernel que arranque en unos dos segundos; en mi instalación tarda cinco y medio. Por eso mantengo la Pi en espera.El consumo que medí en espera
Medido en el banco con un medidor de potencia USB en la entrada de 5 V de la Pi (experiments/standby/). El reposo apaga Bluetooth y Wi-Fi, pone la CPU a su velocidad más baja y apaga el LED; la interfaz CAN sigue activa, en el modo que dejó tx.sh, para enterarse de que el coche despierta (en el coche: transmitiendo, para que PROXI tenga respuesta al instante).
| Estado | En la Pi | De la batería |
|---|---|---|
| Funcionando: teléfono conectado, música o una llamada | 1.0–1.07 W | motor en marcha |
| Aparcado, en reposo | 0.63 W | unos 65 mA, 1.6 Ah al día |
| 72 horas de reposo | unos 4.7 Ah, alrededor del 7 % de una batería de 70 Ah | |
| Apagada, tras la espera | 0.22 W | unos 25 mA, 0.6 Ah al día, hasta que se quita y se vuelve a poner el F36 (o hasta el encendido con el contacto, si está montado) |
Para el cálculo supuse 12.4 V y un convertidor buck con un 80 % de eficiencia. La capacidad real de la batería debe comprobarse en la etiqueta. Apagada, la Pi sigue consumiendo aproximadamente un tercio de la corriente de funcionamiento. Tres semanas aparcada suponen unos 4.7 + 11 Ah, alrededor del 22 %. Para una ausencia más larga, retiro F36 y desconecto la alimentación.
Blue&Me no está disponible con la Pi apagada. La radio no puede usar esa fuente y el PROXI queda sin respuesta. Retirar y volver a colocar F36 reinicia la Pi, que está lista en aproximadamente un minuto. Si son frecuentes las paradas largas, se puede añadir el circuito de arranque por contacto de abajo; entonces basta con dar el contacto.
Salir de la espera. blueandme-standby entra en espera tras un minuto sin tráfico con el contacto apagado. Despierta con un mensaje CAN al desbloquear el coche, o por la línea de contacto si está conectada. En mi prueba de banco con un mensaje, la música estuvo lista en 3.3 s y las llamadas en 3.7 s. Un arranque en frío tarda 33.5 y 34.2 s. El servicio solo se activa tras ver tráfico del coche; en un banco con el bus siempre silencioso no entra en espera.
La instalación
| Asunto | Cómo |
|---|---|
| Alimentación | Buck de 12 V→5 V, de grado automoción y con poco consumo en vacío, alimentado desde el pin 16 del Blue&Me (12 V permanentes) y el pin 15 (masa), siempre encendido. Al acabar la espera la Pi se apaga (unos 25 mA de la batería) hasta que se quita y se vuelve a poner el F36 o, si está montado el encendido con el contacto, hasta que se pone el contacto. El módulo USB original de 6–32 V lo cambié, tras una prueba de caída de tensión sin carga, por un módulo reductor USB TECNOIOT de 6–24 V a 5 V; con el nuevo se acabaron los reinicios al arrancar el motor (2026-10-01). El convertidor va montado dentro de la caja, a pocos centímetros del conector, para que el propio fusible del coche para la alimentación del Blue&Me cubra el cable corto igual que cubría el cableado del módulo original; un fusible en línea de 2 A solo si algún día los cables salen de la caja. En el banco, con un adaptador de 12 V, mantuvo la Pi a 4.90–4.92 V desde el arranque hasta la música (0.12–0.32 A), con un consumo en vacío despreciable (convertidor original, 2026-09-25); esa prueba a 12 V no demostraba que funcionara con tensión de entrada baja. Para ausencias largas corto la corriente quitando el fusible del coche, el F36. Nunca deben llegar 12 V a un pin GPIO. |
| PROXI | La contesta la Pi en marcha, porque está en reposo y no apagada (3.3 ms en el banco). Tras un aparcamiento más largo que la espera, la Pi está apagada hasta que se reinicia; lo que hace el coche con una respuesta tardía no lo he probado. |
| Micrófono | Soldé el circuito de micrófono del paso 14 con los valores que había medido en el coche. Adapta el micrófono a la entrada de la tarjeta de sonido. |
| Detección de contacto | El tráfico CAN despierta a una Pi en reposo sin necesidad de ningún cable. El contacto solo lo necesita una Pi apagada, tras un aparcamiento más largo que la espera: se añade solo si esos aparcamientos resultan ser habituales; hasta entonces basta con quitar el fusible y volver a ponerlo. El circuito es un transistor NPN y dos resistencias (un PN2222 de un kit de iniciación): pin 32 → 100 kΩ → base, 100 kΩ de base a masa, colector a GPIO3 (pin 5 de la cabecera), emisor a masa; un 1N4007 entre base y emisor (cátodo a la base) mantiene los picos negativos lejos de la base (power.ignition_gpio: 3, ignition_active_low: true). GPIO3 es el único pin que arranca una Pi apagada cuando se lleva a nivel bajo, y tiene su propia resistencia pull-up de 1.8 kΩ. No puse optoacoplador: la masa de la Pi es de todos modos la masa del coche. |
Todavía no he hecho que el sistema de archivos raíz sea de solo lectura. La tarjeta ha sobrevivido a los cortes hasta ahora, pero eso no demuestra que esté a salvo de daños.
El encendido con el contacto
Opcional: permite que el contacto reinicie una Pi que se ha apagado tras un aparcamiento de más de 72 horas; sin él, se quita el F36 y se vuelve a poner. Son tres piezas del kit en las filas 20–27 de la protoboard del micrófono, y comparten su tira −. Con la llave en MAR, el transistor lleva el pin 5 de la Pi (GPIO3) a masa, y una Pi apagada arranca con eso.
| Pieza | Dónde | Comprobación |
|---|---|---|
| PN2222 | E en 21c, B en 22c, C en 23c | multímetro en diodo (→|): rojo en una pata, negro en cada una de las otras; la pata que marca unos 0.6–0.7 V hacia las dos es la base (la del medio en un PN2222). Con el rojo en la base, la pata que marca un poco más es el emisor. Con el negro en la base: las dos OL (un NPN). |
| 1N4007 | franja en 22b, el otro extremo en 21b | la franja va a la fila de la base |
| 100 kΩ | de 22a a la tira − | unos 100 k, medida fuera de la placa |
| 100 kΩ | de 22d a 26d | unos 100 k |
| Puente | de 21a a la tira − | la masa del emisor |
| Cable | de 23e al pin 5 de la Pi | pin 5: la fila interior, tercer pin desde el extremo de la microSD |
| Cable | de 26e al pin 32 del coche | la línea de contacto, tal como se midió en el coche |
Probado en banco el 2026-09-27. Los 5 V de la propia Pi (pin 2) en la fila 26, haciendo de contacto, pusieron GPIO3 a 0; sin ellos, 1. Una Pi apagada arrancó en el momento de enchufarlos (apagada a las 14:38:48, de vuelta en la red a las 14:39:56). Ese puente provisional lo quité después, porque si no la Pi se reinicia cada vez que se apaga. En el coche solo hacen falta el cable del pin 32 y dos líneas de configuración (ignition_gpio: 3, ignition_active_low: true).
De 12 V a 5 V
El convertidor no se conecta a la protoboard: tiene sus propios puntos de soldadura y salida USB. Así mantengo los 12 V separados de la protoboard y de los pines de la Pi.
| Desde | Hasta | Nota |
|---|---|---|
| Pin 16 del coche (12 V permanentes) | IN+ del buck | Después del fusible F36. En el montaje definitivo pasa por el circuito de apoyo de alimentación: pin 16 → I10 de la placa; L10 de la placa → IN+ del buck |
| Masa del coche | IN− del buck | la tira − para la prueba en el coche. De forma definitiva: pin 15 → K1 de la placa, L1 de la placa → IN− del buck |
| Toma USB del buck | Puerto PWR de la Pi | un cable USB; el otro puerto de la Pi se queda con la tarjeta de sonido |
Soldado, sin protoboard
Para la instalación permanente el circuito del micrófono va soldado, con cada unión cubierta de tubo termorretráctil, porque una protoboard se afloja con las vibraciones de un coche. El encendido con el contacto va en la placa perforada del apartado siguiente. Los valores, tal como se quedaron en el coche (2026-09-27): con una de 1 kΩ junto a la de 2 kΩ el micrófono se quedó en 2.37 V (2.16 V solo con la de 2 kΩ) y grabó limpio a ganancia máxima, silbidos fuertes incluidos.
- Corté los cables a medida. Antes de soldar metí un trozo de tubo en cada cable que termina en A, B o G, y otro sobre cada pieza que iba a unir.
- La de 2 kΩ y una de 1 kΩ lado a lado, con las patas retorcidas juntas en los dos extremos (unos 670 Ω); un extremo al cable del pin 2 de la Pi.
- A: el otro extremo de la pareja, la pata + del condensador y el cable del pin 8 del coche, retorcidos y soldados. La pata − del condensador, a un extremo de la de 10 kΩ.
- B: el otro extremo de la de 10 kΩ, la segunda de 1 kΩ y el cable de la punta del conector del micrófono.
- G: el otro extremo de esa de 1 kΩ, los pines 24 y 15 del coche, el contacto exterior del jack del conector del micrófono y el cable de masa de la Pi.
- Deslicé cada tubo sobre su unión o su pieza y lo encogí (con pistola de aire caliente, o con un mechero sujeto por debajo, no dentro de la llama).
- Multímetro en Ω antes del coche: del cable del pin 2 de la Pi al cable del pin 8 del coche, unos 670 Ω; de la punta del micrófono a masa, alrededor de 1 k; del pin 8 del coche a masa, abierto.
Con la unidad ya montada en su caja, la persona a la que llamé oía un ruido grave, como de motor, y no mi voz. De vuelta en el banco (2026-10-11), el ruido de fondo de la entrada de micrófono era de −34 dBFS con +23 dB de ganancia y sin nada en el pin 8 del coche. En el coche, el 2026-09-27, con el micrófono del techo conectado y el habitáculo en silencio, había sido de unos −60. En el banco era el mismo con la batería externa y con el pin 8 del coche unido al pin 24, y desaparecía (−82) al sacar el conector del micrófono de la tarjeta. Así que entraba por el conector del micrófono, y las dos causas eran masas.
Había llevado el contacto exterior del jack del micrófono solo al pin 24 del coche y no a la unión G. Al unirlo, el ruido de fondo bajó a −40. Además, la masa de la tarjeta de sonido estaba por encima de la masa de la Pi, 60–80 mV con el conector del micrófono fuera y 30–38 mV con él puesto: unos 2 Ω en la masa de su cable USB, que había acortado y soldado a la Pi para que cupiera en la caja. Un cable corto soldado de la masa de la tarjeta a la unión G dejó esa diferencia en 4.5 mV con el conector del micrófono puesto y el ruido de fondo en −59 dBFS con el pin 8 unido al pin 24. Queda cerca de los −60 del 2026-09-27, pero no es la misma prueba: allí el micrófono estaba conectado, aquí no había micrófono y los dos pines estaban unidos.
Dos lecturas, con la alimentación conectada, encuentran las dos cosas. Con el conector del micrófono fuera: de la punta del conector al pin 24 del coche, alrededor de 1 kΩ. Con el conector puesto: milivoltios en continua entre el pin 21 del coche (la masa de la tarjeta, a través del cable de audio) y el pin 24 del coche, unos pocos milivoltios y estables. Decenas de milivoltios que oscilan son el propio ruido.
Desde los dos arreglos las llamadas vuelven a funcionar, y lo probé en el coche con la unidad ya instalada del todo (2026-10-11). La persona a la que llamo dice que oye un ligero eco. No lo he medido y me ocuparé de él más adelante.
Encendido con el contacto y apoyo de alimentación durante el arranque en una sola placa perforada
Los dos circuitos que tocan los 12 V del coche van en un solo trozo de la placa perforada del kit (agujeros metalizados, ninguno unido): 10 columnas × 24 filas, el tamaño de la placa de 3 × 7 cm (en otra placa hay que contar los agujeros). El encendido con el contacto ocupa las filas A–G; la fila H queda vacía; el apoyo de alimentación durante el arranque ocupa las filas I–X, casi todo para el condensador tumbado. Las piezas van arriba, y las conexiones se hacen por debajo con las patas dobladas y puentes de estaño. Con el condensador tumbado, la placa mide unos 21 mm de alto.
Apoyo de alimentación durante el arranque y arreglo del convertidor (2026-10-01). La Pi ya instalada se reiniciaba al arrancar el motor a pesar del condensador de 2200 µF que le había añadido. El convertidor original, anunciado para 6–32 V, daba 0 V con una fuente de banco a 10 V, incluso con la Pi desconectada y la fuente en modo de tensión constante. La salida volvía al llegar a 11 V; con la fuente a 12 V el multímetro midió 5.09 V de salida. Cambiar el convertidor acabó con los reinicios. El sustituto, un módulo reductor USB TECNOIOT de 6–24 V a 5 V, mantuvo la Pi en marcha con la fuente de banco bajada hasta 5 V; la tensión del raíl de la Pi con esa entrada no la apunté. Además, el IN− del buck apareció desconectado y lo volví a conectar antes de estas pruebas; necesita su propio retorno al pin 15. El pin 16 llega al buck a través de un diodo, con el condensador de 2200 µF montado en paralelo con IN+/IN− justo después. Hace falta un condensador de al menos 35 V; la franja del diodo mira hacia el condensador. Este arreglo no pide aumentar la capacidad. La forma de onda del arranque del coche sigue sin medirse; al calcular el tiempo de retención no hay que dar por bueno un límite de entrada anunciado de 6 V.
| Pieza | Agujeros | Comprobación |
|---|---|---|
| PN2222 | E en B3, B en B5, C en B7; cara plana hacia la fila C | E, B, C localizados antes con el multímetro, como en la tabla de la protoboard de arriba |
| 100 kΩ | de D1 a D5 (base a masa) | unos 100 k, medida fuera de la placa |
| 100 kΩ | de E5 a E9 (desde el pin 32) | unos 100 k |
| 1N4007 | de F1 a F5, franja en F5 | la franja va a la columna de la base |
| Diodo | de J10 a J6, franja en J6 | 1N5822 o 1N4007; la franja hacia el condensador |
| 2200 µF 35 V | + en L6, − en L3; cuerpo tumbado sobre las filas M–X | la pata larga es +, la franja del cuerpo marca el −. Al revés puede reventar |
| Cables | Pin 5 de la Pi B9, masa de la Pi G1, pin 32 del coche G9; pin 16 del coche I10, pin 15 del coche K1, IN+ del buck L10, IN− del buck L1 | entran por arriba, soldados por debajo |
| Pistas | B3–B1–G1, B5–F5, B7–B9, E9–G9; I10–J10, J6–K6–L6–L10, K1–L1–L3 | por debajo; ningún otro agujero unido |
- Empecé por el transistor. Abrí las patas E y C para encajarlas en B3, B5 y B7, con la cara plana hacia la fila C. Soldé por debajo sin unir los tres puntos de soldadura.
- Las dos resistencias y el 1N4007, tumbados sobre la placa, con la franja en F5; el diodo del arranque en J10–J6, con la franja en J6. Soldé, pero dejé las patas largas hasta tener hechas las pistas.
- Doblé las dos patas del condensador 90° a unos 3 mm del cuerpo: + en L6 y − en L3. Dejé el cuerpo horizontal hacia la fila X, soldé y lo fijé con pegamento. También se puede sujetar con una brida por dos agujeros libres.
- Las pistas de debajo: tumbé cada pata larga a lo largo de su pista y la soldé en los agujeros siguientes; el resto lo puenteé con estaño o con un recorte de hilo sin aislante. Contacto: B3–B1–G1, B5–F5, B7–B9, E9–G9. Arranque: I10–J10, J6–K6–L6–L10, K1–L1–L3. La fila H y todo lo demás quedan separados.
- Los siete cables entran por arriba, soldados por debajo.
- Multímetro en Ω, con nada conectado: de C a E, abierto en los dos sentidos; del cable del pin 5 de la Pi al cable de masa de la Pi, abierto; del cable del pin 32 del coche a B5, unos 100 k. Lado del arranque: del cable del pin 16 del coche al cable IN− del buck no debe marcar cerca de 0 (el condensador se carga con el multímetro, así que la lectura va subiendo); de IN+ a IN− del buck, lo mismo; en la escala de diodo, de I10 a L10 unos 0.3–0.7 V en un sentido y nada en el otro. Después, una gota de pegamento sobre las uniones de los cables.
- En el coche, con el F36 quitado, puse los cables y volví a poner el F36. Queda leer GPIO3 mientras la llave va a MAR y vuelve (0 en MAR, 1 con el contacto quitado), y ver que la Pi sigue en marcha durante un arranque del motor; la Zero W no tiene detector de tensión baja, así que
get_throttled=0x0no demuestra que la alimentación sea estable. Si se reinicia, hay que medir con un osciloscopio la entrada del buck y los 5 V de la Pi.
El arranque del motor baja la alimentación incluso con la Pi funcionando en reposo. El buck original perdía la salida en el banco con unos 10 V de alimentación; cambiarlo acabó con los reinicios que he contado. He dejado montados el diodo y el condensador de 2200 µF, y me aseguré de que el IN− del buck va cableado al pin 15. Si vuelven los reinicios, capturaré la entrada del buck y los 5 V de la Pi durante el arranque. La Zero W no puede avisar de una subtensión mediante vcgencmd get_throttled: Raspberry Pi documenta la exclusión de la gama Zero.
La Zero W no tiene reloj de tiempo real. Hasta que NTP ajusta la hora, el started_at de cada grabación es la fecha de compilación de la imagen. El hotspot del teléfono permite corregir el reloj, pero las grabaciones anteriores conservan una fecha incorrecta. Un DS3231 de unos 2 € lo resolvería; todavía no lo he montado. Con el arranque por contacto necesita otro bus I2C (dtoverlay=i2c-gpio), porque ese circuito utiliza los pines 3 y 5.
- Todavía no he completado la prueba de aparcamiento prolongado. Hay que comprobar la batería después de una noche y después de cuatro días. La Pi debe apagarse a las 72 horas;
blueandme-standbydebe registrar el apagado y Wi-Fi dejar de responder. Volver a colocar F36, o dar el contacto con el circuito de arranque instalado, debe reiniciarla. Que funcione a diario no demuestra que no descargue la batería durante una parada más larga.
Montaje de caja y conector
La caja original mide 150 × 175 × 40 mm y tiene cuatro soportes para tornillos M3. El plástico PP-TD40 deja pasar Bluetooth. Para imprimir el marco y la base de montaje hay que usar PETG o ASA; el PLA puede ablandarse en un coche aparcado. Además de revisar el diseño, hay que probarlo con los cables y clavijas reales y sujetarlo todo antes de cerrar.








Para quitar el adaptador USB, acorté el cable de la tarjeta de sonido y lo soldé a los puntos de prueba bajo la Pi. PP1 corresponde a 5 V, PP6 a masa, PP22 a D+ y PP23 a D−. La salida de 5 V del convertidor va a los pines 4 y 6 de la Pi.

El conector lleva 32 pines cuadrados de 0.64 mm, separados 2.54 mm, en una placa perforada de 2 × 16 agujeros con unos 5 mm de borde. Solo se cablean los pines necesarios. Marcar los pines 1 y 17 y comprobar que coinciden con el "1" y el "17" del enchufe antes de conectarlo.

Sujetar y aislar los cables de los pads USB. Si la tarjeta desaparece con device descriptor read/64, error -71, revisar los cables de datos y sus soldaduras. No reiniciar el controlador USB de la Zero W mediante unbind: en mi prueba hizo caer el kernel y USB no volvió hasta cortar la alimentación.
Wi-Fi mientras suena el audio
En la Zero W, Bluetooth y Wi-Fi comparten el mismo chip de radio. Medí estas pérdidas de paquetes con la Pi conectada al punto de acceso del móvil. Al apagar Wi-Fi, los cortes de música desaparecieron.
| Wi-Fi | Paquetes de audio perdidos por minuto |
|---|---|
| Wi-Fi encendido, conectado al punto de acceso, sin transferencias | 150–320 |
| Encendido, con tráfico SSH | 500–1200 |
| Apagado | 0 |
Añadí un pequeño servicio para que lo hiciera por mí. Comprueba los flujos de audio Bluetooth cada tres segundos y apaga el Wi-Fi durante la música o una llamada. Treinta segundos después de parar el audio lo vuelve a encender. Solo lo restaura si lo apagó él, así que respeta lo que haya hecho el modo de espera.
En el coche, Wi-Fi se apaga dos segundos después de empezar la música. Para entrar en la Pi por SSH, pauso la música y espero unos 40 segundos.