duzgun.org/blog
Sostituzione del Blue&Me/ Alfa Romeo Giulietta 940/ 2011 · 2.0 JTDm 140

Come ho costruito il mio sostituto del Blue&Me: guida passo passo

Ho sostituito il modulo Magneti Marelli Blue&Me guasto (50521871) con un Raspberry Pi Zero W. Risponde al Body Computer, legge i tasti al volante, riproduce la musica Bluetooth e permette di telefonare con l'autoradio originale e il microfono dell'auto.

Stato, 2026-10-12: montato sulla mia auto dal 1° ottobre 2026. L'auto lo accetta, e funzionano la musica, il testo del brano e i comandi al volante. Le chiamate funzionano di nuovo: le ho provate il 2026-10-11 con l'unità montata del tutto, dopo aver corretto al banco due difetti di massa (passo 15). La persona che chiamo sente ancora una leggera eco, che ho lasciato per più avanti.
  • Linea a 3.3 V
  • Linea a 5 V
  • Massa
  • Pericolo

01 Prima di cominciare

Nell'articolo precedente ho spiegato cos'è questo progetto e perché l'ho costruito. In questa guida racconto come l'ho fatto, in quindici passi dai primi controlli alla musica e alle chiamate in auto.

Le misure sono del mio hardware e della mia auto. Su un'altra i risultati possono cambiare. Per questo ho cominciato con misure e registrazioni, prima di trasmettere messaggi o fare altri collegamenti.

Il software è su GitHub: github.com/crimeofheart/giulietta-blue-me.

Prima, solo ascolto

Non ho trovato informazioni pubblicate sul CAN della Giulietta 940. Sono partito da fmntf/fiatcan per il Fiat Doblò 263 e karolkrupa/alfa-blue-me per l'Alfa 159. Ma descrivono altre auto e differiscono su molti identificatori. Ho confrontato i messaggi con le registrazioni della mia auto. Ogni messaggio nelle tabelle del software riporta la sua registrazione, e il controllo di trasmissione consente soltanto quelli confermati.

Alla prima installazione la trasmissione è bloccata in due punti: il controller CAN è in modalità di solo ascolto e l'elenco dei messaggi consentiti nell'applicazione è vuoto. Il sistema riceve e decodifica il traffico dell'auto, ma non può trasmettere. Ho abilitato la trasmissione al passo 12 con un comando che permette anche di disabilitarla.

Ricostruire il protocollo senza un modulo funzionante

All'inizio non avevo un modulo funzionante da registrare e l'auto era configurata senza Blue&Me. Ho quindi registrato l'auto due volte: prima com'era, poi dopo aver detto al Body Computer di aspettarsi un modulo Blue&Me. Il confronto con blueandme-diff ha mostrato cosa cercava l'auto (passo 10). In seguito ho ricavato altri identificatori dai messaggi che il modulo guasto inviava ancora, come racconto nell'articolo.

Il valore PROXI è specifico dell'auto

Il valore PROXI viene dall'auto su cui si fa il montaggio, non dal mio progetto. Sono i sei byte che i moduli inviano quando il Body Computer li interroga. Ho lasciato il mio fuori dal codice pubblicato, che lo legge da un'impostazione. Al passo 10 spiego come leggerlo da una registrazione; al passo 12, dove va nella configurazione del Pi.

Dove si svolgono le prove: banco indica il lavoro fuori dall'auto; auto, il lavoro collegato al bus del veicolo. I passi 1–6 si fanno al banco. Al passo 7 ho collegato il Pi all'auto per la prima volta, solo per ascoltare. Non ho trasmesso fino al passo 12.

Componenti necessari

Ho messo prima i componenti necessari, poi quelli facoltativi. Gli attrezzi che ho usato sono in fondo all'elenco.

ComponenteQ.tàNote
Indispensabili
Raspberry Pi Zero W, con il suo header a 40 pin1Bluetooth e Wi-Fi integrati, un core, circa 1 W di consumo. Per questo montaggio lo Zero senza W non è adatto.
Scheda microSD, 16 GB o più1Per Raspberry Pi OS Lite a 32 bit (passo 3). 16 GB è il minimo che Raspberry Pi consiglia per l'immagine Lite. La mia è una SanDisk da 64 GB.
Modulo CAN MCP2515 + TJA10501La comune scheda blu. Il quarzo può essere da 8 o da 16 MHz: bisogna leggere la scritta. Prima di usarla ho fatto due modifiche (passi 1–2). Con una scheda basata su SN65HVD230 non servono.
Scheda audio USB con uscita audio e ingresso microfono1Dovrebbe funzionare qualsiasi scheda riconosciuta da Linux come dispositivo audio USB, anche senza chip C-Media. Ho usato un adattatore Ugreen USB-A con C-Media HS-100B, uscita stereo e ingresso microfono mono. Con un'altra scheda controllerei che il contatto esterno del jack cuffie sia davvero a massa e quale nome compare in aplay -l (passo 13). Per la sola musica non serve l'ingresso microfono.
Cavo stereo da 3.5 mm1Dall'uscita cuffie della scheda ai pin audio dell'autoradio (passo 14).
Convertitore buck da 12 V a 5 V, uscita USB1Ho usato un modulo TECNOIOT con ingresso da 6–24 V e uscita USB a 5 V. Il Pi assorbe fino a circa 0.3 A. Il punto decisivo è che il convertitore continui ad alimentarlo durante l'avviamento del motore. Prima di montarlo va provato con un alimentatore regolabile (passo 15).
Pin header, passo 2.54 mm, quadri da 0.64 mm32Quattro strip da otto. Entrano direttamente nel connettore dell'auto.
Striscia di millefori, 2 × 16 fori con una cornice di 5 mm1Ritagliata da un pezzo di millefori. Tiene i 32 pin e fa da connettore verso la spina dell'auto (passo 15).
Filo per cablaggi, guaina termorestringente, collaFilo sottile per la modifica dei 5 V del passo 2.
Consigliati
Condensatore elettrolitico, 2200 µF, 35 V o più1Sostegno dell'alimentazione durante l'avviamento, in parallelo all'ingresso del buck (passo 15).
Diodo, 1N5822 o 1N40071Sostegno dell'alimentazione durante l'avviamento, tra il pin 16 e il condensatore.
Transistor PN22221Accensione sotto chiave: la chiave riavvia il Pi dopo una sosta di più di tre giorni. Senza, bisogna togliere e rimettere il fusibile F36.
Diodo, 1N40071Accensione sotto chiave, tra base ed emettitore.
Resistenza, 100 kΩ2Accensione sotto chiave.
Millefori, 3 × 7 cm110 × 24 fori, passo 2.54 mm. Ospita i circuiti di sostegno dell'alimentazione e accensione sotto chiave.
La scatola originale del Blue&Me1La custodia del modulo guasto. Si monta sulla staffa originale e la plastica lascia passare il segnale Bluetooth.
Supporto stampato: telaio e base di montaggio1PETG o ASA. Il PLA si ammorbidisce in un'auto parcheggiata.
Viti e distanziali M3, fascetteDistanziali da 4 mm sotto il modulo CAN, da 5 mm sotto il Pi. Le fascette tengono il buck e la scheda audio.
Facoltativi: chiamate in vivavoce
Cavo da 3.5 mm1Dal circuito del microfono all'ingresso microfono della scheda.
Resistenza, 2 kΩ1Alimentazione del microfono.
Resistenza, 1 kΩ2Una in parallelo alla resistenza da 2 kΩ dell'alimentazione, l'altra nel partitore.
Resistenza, 10 kΩ1Partitore del microfono.
Condensatore elettrolitico, 10 µF, 10 V o più1Impedisce alla tensione continua del microfono di arrivare alla scheda audio.
Componenti facoltativi per facilitare il montaggio
Adattatore micro-USB OTG1Per il banco. Nella scatola la scheda è saldata al Pi (passo 15).
Condensatore ceramico, 100 nF1Solo se il transceiver CAN non ne ha uno sull'alimentazione (passo 2).
Attrezzi
Multimetro, saldatore, bisturiIndispensabile. Quello che conta davvero è il multimetro.
Un telefono1Indispensabile. Quello che suonerà la musica.
Power bank USB1Indispensabile. Alimenta il Pi in tutti i lavori in auto fino al passo 15.
Adattatore OBD e MultiEcuScan su un tablet Windows1Indispensabile per l'allineamento del passo 10.
Alimentatore da banco regolabile1Consigliato. Permette di variare la tensione d'ingresso del convertitore e verificare quando smette di funzionare, prima di montarlo in auto.
Stampante 3D1Facoltativa. Per stampare il supporto e le sagome di prova.

02 Montaggio al banco passi 1–6

Passo 1 — Identificare il modulo MCP2515

Due cose che ho chiarito prima di collegare qualsiasi filo.

a) Frequenza del quarzo

Ho cominciato dalla scritta sul quarzo della scheda CAN: 8.000 significa 8 MHz, 16.000 significa 16 MHz. Una foto ravvicinata ben illuminata aiuta se la scritta si legge male. Nell'installer il valore deve essere corretto, altrimenti più avanti il bus sembrerà silenzioso anche con i collegamenti giusti.

b) Resistenza di terminazione

Senza niente collegato, ho misurato con il multimetro la resistenza tra i morsetti a vite CAN-H e CAN-L.

  • ~120 Ω → sulla scheda c'è una terminazione. Sulla mia c'era, e l'ho tolta. Sulla classica schedina blu MCP2515+TJA1050 sta proprio tra i due morsetti, con serigrafia 120R e sigla 121. Va bene dissaldarla o sollevarne un lato.
  • Decine di kΩ → nessuna terminazione. È il risultato giusto, e non è un circuito aperto: la resistenza d'ingresso differenziale del TJA1050 resta sempre tra i pin, più o meno 20–100 kΩ. Con il transceiver montato non si legge mai infinito, quindi non ha senso cercare una resistenza che non c'è.
Perché togliere la resistenza di terminazione

Il B-CAN dell'auto è già terminato ai due capi. Una terza terminazione abbassa l'impedenza differenziale e può bloccare il bus per tutti i moduli collegati, non solo per quello che si aggiunge. Due persone prima di me ci sono cascate in pieno: karolkrupa sull'Alfa 159 e un utente di fiatcan sul Doblò. Colpisce la differenza con fmntf, che un ponticello da 120 Ω l'ha aggiunto: lui stava interrogando una singola centralina isolata sul banco, dove nient'altro termina il bus. Qui banco e auto vogliono cose opposte.

Risultato dei controlli

ValoreConseguenza
Quarzo8 MHzinstall.sh --oscillator 8000000
Terminazione (121, 120 Ω)dissaldataCAN-H↔CAN-L dopo legge 45 kΩ — solo il transceiver, terminazione sparita
Condizione per andare avanti

La frequenza del quarzo è chiara, e tra CAN-H↔CAN-L si legge molto più di 120 Ω: decine di kΩ è giusto, un vero circuito aperto non c'è da aspettarselo.

Passo 2 — Risolvere il problema dei 5 V

La scheda ha un solo pin VCC che alimenta tutti e due i chip. Il problema è tutto qui.

Il transceiver TJA1050 ha bisogno di 5 V per pilotare un bus CAN: è specificato per 4.75–5.25 V e non ha una modalità a 3.3 V. Quindi la scheda va alimentata a 5 V, anche il controller MCP2515 lavora a 5 V, e un chip che lavora a 5 V porta le sue uscite a 5 V. Una di quelle uscite è MISO, e MISO entra dritta nel GPIO9 del Pi, che non tollera i 5 V e non ha diodi di clamp.

Senza modifica — una sola alimentazione a 5 VMCP2515VCC = 5.0 VMISO5.0 VGPIO9max 3.3danneggia il SoCAlimentazioni separate — controller a 3.3 VMCP2515VCC = 3.3 VMISO3.3 VGPIO9nei limitiTJA1050 sempre a 5 V
L'unica cosa che cambia è la tensione su MISO. Il cablaggio SPI, i 5 V del transceiver e il lato CAN restano com'erano.
"Sembra che funzioni" non è una prova

Una tensione eccessiva su un GPIO può danneggiarlo senza effetti subito visibili. La corrente che passa nelle strutture di protezione può deteriorare il pin nel tempo. Un'ora di funzionamento non dimostra che il collegamento sia sicuro. Ho quindi fatto la modifica prima di alimentare la scheda.

Tre possibilità

Opzione A · consigliata

Separare le alimentazioni

Ho tagliato la pista di rame tra il pin VCC della scheda e il TJA1050, poi ho saldato un filo per portare i 5 V al transceiver per conto suo.

Un taglio, un filo, nessun componente in più.

Opzione B

Traslatore di livello su MISO

La scheda resta a 5 V e si mette un traslatore 3.3 V/5 V solo sulla linea MISO, l'unica che pilota verso il Pi.

Nessun intervento sulla scheda, ma un componente in più e altre tre saldature nel percorso SPI.

Opzione C · senza interventi

Comprare una scheda a 3.3 V

Un modulo basato su SN65HVD230 lavora nativamente a 3.3 V, controller e transceiver insieme.

Non c'è proprio niente da modificare. Costa poco. Per chi non vuole tagliare la scheda è la scelta giusta.

A rigore conta solo MISO. MOSI, SCK e CS sono uscite del Pi e ingressi dell'MCP2515: il Pi manda 3.3 V in un chip a 5 V, che li legge senza problemi come livello alto. MISO e INT sono le due linee che vanno nell'altro verso, e INT è open-drain. Ecco perché l'opzione B funziona con la sola MISO. Separando le alimentazioni le sistemi tutte in un colpo.

Cosa vuol dire davvero "tagliare la pista"

Una pista è una striscia di rame stampata sulla superficie del circuito. Fa il lavoro di un filo: è piatta, larga una frazione di millimetro, incollata alla scheda e coperta dalla vernice verde che si vede (il solder mask). Ogni collegamento del modulo è una di queste.

Tagliarla vuol dire interrompere fisicamente quel rame con una lama affilata, in modo che la corrente non possa più passarci: ho raschiato una piccola fessura attraverso la pista, fino alla vetronite nuda che c'è sotto. La scheda non si taglia, e non si piega né si toglie niente. Quello che ho fatto è un'interruzione voluta in un solo collegamento, larga circa un millimetro, in una pista più sottile di un tratto di matita.

Una volta interrotta, i due capi sono elettricamente separati. A quel punto ho saldato un filo a uno dei due e l'ho alimentato da un'altra parte. La modifica è tutta qui: interrompere un collegamento, e poi rialimentarne un lato.

Prima — una pista continuapin VCCTJA1050pista di rame, sotto la vernice verdeDopo — circa 1 mm di rame raschiato viala fessuraalimenta ancora l'MCP2515 — qui i 3.3 Vora isolato — qui va il filo dei 5 V
Due viste della stessa pista, ingrandite. L'interruzione è piccola, un graffio di bisturi, ma è una separazione elettrica vera e permanente, e un multimetro la vede come circuito aperto.

Trovare la pista giusta senza tirare a indovinare

Ho individuato la pista con il multimetro anziché affidarmi al disegno di una scheda. Lo stesso controllo funziona anche con un modulo disposto diversamente dal mio. Con il multimetro sulla continuità, la sequenza è questa:

  1. Ho appoggiato un puntale sul pin VCC dell'header della scheda e l'ho lasciato lì.
  2. Con l'altro puntale ho toccato ogni pin del TJA1050 (il piccolo chip a 8 pin più vicino ai morsetti a vite del CAN) finché non ha suonato. È il pin di alimentazione: il pin 3 nel datasheet del TJA1050.
  3. Ho fatto lo stesso sull'MCP2515 (il chip più grande) per trovare il suo pin di alimentazione. Me li sono segnati tutti e due.
  4. Il rame che corre tra il pin VCC e il pin di alimentazione del TJA1050 è quello da tagliare. L'ho seguito a occhio: di solito è corto.

Così sapevo quali due pin dovevano risultare separati e potevo verificarlo con il multimetro dopo il taglio.

Il taglio dal lato del transceiver, non da quello del controller

In tutti e due i casi si ottengono le alimentazioni separate. Ma se il pin dell'header resta collegato all'MCP2515, il pin in cui si infila il ponticello è quello dei 3.3 V: più difficile da sbagliare in seguito, ed è così in tutte le guide pubblicate.

Il taglio dal lato giusto del condensatore di disaccoppiamento

Di solito c'è un piccolo condensatore sull'alimentazione del TJA1050. Deve restare con il transceiver, sul lato a 5 V del taglio. Se la scheda lì non ne ha, a lavoro finito va saldato un 100 nF tra il pin di alimentazione del transceiver e la massa.

Cosa serve

  • Saldatore a punta fine e stagno sottile
  • Bisturi o cutter da modellismo per il taglio
  • Multimetro con cicalino di continuità quello importante
  • Filo isolato sottile 28–30 AWG, ~60 mm
  • Condensatore ceramico da 100 nF solo se non c'è già
  • Lente o fotocamera del telefono per trovare la pista e controllare il taglio
  1. Prima di tutto, una foto della scheda

    Ho fotografato la scheda da vicino e con buona luce prima di modificarla. La foto serve da riferimento se durante il taglio non è più chiaro dove vanno i due lati della pista.

  2. Incidere la pista di rame

    Ho grattato via la vernice verde attraverso la pista, poi ho tagliato il rame che c'è sotto. Sono bastate due o tre passate leggere con la lama di traverso alla pista, non lungo la pista. Ho lasciato una fessura larga circa un millimetro, fino al supporto della scheda.

    Meglio più passate leggere che una pesante che scava la scheda o scivola in una pista vicina.

  3. Verificare il taglio con il multimetro

    Dal pin VCC dell'header al pin di alimentazione del TJA1050: adesso deve leggere aperto, nessun suono. Dal pin VCC dell'header al pin di alimentazione dell'MCP2515: deve suonare ancora. Se una delle due è al contrario, bisogna fermarsi e riguardare la scheda.

  4. Saldare il filo dei 5 V

    Ho stagnato il rame scoperto dal lato TJA1050 della fessura e ci ho saldato il filo. L'ho tenuto corto e l'ho fermato (va bene colla a caldo o nastro): un filo che in auto si allenta si porta via la piazzola.

  5. Controllare che non ci siano corti prima di dare tensione

    I due pin di alimentazione adesso devono essere indipendenti l'uno dall'altro, e nessuno dei due deve essere in corto verso massa. Solo dopo averlo controllato ho collegato qualcosa al Pi.

1231filo dei 5 V saldatoal TJA1050 (cerchio rosso)2transceiver TJA1050,marcato NXP TJA1050/C3terminazione 120R, marcata121 — tolta al passo 1foto: terilenard/mcp2515-tja1050-wiring
La stessa modifica su una scheda vera. Il cerchio rosso è dell'autore originale e segna dove arriva il filo dei 5 V: sul lato del taglio dove sta il transceiver. Sotto il chip si legge 120R: è la terminazione, e il componente marcato 121 è quello che ho dissaldato al passo 1.
Condizione per andare avanti

MISO non può presentare al Pi più di 3.3 V. Con il modulo alimentato e il Pi scollegato, sul pin di alimentazione dell'MCP2515 si misurano 3.3 V e su quello del TJA1050 5 V.

Passo 3 — Scrivere la scheda SD

Ho usato Raspberry Pi Imager sul mio computer.

  • Sistema operativo: Raspberry Pi OS Lite (32-bit). Non la versione desktop. Il 32 bit è obbligatorio: lo Zero W è un ARMv6.
  • In "Edit Settings" ho impostato: hostname blueandme; SSH abilitato (chiave o password); nome utente e password; SSID, password e paese del Wi-Fi.

Ho avviato il Pi alimentandolo via USB senza nient'altro collegato, ho aspettato circa due minuti e poi sono entrato con ssh <user>@blueandme.local.

Condizione per andare avanti

Riesco a collegarmi al Pi via SSH.

Passo 4 — Installare

# 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 reboot

La prima installazione richiede un po' di tempo sullo Zero W: la parte più lunga è scaricare e installare i pacchetti con apt. Se in packages/ non c'è un pacchetto pronto per quella versione del sistema, viene compilato anche bluez-alsa per le chiamate a banda larga. Servono circa dieci minuti in più (passo 13). L'installazione riduce anche il tempo di avvio disabilitando ciò che non serve su un dispositivo senza schermo: initramfs, driver di display e fotocamera, servizi per modem, dischi e tastiera. I driver CAN e Bluetooth vengono caricati all'inizio (tempi al passo 15). Con i pacchetti già presenti, ripetere l'installazione richiede circa due minuti: apt viene saltato e si reinstalla solo l'applicazione.

Condizione per andare avanti

install.sh finisce con "configuration is valid".

Passo 5 — Collegare l'MCP2515 al Pi

Prima ho spento il Pi (sudo poweroff, e ho aspettato che il LED si fermasse).

Il pin 1, prima di contare qualsiasi cosa

Tutti i numeri qui sotto sono posizioni fisiche dei pin, e hanno senso solo quando si sa da che parte dell'header sta il pin 1. Tre modi per trovarlo, dal più affidabile al meno:

  1. La piazzola quadrata. Il pin 1 è l'unica piazzola quadrata della scheda; le altre trentanove sono tonde. Se l'header è già saldato, si gira la scheda e si guardano le saldature da sotto.
  2. Il contorno serigrafato J8. Il pin 1 è l'angolo al suo interno più vicino allo slot della microSD.
  3. Lo slot della scheda. Il pin 1 è a quell'estremità dell'header, mai all'estremità opposta, dove ci sono le piazzole RUN e il secondo foro di fissaggio.

Da lì la numerazione avanza a coppie lungo l'header, allontanandosi dallo slot: 1 e 2 nell'angolo, poi 3 e 4, poi 5 e 6. I dispari restano nella fila più vicina allo slot; i pari nella fila più vicina al bordo esterno della scheda.

bordo lungo esterno della schedaJ839GND45V22INT24CS13V319MOSI21MISO23SCK◀ lo slot microSD è da questa parte — il pin 1 è quilato opposto — piazzole RUN, 2° foro di fissaggio ▶Numeri fisici dei pin, dentro ogni piazzola. I dispari: fila verso lo slot.
Disegnato com'è davvero la scheda: la fila più vicina al bordo esterno porta i pin pari, quella più vicina allo slot microSD i dispari, e il pin 1 è dal lato dello slot. Numeri fisici dei pin, non numeri GPIO. Gli otto pin cadono in tre zone: l'alimentazione nell'angolo del pin 1, l'SPI con l'interrupt a due terzi della lunghezza, e la massa del modulo in fondo, al pin 39 (il pin 6 porta la massa dell'auto, passo 7). La fotografia qui sotto è lo stesso header, con le stesse otto piazzole.
PIN 1piazzola quadrata,lato microSD14391921222324THE EIGHT PINS YOU USE — PHYSICAL NUMBERS13V3 → VCC modulo45V → filo TJA105039GND19MOSI21MISO22INT / GPIO2523SCK24CS / CE0Dispari: fila verso lo slot microSD. Pari: fila verso il bordo esterno della scheda.La numerazione avanza a coppie allontanandosi dallo slot: 1/2 nell'angolo, poi 3/4, 5/6, fino a 39/40.foto: Gareth Halfacree, CC BY-SA 2.0, da Wikimedia Commons — annotata
Gli stessi otto pin su un vero Pi Zero W. Questa scheda ha le piazzole nude invece di un header saldato, ed è questo che rende visibile il pin 1: è l'unica piazzola quadrata di tutta la scheda, e sta all'estremità più vicina allo slot della microSD, dentro il contorno serigrafato J8. Tutte le altre piazzole sono tonde. Se l'header è già saldato, basta girare la scheda: la piazzola quadrata si vede da sotto.
ModuloSegnale del PiPin fisicoNote
VCC (MCP2515, dopo il taglio)3.3 V1Alimenta solo il controller
Alimentazione TJA1050 — il filo che ho aggiunto5 V4Il pin 2 è equivalente
GNDGND39Una massa basta; va bene qualsiasi pin di massa. In questa costruzione il pin 6 porta la massa dell'auto (passo 7)
CSGPIO8 / CE024Corrisponde a spi0-0 nell'overlay
MOSIGPIO1019Il Pi pilota, il modulo ascolta
MISOGPIO921La linea che richiede di separare le alimentazioni
SCKGPIO1123Clock
INTGPIO2522Deve coincidere con interrupt=25 nell'overlay
123451morsetti a vite CAN-H / CAN-L2il filo dei 5 V aggiunto, giallo3quarzo — 8.000 o 16.0004controller MCP25155header a 8 pin, piattina verso il Pifoto: terilenard/mcp2515-tja1050-wiring
Il lavoro finito. Il filo giallo volante è tutta la modifica: parte dalla scheda all'altezza del transceiver e va a un pin a 5 V del Pi, mentre la fila dell'header qui sotto porta i 3.3 V, la massa e le quattro linee SPI.
Il secondo errore più comune

MOSI e MISO scambiati. Non fa danni, produce solo un bus che non si inizializza mai, ed è identico a un valore del quarzo sbagliato. È più facile controllare due volte in quel momento che fare debug dopo.

Ho dato tensione e ho controllato:

blueandme-status

Si deve vedere interface present ok, link state UP, bitrate 50000, bus errors 0, spidev present ok. Se can0 non esiste:

dmesg | grep -i -E "mcp251|spi"      # driver probe failures show here
ls /dev/spidev*                       # SPI enabled?
grep -E "spi|mcp2515" /boot/firmware/config.txt

mcp251x spi0.0: MCP2515 successfully initialized è quello che volevo leggere. Cannot initialize MCP2515 vuol dire quasi sempre cablaggio, oppure il valore dell'oscillatore sbagliato.

Condizione per andare avanti

blueandme-status mostra can0 attiva a 50000 con zero errori.

Passo 6 — Dimostrare che il software funziona, senza auto

Tutto si può provare su un'interfaccia CAN virtuale prima di tirare in ballo l'auto.

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 code
Condizione per andare avanti

Tutti i test devono riuscire. La mappa del protocollo deve mostrare i messaggi del profilo Giulietta.

03 In auto passi 7–10

Alimentazione, ogni volta

Per tutto il lavoro di cattura ho alimentato il Pi con un power bank USB. I 12 V dell'auto non vanno al Pi. L'USB del Pi non va all'auto. Anche il tablet da cui lo comandavo è rimasto sulla sua batteria: un tablet in carica dall'auto mentre è collegato al Pi crea proprio il percorso di massa che il power bank serve a evitare.

Passo 7 — Primo contatto: solo ascolto

Ho usato due connettori diversi, uno per il Pi e uno per il tablet. Hanno funzioni distinte.

Il Pi e le schede collegate accanto al cruscotto aperto.
Il montaggio provvisorio durante una delle prime prove in auto. La scheda audio e la breadboard che si vedono qui non fanno parte di questo passo: arrivano più avanti nella guida.
IL PI — registra il busBlue&Meconnettorelibero —modulo toltoCAN-H · pin 30CAN-L · pin 14GND · pin 15 — salta il modulo, dritto a un pin di massa del Pimodulo MCP2515H L2 morsettia viteSPIPi Zero Wsolo ascoltoUSBpower bankIL TABLET — parla con le centraline (solo passo 10)presa OBD2sotto il cruscottopin 6 / 14adattatore OBD USBtablet WindowsAlfaOBD / MultiEcuScanI due percorsi non si toccano mai. Al passo 10 i due connettori sono attivi insieme: ecco perché il Pi non usa l'OBD2.
Il Pi si attacca al connettore del Blue&Me rimasto libero. Il tablet usa la presa OBD2. Tenerli separati è ciò che permette alla cattura H di registrare il bus mentre è in corso l'allineamento che lo cambia.

Cosa bisogna cercare

La spina lato cablaggio è la metà che rimane sull'auto: corpo blu, leva nera di bloccaggio, cablaggio che entra da dietro e due file di piccole cavità quadrate sulla faccia di accoppiamento. Nella mia auto penzola libera, perché il modulo originale non c'è più. Mi sono collegato lì, e così ho potuto accedere ai segnali senza tagliare il cablaggio originale.

Le foto identificano i due connettori e i numeri stampati sul loro corpo. NON dicono che cosa porta ciascun pin: quello è nella mappa qui sotto. Nelle due foto i connettori non hanno lo stesso orientamento: vanno confrontati i numeri stampati, non le posizioni.

Connettore maschio blu nella custodia del modulo originale.
Il connettore del modulo, visto dalla faccia di accoppiamento.
Connettore femmina blu con numeri agli angoli e riferimenti del fermo.
Il connettore dell’auto, visto dalla faccia di accoppiamento; i numeri agli angoli restano visibili.
Spina auto, 32 vie — pin 16 in alto a sx, pin 32 in basso a sx, pin n+16 sotto il pin n16+12V PERM515GND314CAN-L31312111098MIC TIP1765AUD L24GND32132QUADRO43130CAN-H3292827262524MIC GND12322AUD R221AUD GND2201918171 mic2 audio3 CAN4 quadro5 12 V al buckmassanon cablato
PassoPinEtichettaCollegare a
18MIC TIP (mic +)Giunzione A del circuito del microfono: 2 kΩ ‖ 1 kΩ (circa 670 Ω, lasciati così in auto) dal pin 2 del Pi (5 V), e il reoforo + del 10 µF. Il segnale esce dalla giunzione B verso la punta dello spinotto del microfono
124MIC GND (mic −)Giunzione G, quella delle masse
25AUD LPunta dello spinotto audio
222AUD RAnello dello spinotto audio (centrale)
221AUD GNDManicotto dello spinotto audio. Lo spinotto va nell'uscita cuffie della scheda audio
330CAN-HMorsetto a vite H dell'MCP2515
314CAN-LMorsetto a vite L dell'MCP2515
315GNDGiunzione G, che porta anche la massa del Pi (pin 6). Il passo 5 aggiunge qui un secondo filo, verso il K1 della basetta (sostegno dell'alimentazione durante l'avviamento, poi IN− del buck)
432IGNITIONCircuito di accensione sotto chiave: resistenza da 100 kΩ verso la base del PN2222. Su MAR ci sono 12 V; mai collegarli direttamente a un pin del Pi
516+12V PERML'I10 della basetta: diodo e 2200 µF (sostegno dell'alimentazione durante l'avviamento), poi IN+ del buck. F36 tolto mentre lo si collega
–4GNDNiente: è di scorta. È la massa della presa USB del cassetto portaoggetti e non è dimostrato che arrivi alla carrozzeria, quindi tutti i ritorni restano sul 15
Il pin 16 è in alto a sinistra e il 32 in basso a sinistra. A destra ci sono il pin 1 (sopra) e il 17 (sotto), accanto ai numeri “1” e “17” sul corpo della spina. Ho seguito l'ordine della tabella: microfono, audio, CAN, segnale sotto chiave e, per ultimi, i 12 V del convertitore. Le posizioni tratteggiate rimangono senza filo.

La mappa dei pin

Confermata da due fonti indipendenti: una discussione tedesca su Alfa 159/Brera che documenta il connettore del modulo M162, e una discussione italiana su ClubAlfa che parla proprio del montaggio del Blue&Me su una Giulietta. Vanno d'accordo tra loro e con i numeri che questo progetto usava già.

PinFunzioneServe per
30 / 14CAN-H / CAN-L — "CAN alta" / "CAN bassa"Passo 7, la presa
15MassaPasso 7, la presa
16 / 3212 V permanenti / 12 V sotto chiaveSolo al passo 15. Fino ad allora non si toccano.
5 / 22 / 21Audio sinistro / destro / massaPasso 14
7 / 23 / 25Audio+ / Audio− / MUTE, verso l'autoradioForse al passo 14
8 / 24Microfono, dalla plafoniera. Amplificato; vuole una sua alimentazione a 5–8 VPasso 14, chiamate
3 / 19 / 20 / 4 / 31USB D+ / D− / VCC / massa / schermo, verso la presa USB dell'autoNon usati. Il VCC lo dava il modulo, quindi senza di lui la presa è probabilmente morta (non verificato)

Perché mi fido della disposizione anche se la foto è presa di sbieco. Il corpo del connettore risulta essere un TE/AMP 968265-1, che TE dà come 32 posizioni su due file a passo 2.54 mm. Nella foto la faccia di accoppiamento mostra due file. E le funzioni si accoppiano esattamente come ci si aspetta da due file da sedici: 3/19 è la coppia differenziale USB, 4/20 la sua coppia di alimentazione, 8/24 la coppia del microfono, 14/30 la coppia CAN, 16/32 le due alimentazioni a 12 V. Ogni coppia cade in una colonna. Tre indizi indipendenti che vanno d'accordo: ecco perché questo è un disegno e non un'ipotesi.

Per collegarsi senza infilare puntali nella spina, i componenti corrispondenti sono il corpo 929053-2 e i contatti 144969-1.

Per prima cosa, trovare i pin a 12 V

La colonna 16 porta tutte e due le alimentazioni a 12 V e sta proprio accanto alla massa che si cerca, in colonna 15. Una cavità più in là è la differenza tra una presa che funziona e un cortocircuito su un positivo permanente di batteria.

Quindi ho individuato il 16 e il 32 prima di andare a cercare il 30, il 14 e il 15. Ho misurato verso la carrozzeria con la chiave su MAR: quei due sono a tensione di batteria e nient'altro su questo connettore dovrebbe esserlo. Una volta trovati, ho contato partendo da lì.

Dove collegare i fili

Lato autoPin del Blue&MeVa a
CAN-H30Morsetto a vite H del modulo MCP2515
CAN-L14Morsetto a vite L del modulo MCP2515
GND15Non alla morsettiera: è a 2 vie, solo H e L. Dritto a un pin di massa libero sull'header del Pi: il 6 in questa costruzione (oppure 9, 14, 20, 25, 30, 34, 39: sono tutti lo stesso nodo)

Il collegamento di massa è necessario. Con il powerbank la massa del Pi è separata da quella dell'auto. Il CAN è differenziale, ma le tensioni agli ingressi del transceiver devono restare entro un intervallo riferito alla massa dell'auto. Ho quindi collegato le due masse. Senza questo collegamento i messaggi possono essere letti male o non essere letti.

Va bene qualsiasi pin di massa libero: sono tutti lo stesso nodo. In questa costruzione la massa dell'auto è sul pin 6, e la massa del modulo sul pin 39.

Ho verificato sulla mia auto la piedinatura trovata nelle fonti

30 / 14 / 15 vengono da quello che fmntf ha scritto sul Doblò 263. Su quest'auto sono giusti: ogni cattura dal 2026-09-13 in poi è stata fatta lì, con zero errori di bus, e sul connettore passa tutto il B-CAN, diagnosi (18DA…) compresa. Sulla presa OBD passa solo il traffico della carrozzeria, senza alcuna diagnosi, quindi le catture fatte dai due punti non si confrontano mai.

Se si scambiano CAN-H e CAN-L in questo collegamento di solo ascolto, il controller non trasmette e candump non mostra niente. L'inversione non danneggia i componenti. Quello che non è innocuo è toccare i pin 16 e 32, che portano 12 V. Vanno individuati prima e tenuti lontani dai collegamenti di segnale.

Con l'auto che dorme e un multimetro, una coppia CAN legge circa 60 Ω tra le due linee (due terminazioni da 120 Ω in parallelo) e ogni linea legge aperto verso la carrozzeria. Quando si trova è una conferma utile, ma il B-CAN è un bus a bassa velocità e può essere terminato in modo diverso, quindi una lettura diversa da 60 Ω non dimostra che i pin sono sbagliati.

Poi ascoltare

candump -e can0,#FFFFFFFF     # errors and data, everything

Ho girato la chiave su MAR. Devono comparire dei frame.

Lo stesso punto di presa per tutte le catture

Il passo 10 fa la differenza tra la cattura H e la cattura E, e due catture fatte in punti diversi del bus non sono confrontabili: la differenza mescolerebbe "frame che adesso il Body Computer si aspetta" con "frame che si vedono da un'altra parte".

La presa OBD2, e perché di norma il Pi non la usa

OBD2 / J1962, vista di fronte alla presa in auto1B-CAN-H234GND5GND6CAN-H789B-CAN-L1011121314CAN-L1516+12V6 / 14 — il CAN ad alta velocità che l'adattatore del tablet usa per AlfaOBD1 / 9 — B-CAN carrozzeria, H / L (misurato qui, cattura M); solo carrozzeria16 — 12 V permanenti. Mai toccarlo con il Pi collegatoPin 1 in alto a sinistra, di fronte; fila in alto 1–8, in basso 9–16
L'adattatore del tablet prende i pin 6 e 14. La presa è una sola, e al passo 10 serve al software per le centraline mentre il Pi registra: è tutto qui il motivo per cui il Pi si attacca invece al connettore del Blue&Me.

Il B-CAN della carrozzeria è sui pin 1 (CAN-H) e 9 (CAN-L) dell'OBD2, con la massa dal pin 4 o 5. L'ho misurato su quest'auto il 2026-09-21 a 122 frame/s, con gli ID di sempre (cattura M), e la piedinatura è stata confermata sull'auto. In una versione precedente di questa guida avevo ipotizzato i pin 3 / 11, ed era sbagliato. Come punto di presa per il traffico della carrozzeria va bene, ma la diagnosi da lì non si sente. La cattura N non contiene nemmeno un frame 18DA… lungo un allineamento PROXI, una lettura degli errori e una cancellazione degli errori. Quindi per qualsiasi lavoro di allineamento il Pi deve stare sul connettore del Blue&Me, e se l'adattatore del tablet deve condividere la presa gli serve uno sdoppiatore a Y per OBD2. Le catture M e N sono le uniche che ho fatto da qui; non le confronto con quelle fatte dal connettore.

Se non si vede niente

  1. L'auto è sveglia? La chiave deve essere su MAR, oppure una portiera aperta.
  2. Scambiare CAN-H e CAN-L. Provare non fa danni, ed è un errore comunissimo.
  3. Il filo di massa è collegato? Senza, il bus non si legge.
  4. ip -details -statistics link show can0: se il contatore bus-error sale, è sbagliato il bitrate o l'oscillatore; se resta a zero e non arrivano frame, manca il collegamento elettrico.
  5. Ricontrollare la scritta sul quarzo rispetto a quello che è stato passato a install.sh.
Condizione per andare avanti

candump mostra un flusso di frame quando la chiave è su MAR.

Passo 8 — Cattura A: 11 bit o 29 bit?

Il comando più importante di tutto il progetto. Ho fatto partire la registrazione con la chiave sfilata, poi ho girato su MAR e ho aspettato 60 secondi.

Aspettare "recording can0 ->" prima di girare la chiave

Ho aspettato che lo strumento annunciasse la registrazione prima di girare la chiave. Sullo Zero W impiega circa quattro secondi ad avviarsi, e la richiesta PROXI arriva nei primi secondi dopo il risveglio della rete. Girare la chiave subito dopo Invio può far perdere proprio il messaggio che la cattura A deve registrare. Il tempo conta anche per le registrazioni qui sotto.

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 90

Ho guardato le ultime righe dell'output:

ID widths seen: {'29-bit': 4127}   <- the answer

Controllare la larghezza dell'identificatore. Il valore previsto è 29 bit. L'autore di alfa-blue-me lo aveva indicato per la Giulietta e l'ho confermato sulla mia. Una registrazione a 11 bit riguarda un bus diverso: i messaggi di questa guida non sono applicabili. Prima di proseguire va chiarita la differenza.

blueandme-decode ~/captures/A-ignition-on.log --profile doblo263 --summary

Il profilo del Doblò è il mio modello per la struttura. Mi aspettavo che qualche ID coincidesse per caso e che la maggior parte no. Quello che conta è se regge la forma topic<<16|node: gli ID si raggruppano in un piccolo insieme di metà basse 0x40xx?

Condizione per andare avanti

La larghezza degli identificatori e l'elenco dei nodi sono chiari.

Sulla mia auto (2026-09-13): 29 bit.

Cattura A: 4157 frame su 4157 a 29 bit, zero errori di bus. Gli ID sono topic<<16 | node, come sul Doblò. Nodi: 4000 Body Computer, 4003 quadro strumenti, 4005 autoradio, e 4001 4002 4006 400A 4018 401A; il Blue&Me è il 4021.

Passo 9 — Il resto delle catture

Ho fatto un'acquisizione per ciascuno scenario, senza fretta. I confronti successivi dipendono dalla qualità di queste registrazioni.

# 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"

Poi ho cercato il frame dei tasti:

blueandme-diff ~/captures/E-baseline.log ~/captures/C-buttons.log --by bits

Ho cercato un ID il cui payload torna tutto a zero tra una pressione e l'altra e i cui bit variabili formano una maschera pulita. L'ho confrontato con le maschere che le due piattaforme di riferimento hanno in comune: 0x8000 vol+, 0x4000 vol−, 0x2000 muto, 0x0400 sorgente, 0x0080 menu, 0x0040 windows.

Condizione per andare avanti

Quattro catture su disco più un candidato per il frame dei tasti.

Sulla mia auto (2026-09-13).

Le catture A, B, E, C e F sono su disco. Il frame del volante è 06354000, dal Body Computer: lo stesso ID del Doblò, con le stesse maschere, più successivo 1000 e precedente 0800. Si ripete a 2 Hz, con un frame in più a ogni cambiamento. La cattura C contiene solo pressioni brevi.

Passo 10 — Cattura H: riallineare il PROXI con il Blue&Me

Questo fa lampeggiare il contachilometri di proposito

È reversibile: riallineando senza Blue&Me il lampeggio smette.

Con l'adattatore OBD2 e il software per le centraline ho lanciato l'allineamento PROXI con il Blue&Me presente nella configurazione del Body Computer. Il modulo fisicamente non c'era ancora, quindi il Body Computer ha cercato un nodo che non risponde mai.

Ho collegato il Pi alla spina del Blue&Me, lasciando la presa OBD2 al tablet. Potevo così usare entrambi contemporaneamente. Prima ho avviato l'acquisizione, poi ho eseguito l'allineamento mentre il Pi continuava a registrare.

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.log

Se $TAP è diverso tra E e H, il confronto non è valido. Prima di usarlo ho verificato che i due file .meta.json indicassero lo stesso punto di collegamento.

Il confronto H − E ha mostrato i messaggi che il Body Computer si aspetta dal Blue&Me: la richiesta PROXI, le ripetizioni e le richieste di stato al nodo assente. Ho usato questo confronto al posto di una registrazione del modulo originale funzionante; il mio modulo guasto non poteva fornire quell'esempio.

Già che ero nel software per le centraline, ho controllato anche:

  • se l'autoradio richiede una propria impostazione per attivare Blue&Me / la sorgente multimediale; in quel caso, trasmettere i messaggi CAN non basterebbe
  • se il valore PROXI memorizzato nel nodo Blue&Me si può leggere (il ripiego, nel caso i nodi non condividessero un solo valore)
Condizione per andare avanti

Il confronto H − E deve mostrare differenze. Va controllato anche cosa indica il software di diagnosi per l'autoradio.

Sulla mia auto (2026-09-21): il PROXI è risolto.

Circa un secondo dopo il risveglio della rete, il Body Computer manda 1E114000#. I nodi 400A 4003 401A rispondono in millisecondi con lo stesso valore di sei byte: il valore è condiviso. A un nodo che resta zitto vengono dati tre tentativi, e una mancata corrispondenza è quello che fa lampeggiare il contachilometri.

Mi sono segnato i sei byte con cui rispondono i nodi della mia auto. In una cattura sono i frame 1E11400A, 1E114003 e 1E11401A subito dopo 1E114000#. Quello è il valore PROXI di un'auto; va nella configurazione del Pi al passo 12.

Il lampeggio l'ho risolto nel Body Computer stesso. Il suo record PROXI 2023 deve avere il gruppo 6F 04 00 05 a 02, "telematica presente"; l'ha scritto experiments/node61/write_bc_record.py, tenendo un file di ripristino. Quello script cambia la configurazione dell'auto: prima di usarlo va letto experiments/README.md nel repository, e prima ancora va letto il record e messo da parte. Durante l'allineamento il Pi ha risposto anche alla diagnosi come unità telematica, 61, come fa il quadro strumenti con 60. Da allora l'auto si aspetta un nodo Blue&Me, quindi il lampeggio torna ogni volta che il Pi manca. All'autoradio non serve niente di suo (passo 12).

04 Profilo e prima trasmissione passi 11–12

Passo 11 — Confrontare il profilo con le catture banco

I frame che il Pi si aspetta e che manda stanno in blueandme/protocol/profiles/giulietta940.py, ognuno con la registrazione della mia auto in cui è stato visto: la larghezza a 29 bit, il frame del volante con le sue maschere, e tutti i frame che il nodo Blue&Me scambia con l'auto. Ricevuti: l'interrogazione di stato e la domanda PROXI del Body Computer, e la richiesta multimediale dell'autoradio. Trasmessi: lo stato, la risposta PROXI, il watchdog, il tempo del brano, il canale audio e il testo del brano.

Ho confrontato il profilo con le mie registrazioni prima di consentire qualsiasi trasmissione. I comandi qui sotto mostrano il profilo e decodificano le catture. Il confronto va ripetuto per l'auto su cui si fa il montaggio:

blueandme-protocol-map --profile giulietta940
blueandme-decode ~/captures/A-ignition-on.log --summary
blueandme-decode ~/captures/C-buttons.log --summary

Nelle registrazioni devono esserci la richiesta di stato 0E094000, la richiesta PROXI 1E114000 e il frame del volante 06354000. I bit del volante devono anche corrispondere ai tasti premuti nella cattura C. Se una verifica fallisce, l'auto è diversa dalla mia: qui ci si ferma, con la trasmissione ancora disabilitata.

Condizione per andare avanti

Le catture mostrano i frame indicati dal profilo, e blueandme-giulietta --check passa.

Quanto è veloce il Pi a rispondere. Riproducendo il traffico della mia auto verso l'applicazione su un bus virtuale (experiments/node4021/app_replay.sh): PROXI con risposta in 3.3 ms, la richiesta dell'autoradio in 3.1 ms (la sua finestra è di circa 100 ms), tutte le 62 interrogazioni di stato con una mediana di 3.5 ms. L'applicazione legge solo i frame del profilo; gli altri li filtra il kernel, altrimenti lo Zero W risponde all'autoradio troppo tardi.

Passo 12 — Prima trasmissione, un frame alla volta

Annotare ogni passo

Se succede qualcosa di inatteso — spie accese, un modulo che sparisce, l'autoradio che si comporta in modo strano — torno subito in solo ascolto e scrivo quello che ho visto.

Due controlli prima di trasmettere. Il modulo originale deve essere scollegato: due nodi con lo stesso indirizzo entrano in conflitto. Il valore PROXI del passo 10 va in /etc/blueandme/config.yaml, sotto can:, come 12 cifre esadecimali tra virgolette. Se il valore è vuoto, il Pi non risponde al PROXI. Sul mio Pi il valore è incluso nella copia che esegue. Questa impostazione esiste solo nel codice pubblicato: è coperta dai test, ma non l'ho ancora provata in auto.

can:
  proxi_value: "............"    # your car's six bytes, 12 hex digits, in quotes
blueandme-giulietta --config /etc/blueandme/config.yaml --check

Poi un solo comando toglie il controller dal solo ascolto e lascia che l'applicazione mandi i frame indicati, tutti e sei se non si dice altro; off annulla tutte e due le cose:

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-only

La mia auto li ha accettati tutti e sei, quindi on con tutti è il caso normale. Se qualcosa non torna, si va uno alla volta, in quest'ordine:

#FrameDomanda a cui risponde
1bm_status_responseIl Body Computer smette di considerare il nodo assente?
2bm_proxi_responseIl contachilometri smette di lampeggiare?
3bm_watchdogCambia qualcosa?
4bm_audio_channelAdesso l'autoradio propone, e accetta, la sorgente Blue&Me?
5bm_track_time, bm_text_messageCompare del testo sui display?

Al punto 2 avevo un sostituto accettato dall'auto. Il punto 4 ha aperto l'ingresso audio dell'autoradio. Solo allora aveva senso collegare la scheda audio all'auto.

Come si mettono d'accordo autoradio e Pi sulla sorgente. L'autoradio chiede con 06314005#0C…, il Pi risponde 06314021#…84 entro 3–5 ms, il frame del display 0A114005 passa a E2, e l'autoradio conferma con 04…10. L'uscita è 24, con risposta …80. Il Pi risponde solo se interrogato: un …84 mandato senza richiesta è stato ignorato. Ogni tanto l'autoradio salta il suo 0C; basta premere di nuovo MEDIA.

Lo script delle prime prove. Prima di integrare l'applicazione ho trasmesso con experiments/node4021/node4021_full.py, avviato a mano. È ancora disponibile per le prove non incluse nell'applicazione. L'ho copiato insieme a car_tx.sh nella home del Pi. Durante la prova, car_tx.sh abilita la trasmissione su can0 e alla fine ripristina la modalità precedente. Se sul bus non passa traffico, non parte. Si usa così: sudo ~/car_tx.sh 1800 --value <your PROXI value> --text.

In auto, trasmettere è lo stato normale

Da quando l'auto si aspetta il modulo, il Pi resta in tx.sh on, anche dopo riavvii e reinstallazioni: senza la sua risposta PROXI il contachilometri lampeggia. Il solo ascolto (tx.sh off) serve soltanto quando i fili CAN sono appena stati collegati, finché ip -s -d link show can0 non mostra frame in arrivo e nessun errore. preflight.sh controlla che controller e applicazione siano d'accordo, e sia lui sia car_tx.sh rimettono la modalità che hanno trovato (car_tx.sh ferma l'applicazione per la durata della prova se è lei a trasmettere, e dopo la fa ripartire). tx.sh status mostra il controller e l'applicazione.

Arresto di emergenza

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-giulietta

Fisicamente: si staccano CAN-H e CAN-L.

05 Audio e installazione definitiva passi 13–15

Passo 13 — Scheda audio banco

Ho preparato l'audio a casa mentre lavoravo sul CAN. Il Pi Zero W non ha ingressi né uscite audio analogiche. L'autoradio riceve il suono sui pin 5 / 22 / 21 del connettore Blue&Me, mentre il microfono arriva sui pin 8 / 24. Ho usato una scheda audio USB per entrambi. L'audio non può passare sul CAN: il B-CAN lavora a 50 kbit/s, contro gli 1.4 Mbit/s necessari per l'audio stereo in qualità CD.

La scheda è un adattatore Ugreen USB-A basato su un C-Media HS-100B. Si collega alla porta micro-USB dati dello Zero W, quella con scritto USB e non PWR, con un adattatore OTG.

  • Scheda audio USB Ugreen C-Media HS-100B
  • Adattatore micro-USB OTG da spina micro-B a presa USB-A
  • Cuffie per la prova dell'uscita
  • Cuffie con microfono per la prova di registrazione
  • Multimetro per il controllo del contatto esterno del jack
HS-100B
USB ID0d8c:0014 (C-Media), USB 1.1 full speed, 100 mA
Nome ALSADevice, quindi plughw:CARD=Device
Uscitastereo, uscita cuffie. Volume Speaker da −37 a 0 dB
Ingressoingresso microfono mono. Mic Capture da −12 a +23 dB; Auto Gain Control attivo di fabbrica; install.sh lo spegne, perché alle chiamate serve un guadagno del microfono fisso
Frequenze di campionamentoSolo 48 e 44.1 kHz. Le chiamate arrivano a 8 o 16 kHz, quindi il Pi le ricampiona

Mic Playback deve restare spento. Rimanda l'ingresso del microfono dritto all'uscita. Di fabbrica è spento, ma in auto manderebbe il microfono dell'abitacolo nell'autoradio. blueandme-status avvisa se è acceso.

Il contatto esterno del jack dell'uscita cuffie è una vera massa. L'HS-100B può lavorare con un'uscita "cap-less", in cui il contatto esterno del jack sta a una tensione di polarizzazione invece che a massa. Questa scheda no: quando è alimentata, il contatto esterno del jack legge 0 V rispetto al guscio metallico della sua spina USB. Va ricontrollato se mai si cambia scheda, perché un contatto esterno del jack polarizzato non deve mai toccare il pin 21.

L'ingresso microfono ha circa 3 V di polarizzazione, a circuito aperto, per i microfoni electret semplici. È troppo poco per il microfono amplificato dell'auto, che non va mai collegato lì direttamente.

  1. Prima su un PC

    lsusb elenca la scheda con ID produttore 0d8c. Poi ho misurato il contatto esterno del jack dell'uscita cuffie rispetto al guscio della spina USB: 0 V.

  2. Sul Pi: trovare la scheda

    L'ho collegata con l'adattatore OTG. aplay -l e arecord -l devono elencarla tutti e due, come card N: Device [USB Audio Device].

  3. Riprodurre e registrare

    Ho mandato un tono in cuffia, poi ho registrato cinque secondi dal microfono delle cuffie e li ho riascoltati.

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.wav

install.sh fa della scheda il dispositivo audio predefinito del Pi, con il suo nome Device. E configura il Bluetooth sia per la musica sia per le chiamate:

ServizioCosa fa
bluealsaricevitore della musica e lato vivavoce delle chiamate (-p a2dp-sink -p hfp-hf), in bluez-alsa 4.3.1 compilato con mSBC per le chiamate in banda larga
bluealsa-aplaymanda la musica alla scheda
blueandme-sco-routeall'avvio dice al chip Bluetooth dello Zero W di portare l'audio delle chiamate su HCI; senza, le chiamate sono mute
blueandme-sco-aplaymanda alla scheda la voce di chi chiama, con un buffer di 150 ms
blueandme-sco-uplinkmanda il microfono della scheda al telefono. Tiene aperto il canale di chiamata finché il telefono è collegato, e non lascia mai che l'audio vecchio del microfono si accumuli in ritardo
blueandme-bt-reconnectdopo l'avvio tenta di collegarsi al telefono associato. Il mio telefono si ricollegava da solo quando accendevo il suo Bluetooth; se il Pi partiva dopo, doveva iniziare lui il collegamento

Le chiamate sono in banda larga. Il bluez-alsa di Debian (4.0) porta le chiamate solo a 8 kHz. install.sh mette in /usr/local bluez-alsa 4.3.1 compilato con mSBC, dal pacchetto già pronto in packages/ oppure compilandolo, e con dpkg-divert lo sostituisce ai file di Debian. Il telefono allora sceglie mSBC, 16 kHz, sul chip Bluetooth dello Zero W stesso: sul banco sono arrivate parole dette piano che a 8 kHz si perdevano, e i pochi pacchetti danneggiati (circa tre in 75 s) sono stati mascherati. sudo ./install.sh --no-wideband rimette i file di Debian.

Il telefono si associa una volta. Finché l'applicazione è in solo ascolto nessuno risponde alle richieste di associazione, quindi blueandme-pair apre l'associazione per un po', si fida del telefono che si associa e la richiude. Ho associato dopo aver lanciato install.sh, così il telefono vede il profilo vivavoce; un telefono associato prima mostra solo "Media audio" e va dimenticato e associato di nuovo.

sudo blueandme-pair --seconds 120
# on the phone: pair with "blueandme", then check Phone calls and Media audio are on

Ho provato prima la musica, poi una chiamata, con le cuffie sulla scheda audio e un microfono nel suo ingresso. Entrambe le direzioni devono funzionare prima di portare i collegamenti audio in auto. Durante una chiamata, journalctl -u blueandme-sco-uplink mostra quanto audio del microfono è stato inviato.

Il Pi gestisce le chiamate con comandi AT sul collegamento vivavoce: blueandme-call answer per rispondere, blueandme-call hangup per riagganciare e blueandme-call calls per elencarle. Ogni comando mostra la risposta del telefono e ha esito positivo se riceve OK. Dopo un riavvio, blueandme-bt-reconnect ricollega il telefono automaticamente.

Tempi dell’audio delle chiamate

Il servizio che inoltra la voce al telefono scarta l'audio rimasto in attesa per più di 120 ms. Quando ho provato arecord | aplay, si accumulavano quattro secondi di audio tra le chiamate. Ho anche separato i riproduttori per musica e telefonate: con uno solo, la musica non ripartiva dopo aver riagganciato. Controllare il Bluetooth ogni tre secondi e dare più priorità al servizio del microfono ha evitato di sovraccaricare l'unico core.

Il volante

L'applicazione installata trasforma i tasti del volante in azioni sul telefono, come le descrive il manuale Blue&Me della Giulietta (604_38_194, p. 9): l'azione parte quando si rilascia il tasto, e una pressione tenuta più di un secondo è una pressione lunga. A ogni pressione chiede al telefono quali chiamate ci sono (AT+CLCC), così non perde mai il passo. Sul CAN non manda niente, quindi funziona anche in solo ascolto. Sul banco, con i tasti iniettati attraverso il loopback del controller (sudo ~/press.sh phone 1.5), ognuna di queste cose ha funzionato con un telefono vero e una chiamata vera (2026-09-26). In seguito, in auto e con i tasti veri del volante, ho verificato la risposta a una chiamata normale, il riaggancio, il rifiuto di una chiamata, il mute del microfono, il passaggio di una chiamata al telefono e ritorno, e l'assistente attraverso il microfono della plafoniera.

TastoCosa fa
☎ telefonoPressione: risponde a una chiamata che squilla, o prende quella in attesa. Tenuto premuto: rifiuta una chiamata che squilla (chi chiama sente occupato), o chiude la chiamata.
muto / ESCIn chiamata silenzia e riattiva il microfono. Fuori dalle chiamate mette in pausa e fa ripartire la musica. Chiude anche l'assistente.
voce ("Windows")Apre l'assistente del telefono (AT+BVRA=1), che mi sente dal microfono dell'auto e risponde dagli altoparlanti. Il telefono chiude da solo la sessione dopo aver risposto; la sua pagina resta sullo schermo del telefono.
▲ ▼Brano successivo e precedente. Sul mio telefono, la prima pressione di Precedente riporta all'inizio del brano.
SRC / OKDurante una chiamata passa l'audio al telefono; premendo di nuovo lo riporta in auto. Fuori dalle chiamate, l'autoradio usa questo tasto per cambiare sorgente.
+ / −Sul Pi niente: il volume lo regola l'autoradio.

Per passare la chiamata al telefono, il Pi interrompe il collegamento audio Bluetooth (hcitool, HCI Disconnect). Il telefono sposta quindi l'audio sulla propria capsula auricolare. Per riportarlo in auto uso AT+BCC, che chiede al telefono di ristabilire il collegamento. Con bluez-alsa 4.3.1 fermare i riproduttori non basta: la connessione rimane attiva, ma nessuna delle due persone sente più l'altra.

Condizione per andare avanti

La scheda è elencata per riproduzione e registrazione, il contatto esterno del jack legge 0 V, e sia il tono sia la voce registrata si sentono in cuffia. Poi, con il telefono associato, la musica suona, e una chiamata resta sul Bluetooth, con i due lati che si sentono e senza ritardo percepibile.

Passo 14 — Portare audio e microfono all'auto

L'uscita cuffie della scheda va ai pin audio del connettore del Blue&Me.

SegnalePin del Blue&Me
Sinistro5
Destro22
Massa audio21

Il contatto esterno del jack è una vera massa (passo 13), quindi lo spinotto si collega pari pari: la punta è il sinistro, al pin 5; l'anello è il destro, al pin 22; il contatto esterno del jack al pin 21.

Sono partito con il volume della scheda basso, ho selezionato Blue&Me e confrontato a orecchio il livello con la radio FM. La regolazione si fa sul Pi con il controllo della scheda. Poi va verificato se c'è ronzio dell'alternatore con il motore acceso. Se c'è, un trasformatore di isolamento audio 1:1 fra la scheda e l'auto interrompe l'anello di massa.

Il microfono. I pin 8 (MIC+) e 24 (MIC−) portano il microfono della plafoniera, che è amplificato. Vuole una sua alimentazione a 5–8 V sul filo di segnale, e un partitore prima dell'ingresso della scheda, perché la scheda non può alimentarlo e il suo segnale è vicino al livello di linea. Il circuito qui sotto fa tutte e due le cose. Su altre auto del gruppo la capsula è un Telicom MIC-98, che secondo il datasheet lavora a 5–8 V attraverso 680 Ω; nessuno ha confermato che la 940 monti lo stesso, quindi il circuito l'ho fatto in modo da poterlo misurare prima di fidarmi. Durante una chiamata l'applicazione dice anche all'autoradio, via CAN, che c'è una chiamata in corso, con il valore usato dal modulo del Doblò.

La basetta di prova del microfono

Ho montato prima il circuito su breadboard. Alimenta il microfono della plafoniera come faceva il modulo originale, ma con meno corrente. Il condensatore blocca la tensione continua e le due resistenze riducono il segnale di circa dodici volte prima dell'ingresso della scheda audio. Con questo circuito ho registrato, misurato il livello, riascoltato e fatto una telefonata. Il circuito di accensione sotto chiave del passo 15 occupa le righe 20–27 della stessa breadboard.

−abcde1234567891011121314151617ponticello → pin 2 del Pi (5 V) · solo in auto2 kΩ ‖ 1 kΩ1 kΩ in b: circa 670 Ω+10 µFreoforo lungo (+) in alto10 kΩ1 kΩfilo → pin 8 autocavo mic · puntaspinotto nell'ingresso MIC della schedacavo mic · manicottofilo → pin 24 autoponticello → pin 6 del Pi (GND)filo → pin 15 (massa CAN) · solo auto
I fori a–e di ogni riga sono collegati tra loro; le righe tra loro no; la striscia − è un unico lungo collegamento. Turchese: segnale; grigio: massa; tratteggiato: solo in auto. Il pin 6 del Pi sulla striscia è la massa del Pi, che arriva all'auto attraverso il filo del pin 15.
ComponenteDoveControllo
2 kΩda 1c a 5cmultimetro in Ω, con la resistenza appoggiata sul tavolo (con le dita sui due reofori legge di meno): circa 2.0 k
1 kΩda 1b a 5b, accanto a quella da 2 kΩcirca 1.0 k; con tutte e due montate, dalla riga 1 alla riga 5 si leggono circa 670 Ω. Aggiunta in auto (2026-09-27): a quel punto il microfono stava a 2.37 V invece di 2.16 V
10 µF+ in 5d, − in 8dil reoforo lungo è il +, la banda segna il −; da 10 V o più
10 kΩda 8c a 12ccirca 10 k
1 kΩda 12d alla striscia −circa 1.0 k
Cavo del microfonopunta in 12e, contatto esterno del jack nella striscia −un vecchio cavo da 3.5 mm, tagliato; il filo centrale nastrato, non collegato; spinotto nell'ingresso MIC della scheda
Fili verso l'auto5e (pin 8), striscia − (pin 24 e 15)cavetti jumper dupont
Ponticello di massadalla striscia − al pin 6 del Piresta collegato
Ponticello dei 5 Vda 1a al pin 2 del Pisolo in auto: il pin 2 è nella fila esterna, il primo pin dal lato della microSD

Prova a casa, il 2026-09-27. Ho tolto il ponticello dei 5 V, collegato la punta del cavo audio alla riga 5 e il contatto di massa alla striscia −. Ho riprodotto dalla scheda un tono a 200 Hz: misuravo 520 mV sulla riga 5 e 41.6 mV sulla riga 12. Il segnale si riduceva di dodici volte e mezza. La registrazione era pulita: −37.5 dBFS a 0 dB di guadagno, senza clipping. Con quel guadagno l'ingresso regge circa 2 V prima di saturare, quindi in auto ho iniziato con il guadagno massimo. Se la voce fosse risultata bassa, una resistenza più grande al posto di quella da 1 kΩ avrebbe ridotto l'attenuazione.

Misure sulla mia auto

MisuraValore
Dal pin 8 al pin 24, modulo scollegato6.5 kΩ nei due versi, aperto verso la carrozzeria
Alimentato da 5 V attraverso 2 kΩ2.16 V, 1.4 mA
Alimentato attraverso 2 kΩ ‖ 1 kΩ (670 Ω, tenuto così)2.37 V, 4.0 mA
Partitore, 10 kΩ su 1 kΩ÷ 12.5 (520 mV in ingresso, 41.6 mV in uscita)
Silenzio, guadagno mic della scheda a +23 dB−60 dBFS
Parlato normaleda −41 a −55 dBFS, picchi intorno a −25
Fischio fortepicchi a −0.8 dBFS, nessun clipping

Per provare il microfono della plafoniera ho registrato la mia voce e qualche fischio, poi ho fatto una telefonata. Ho impostato un guadagno di 15 dB prima di inviare l'audio al telefono (--gain-db 15 in /etc/blueandme/sco-uplink.env). Dall'altra parte mi hanno detto che la voce arrivava molto bene. Era la conferma pratica delle misure.

In auto, in ordine

Ho riunito le prove audio e di alimentazione per il lavoro in auto: il passo 14 e la parte in auto del passo 15. L'ordine qui sotto lascia il Pi sul power bank fino al collegamento finale del convertitore.

A casa, prima di uscire

  1. Ho tolto dalla breadboard i fili del cavo audio (la punta dalla sua riga, il contatto esterno del jack dalla striscia −): da lì in poi quel cavo va ai pin audio 5, 22, 21 dell'auto.
  2. Ho tolto dalla riga 26 il ponticello provvisorio dei 5 V (serviva per la prova al banco del accensione sotto chiave).
  3. Per il viaggio sono rimasti scollegati il ponticello dei 5 V del microfono (riga 1) e i quattro fili verso l'auto (pin 8, 24, 15, 32). Il filo del pin 5 del Pi e la massa sul pin 6 del Pi sono rimasti collegati.
  4. Buck: ho saldato un filo rosso su IN+ e uno nero su IN−, ho messo guaina termorestringente sulle piazzole e pin dupont alle estremità.
  5. Cosa ho portato: il Pi con MCP2515 e scheda audio, la breadboard, il power bank, il buck con un cavo USB per la porta PWR del Pi, il cavo audio, cavetti dupont, una resistenza da 1 kΩ di scorta, multimetro, telefono, tablet, una pinzetta estrai-fusibili.
  6. sudo ~/giulietta-blue-me/preflight.sh finisce con PREFLIGHT PASS, poi sudo ~/giulietta-blue-me/tx.sh off: il Pi resta in solo ascolto mentre si collegano i fili CAN. In auto bisogna poter raggiungere il Pi; io ho usato l'hotspot del telefono.

In auto, prima misurare (Pi sul power bank)

  1. Modulo Blue&Me scollegato, can0 ancora in solo ascolto da casa (tx.sh status) mentre si collegano i fili CAN.
  2. Volt in continua, puntale nero su metallo nudo: pin 16 circa 12 V sia a chiave spenta sia su MAR (permanente); pin 32 0 V a chiave spenta, circa 12 V su MAR (sotto chiave).
  3. Togliendo l'F36 (la scatola fusibili qui sotto) il pin 16 deve scendere a 0 V. Poi si rimette.
  4. CAN: il 30 su H, il 14 su L, e il filo della striscia − al pin 15.
  5. Quando ip -s -d link show can0 ha mostrato frame in arrivo e nessun errore: tx.sh on. Da lì in poi è il Pi a rispondere all'auto. Ho spento e riacceso il quadro: il contachilometri non ha lampeggiato.

Poi il microfono

  1. Solo multimetro, con la basetta ancora staccata dai pin 8 e 24: Ω dal pin 8 al 24, nei due versi; pin 8 e pin 24 verso metallo nudo (OL).
  2. Ho messo i fili della basetta sui pin 8 e 24, il ponticello della riga 1 sul pin 2 del Pi e lo spinotto del microfono nell'ingresso MIC della scheda.
  3. Con il multimetro in tensione continua, ho messo il puntale nero sulla striscia − e il rosso sulla riga 5. Una lettura nettamente inferiore a 5 V indica che il microfono assorbe corrente; circa 3–4 V è un buon riferimento iniziale. Meno di circa 2.5 V, oppure distorsione sui fischi forti, può indicare che la resistenza da 2 kΩ limita troppo la corrente. Si può sostituirla con una da 1 kΩ o aggiungerne una da 1 kΩ in parallelo, tra le righe 1 e 5. Ho scelto la seconda soluzione: circa 670 Ω, vicini ai 680 Ω del datasheet.
  4. Ho registrato sul Pi mentre fischiavo e parlavo verso la plafoniera, e ho riascoltato. Suonava pulito, quindi ho fatto una chiamata di prova con il microfono dell'auto.

Poi l'audio e l'applicazione

  1. Ho collegato il cavo audio ai pin 5 (punta), 22 (anello) e 21 (contatto esterno), e lo spinotto all'uscita cuffie. Selezionando Blue&Me, il telefono riproduce musica se l'app è stata usata di recente, e la radio mostra il brano. Ho regolato il volume e ascoltato a motore acceso per cercare eventuali ronzii. Con il Pi ancora sul power bank, la prova andava ripetuta dopo il passaggio all'alimentazione definitiva.
  2. Il volante: salto traccia, pausa, l'assistente, rispondere e rifiutare una chiamata.

Poi il sotto chiave (passo 15)

  1. Chiave spenta. Ho messo il filo della riga 26 sul pin 32.
  2. Ho impostato il Pi perché legga il sotto chiave su GPIO3. Mentre la chiave va su MAR e torna indietro, quell'ingresso deve risultare basso su MAR e alto da spenta.

Per ultimo, il buck (passo 15)

I 12 V vanno solo e soltanto all'IN+ del buck

Mai alla breadboard e mai a un pin del Pi. Prima di toccare il pin 16 tolgo l'F36.

  1. Chiave sfilata. Ho tolto l'F36.
  2. IN+ del buck (rosso) sul pin 16; IN− del buck (nero) in un foro libero della striscia −, che arriva al pin 15 con il suo filo (circa 0.1 A; nell'installazione definitiva il buck ha un filo di massa tutto suo).
  3. Ho spento il Pi (halt). Quando il suo LED si è spento, ho spostato il cavo PWR del Pi dal power bank alla presa USB del buck.
  4. Ho rimesso l'F36: il Pi si è avviato dall'auto. La tensione di alimentazione va misurata sul Pi, perché lo Zero W non ha un rilevatore di sottotensione.
  5. Ho avviato il motore: il Pi doveva restare acceso. Il mio si è resettato finché non ho cambiato il convertitore; il diodo, il condensatore e i risultati delle prove sono al passo 15.
  6. Per lasciarlo ci sono due possibilità: o resta lì, alimentato dall'auto con tx.sh on, oppure torna a casa con me. In quel caso lo spengo (halt), poi tolgo l'F36 prima di scollegare qualsiasi cosa.
Il fusibile del Blue&Me, F36: in fondo alla colonna di destra di questa scatola fusibili (schema dal libretto di uso e manutenzione). Tolto, stacca i 12 V permanenti del Pi sul pin 16; conviene controllarlo una volta con il multimetro.
Condizione per andare avanti

La musica deve sentirsi dagli altoparlanti con volume sufficiente e senza rumore dell'alternatore.

Comandi e display della radio

Ho regolato a orecchio il livello Speaker della scheda per pareggiare il volume della radio FM. A −20 dB la musica era troppo bassa; sono arrivato a 0 dB, il massimo della scheda, e l'ho salvato con alsactl store. Poi ho ascoltato con il motore acceso. Non c'era ronzio, quindi non ho avuto bisogno di un isolatore di massa. Quel primo controllo era con il power bank. Anche con l'unità alimentata dall'auto e il motore acceso non c'è ronzio.

Alcuni tasti sono gestiti direttamente dalla radio. Fuori da una chiamata comunica sul CAN se è in mute, e il Pi mette in pausa il telefono finché l'audio non viene riattivato. Ho letto da questi messaggi anche le frecce della radio. Sinistra e destra cambiano brano; su e giù regolano il volume Bluetooth.

Il testo del brano usa il formato del modulo del Doblò, con il suo set di caratteri a 6 bit, come decodificato in fiatcan, e l'autoradio della Giulietta lo accetta. La riga in alto mostra i primi dodici caratteri di un campo di testo, quindi il Pi ci fa scorrere "artista - titolo" ogni quarto di secondo. La riga in basso mostra un altro campo, che porta il tempo come M:SS. Quattro codici di quel set su questa radio non mostrano niente e nessuno è una parentesi, quindi le parentesi in un titolo diventano *.

Comportamenti che dipendono dal telefono. La prima pressione di Precedente fa ripartire il brano corrente. Se l'app musicale è rimasta inattiva, il telefono ignora Riproduci finché non la apro. YouTube Music non esegue i comandi di avanzamento o riavvolgimento rapido. Per ora una chiamata WhatsApp non si può accettare dal volante: il tasto telefono risponde a una chiamata normale, ma il mio telefono riporta la chiamata WhatsApp in arrivo in uno stato che l'applicazione non considera una chiamata in arrivo.

Passo 15 — Installazione definitiva

Dopo aver verificato l'audio al passo 14, ho collegato l'alimentazione permanente. Il Pi riceve i 12 V permanenti dell'auto attraverso il fusibile F36. Rimane in standby fino a 72 ore, pronto a rispondere al PROXI quando l'auto si risveglia. Poi si spegne. Ho aggiunto altri componenti quando le prove ne hanno mostrato la necessità.

Perché il Pi resta acceso in parcheggio

L'auto chiede il PROXI circa un secondo dopo essersi svegliata, cioè quando la si apre, prima di girare la chiave. Chiede tre volte nel giro di pochi secondi. Un Pi che deve avviarsi in quel momento arriva troppo tardi, e di molto: in un avvio a freddo il 2026-09-27 il firmware ci ha messo circa 3.8 s, il kernel 5.6 s, e l'applicazione era sul bus circa 53 s dopo l'accensione.

Un Pi già acceso risponde subito: 3.3 ms riproducendo sul banco il traffico dell'auto (passo 11), 8 ms dallo script sorvegliato nella cattura ZB. In tutte le prove fatte finora il Pi era acceso quando l'auto si è svegliata, quindi al PROXI è sempre arrivata risposta e il contachilometri non ha mai lampeggiato. Cosa fa l'auto quando un Pi parte solo dopo il suo risveglio, come succederebbe dopo una sosta più lunga dell'attesa, non l'ho provato.

Avvio a freddo contro il controllo PROXI dell'auto, misurato su questo Pil'auto chiede il PROXI, tre volte← un Pi già acceso risponde in 3 msPi a freddo: firmware 3.8 s, poi kernel 5.6 sla sua app sul bus a ~53 s, fuori scala →0 saccensione10 s20 s30 s40 sAvvio a freddo 2026-09-27: systemd-analyze e il journal; tempo del firmware dal log dei consumi.
Quando l'auto finisce di controllare i moduli, il kernel non è ancora partito. fmntf risponde al PROXI da initramfs, prima di /sbin/init. Per riuscirci serve un kernel che si avvii in circa due secondi; nella mia installazione ne impiega cinque e mezzo. Per questo tengo il Pi in standby.

Il consumo che ho misurato in standby

Misurato sul banco con un misuratore di potenza USB sull'ingresso a 5 V del Pi (experiments/standby/). Lo standby spegne Bluetooth e Wi-Fi, mette la CPU alla velocità minima e spegne il LED; l'interfaccia CAN resta attiva, nella modalità impostata da tx.sh, per accorgersi che l'auto si sveglia (in auto: in trasmissione, così al PROXI si risponde subito).

StatoAl PiDalla batteria
In funzione: telefono collegato, musica o una chiamata1.0–1.07 Wmotore acceso
Parcheggiata, standby0.63 Wcirca 65 mA, 1.6 Ah al giorno
72 ore di standbycirca 4.7 Ah, più o meno il 7 % di una batteria da 70 Ah
Spento, dopo lo standby0.22 Wcirca 25 mA, 0.6 Ah al giorno, finché non si toglie e si rimette l'F36 (o fino al circuito di accensione sotto chiave, se è montato)

Per il calcolo ho assunto 12.4 V e un convertitore buck con efficienza dell'80 %. La capacità reale della batteria va letta sull'etichetta. Il Pi spento assorbe ancora circa un terzo della corrente di funzionamento. Tre settimane di parcheggio consumano circa 4.7 + 11 Ah, intorno al 22 %. Per assenze più lunghe tolgo F36 e interrompo l'alimentazione.

Blue&Me non è disponibile quando il Pi è spento. La radio non può usare la sorgente e il PROXI resta senza risposta. Togliendo e rimettendo F36 il Pi riparte ed è pronto in circa un minuto. Se le soste lunghe sono frequenti si può aggiungere il circuito di risveglio dal quadro descritto sotto; basta poi girare la chiave.

Risveglio dallo standby. blueandme-standby entra in standby dopo un minuto senza traffico, a quadro spento. Si risveglia con un messaggio CAN quando si sblocca l'auto, oppure dalla linea del quadro se collegata. Nella mia prova al banco con un messaggio, la musica era pronta in 3.3 s e le chiamate in 3.7 s. Da spento servono 33.5 e 34.2 s. Il servizio si attiva solo dopo aver visto traffico dell'auto: sul banco, con bus sempre silenzioso, non entra in standby.

L'installazione

AspettoCome
AlimentazioneBuck da 12 V→5 V, di tipo automotive, con basso assorbimento a vuoto, dal pin 16 del Blue&Me (12 V permanenti) e dal pin 15 (massa), sempre acceso. Alla fine dell'attesa il Pi si spegne (circa 25 mA dalla batteria) finché non si toglie e si rimette l'F36 o, con il circuito di accensione sotto chiave montato, finché non si accende il quadro. Il modulo USB originale da 6–32 V l'ho sostituito, dopo una prova di dropout a vuoto, con un modulo step-down USB TECNOIOT da 6–24 V a 5 V; il sostituto ha risolto i reset all'avviamento (2026-10-01). Il convertitore è montato dentro la scatola, a pochi centimetri dal connettore, così il fusibile dell'auto per l'alimentazione del Blue&Me protegge il tratto corto di filo come proteggeva il cablaggio del modulo originale; un fusibile in linea da 2 A solo se i fili dovessero uscire dalla scatola. Sul banco, da un alimentatore a 12 V, ha tenuto il Pi a 4.90–4.92 V dall'avvio fino alla musica (0.12–0.32 A), con un assorbimento a vuoto trascurabile (convertitore originale, 2026-09-25); quella prova a 12 V non ha dimostrato il funzionamento a tensione d'ingresso bassa. Per le assenze lunghe stacco tutto togliendo il fusibile dell'auto, l'F36. A un pin GPIO i 12 V non devono arrivare mai.
PROXICi risponde il Pi acceso, perché è in standby e non spento (3.3 ms sul banco). Dopo una sosta più lunga dell'attesa il Pi è spento finché non lo riavvii; cosa fa l'auto con una risposta in ritardo non l'ho provato.
MicrofonoHo saldato il circuito del microfono del passo 14 usando i valori misurati in auto. Adatta il microfono all'ingresso della scheda audio.
Rilevamento del sotto chiaveIl traffico CAN sveglia un Pi in standby, senza nessun filo. Solo un Pi spento, dopo una sosta più lunga dell'attesa, ha bisogno del sotto chiave: si aggiunge solo se soste del genere si rivelano frequenti; fino ad allora basta togliere e rimettere il fusibile. Il circuito è un transistor NPN e due resistenze (un PN2222 da uno starter kit): pin 32 → 100 kΩ → base, 100 kΩ tra base e massa, collettore a GPIO3 (pin 5 dell'header), emettitore a massa; un 1N4007 tra base ed emettitore (catodo sulla base) tiene i picchi negativi lontani dalla base (power.ignition_gpio: 3, ignition_active_low: true). GPIO3 è l'unico pin che fa partire un Pi spento quando viene tirato basso, e ha la sua pull-up da 1.8 kΩ. Non ho messo un optoisolatore: la massa del Pi è comunque la massa dell'auto.

Non ho ancora reso il filesystem radice di sola lettura. La scheda ha superato finora le interruzioni di corrente, ma questo non dimostra che sia al sicuro dai danni.

Accensione sotto chiave

Facoltativo: permette al quadro di riavviare un Pi che si è spento dopo una sosta di più di 72 ore; senza, si toglie l'F36 e lo si rimette. Tre componenti del kit sulle righe 20–27 della breadboard del microfono, con la sua stessa striscia −. Quando la chiave è su MAR, il transistor tira a massa il pin 5 del Pi (GPIO3), e un Pi spento parte.

−abcde20212223242526271N4007100 kΩEBCPN2222100 kΩfilo → pin 5 del Pi (GPIO3)tirato a massa quando la chiave è su MARfilo → pin 32 auto (sotto chiave)12 V su MAR: mai su un pin del Pi
Ambra: 12 V dall'auto, mai su un pin del Pi; turchese: verso il Pi; grigio: massa. Su una breadboard lunga bisogna controllare che la striscia − non abbia un'interruzione (uno stacco nella linea blu) prima della riga 27.
ComponenteDoveControllo
PN2222E in 21c, B in 22c, C in 23cmultimetro in prova diodi (→|): rosso su un piedino, nero su ciascuno degli altri; il piedino che legge circa 0.6–0.7 V verso tutti e due è la base (il piedino centrale nel PN2222). Con il rosso sulla base, il piedino che legge leggermente di più è l'emettitore. Nero sulla base: tutti e due OL (un NPN).
1N4007banda in 22b, l'altro capo in 21bla banda va sulla riga della base
100 kΩda 22a alla striscia −circa 100 k, misurata fuori dalla basetta
100 kΩda 22d a 26dcirca 100 k
Ponticelloda 21a alla striscia −la massa dell'emettitore
Filoda 23e al pin 5 del Pipin 5: la fila interna, il terzo pin dal lato della microSD
Filoda 26e al pin 32 dell'autola linea del sotto chiave, come misurata in auto

Provato al banco il 2026-09-27. I 5 V del Pi stesso (pin 2) sulla riga 26, al posto del sotto chiave, hanno portato GPIO3 a 0; senza, 1. Un Pi spento è partito nel momento in cui li ho collegati (spento alle 14:38:48, di nuovo in rete alle 14:39:56). Quel ponticello provvisorio dopo l'ho tolto, altrimenti il Pi riparte ogni volta che si spegne. In auto servono solo il filo del pin 32 e due righe di configurazione (ignition_gpio: 3, ignition_active_low: true).

Da 12 V a 5 V

Il convertitore non va sulla breadboard: ha le proprie piazzole di saldatura e l'uscita USB. Così tengo i 12 V separati dalla breadboard e dai pin del Pi.

DaANota
Pin 16 dell'auto (12 V permanenti)IN+ del bucka valle del fusibile F36 dell'auto. In via definitiva, attraverso il sostegno dell'alimentazione durante l'avviamento: pin 16 → I10 della basetta, L10 della basetta → IN+ del buck
Massa dell'autoIN− del buckla striscia − per la prova in auto. In via definitiva: pin 15 → K1 della basetta, L1 della basetta → IN− del buck
Presa USB del buckPorta PWR del Piun cavo USB; l'altra porta del Pi resta alla scheda audio

Saldato, senza breadboard

Per l'installazione definitiva il circuito del microfono è saldato, con ogni giunzione coperta dalla guaina termorestringente: in auto una breadboard con le vibrazioni si allenta. Il circuito di accensione sotto chiave va sulla millefori della parte successiva. Valori come sono rimasti in auto (2026-09-27): con una da 1 kΩ accanto alla 2 kΩ il microfono stava a 2.37 V (2.16 V con la sola 2 kΩ) e registrava pulito a guadagno massimo, fischi forti compresi.

2 kΩ1 kΩaffiancate: circa 670 Ωfilo → pin 2 del Pi (5 V)pin 8 auto+10 µF+ verso A10 kΩpunta jack mic1 kΩpin 24 auto · pin 15 automanicotto jackmassa del Pi (pin 6)ABG
Il circuito del microfono come tre giunzioni: A (la 2 kΩ e la 1 kΩ affiancate, il reoforo + del condensatore, il pin 8 dell'auto), B (10 kΩ, la 1 kΩ in basso, la punta dello spinotto del microfono), G (le masse). Blu: guaina termorestringente su ogni giunzione e componente.
  1. Ho tagliato i fili a misura. Prima di saldare ho infilato un pezzo di guaina su ogni filo che finisce in A, B o G, e uno su ogni componente da unire.
  2. La 2 kΩ e una da 1 kΩ affiancate, con i reofori attorcigliati insieme ai due capi (circa 670 Ω); un capo al filo del pin 2 del Pi.
  3. A: l'altro capo della coppia, il reoforo + del condensatore e il filo del pin 8 dell'auto, attorcigliati e saldati. Il reoforo − del condensatore a un capo della 10 kΩ.
  4. B: l'altro capo della 10 kΩ, la seconda da 1 kΩ e il filo della punta dello spinotto del microfono.
  5. G: l'altro capo di quella da 1 kΩ, i pin 24 e 15 dell'auto, il contatto esterno del jack dello spinotto del microfono e il filo di massa del Pi.
  6. Ho fatto scorrere ogni guaina sulla sua giunzione o sul suo componente e l'ho ristretta (con una pistola ad aria calda, oppure con un accendino tenuto sotto, non dentro la fiamma).
  7. Multimetro in Ω prima di andare in auto: dal filo del pin 2 del Pi al filo del pin 8 dell'auto circa 670 Ω; dalla punta del microfono a massa circa 1 k; dal pin 8 dell'auto a massa aperto.
Due masse da controllare prima di chiudere la scatola

Con l'unità montata nella sua scatola, la persona che ho chiamato sentiva un rumore basso, come di motore, e non la mia voce. Tornato al banco (2026-10-11), il rumore di fondo dell'ingresso microfono era −34 dBFS con +23 dB di guadagno e niente sul pin 8 dell'auto. In auto, il 2026-09-27, con il microfono della plafoniera collegato e l'abitacolo in silenzio, era stato circa −60. Al banco era uguale con il power bank e con il pin 8 dell'auto collegato al pin 24, ed è sparito (−82) togliendo lo spinotto del microfono dalla scheda. Quindi entrava dallo spinotto del microfono, e le due cause erano masse.

Avevo portato il contatto esterno del jack del microfono solo al pin 24 dell'auto e non alla giunzione G. Una volta collegato, il rumore di fondo è sceso a −40. Inoltre la massa della scheda audio stava sopra quella del Pi, 60–80 mV con lo spinotto del microfono staccato e 30–38 mV con lo spinotto inserito: circa 2 Ω nella massa del suo cavo USB, che avevo accorciato e saldato al Pi per farlo entrare nella scatola. Un filo corto saldato dalla massa della scheda alla giunzione G ha portato quella differenza a 4.5 mV con lo spinotto del microfono inserito e il rumore di fondo a −59 dBFS con il pin 8 collegato al pin 24. È vicino al −60 del 2026-09-27, ma non è la stessa prova: lì il microfono era collegato, qui non c'era microfono e i due pin erano uniti.

Due letture, con l'alimentazione accesa, trovano entrambe le cose. Con lo spinotto del microfono staccato: dalla punta dello spinotto al pin 24 dell'auto, circa 1 kΩ. Con lo spinotto inserito: millivolt in continua tra il pin 21 dell'auto (la massa della scheda, attraverso il cavo audio) e il pin 24 dell'auto, pochi millivolt e stabili. Decine di millivolt che oscillano sono il rumore stesso.

Dopo le due correzioni le chiamate funzionano di nuovo: l'ho provato in auto con l'unità montata del tutto (2026-10-11). La persona che chiamo dice di sentire una leggera eco. Non l'ho misurata e me ne occuperò più avanti.

Accensione sotto chiave e sostegno dell'alimentazione durante l'avviamento su un'unica millefori

I due circuiti che toccano i 12 V dell'auto, su un solo pezzo della millefori del kit (fori metallizzati, nessuno collegato): 10 colonne × 24 righe, la misura della basetta da 3 × 7 cm (su un'altra basetta i fori vanno contati). Il circuito di accensione sotto chiave prende le righe A–G; la riga H resta vuota; il sostegno dell'alimentazione durante l'avviamento prende le righe I–X, quasi tutte occupate dal condensatore sdraiato. I componenti stanno sopra, i collegamenti si fanno sotto con i reofori piegati e ponti di stagno. Con il condensatore sdraiato la basetta è alta circa 21 mm.

Sostegno dell'alimentazione durante l'avviamento e rimedio per il convertitore (2026-10-01). Il Pi installato si resettava durante l'avviamento nonostante un condensatore da 2200 µF che avevo aggiunto. Il convertitore originale, venduto per 6–32 V, dava 0 V con un alimentatore da banco a 10 V, anche con il Pi scollegato e l'alimentatore in tensione costante. L'uscita tornava verso gli 11 V; a 12 V di alimentazione il multimetro misurava 5.09 V in uscita. Cambiando il convertitore i reset sono spariti. Il sostituto, un modulo step-down USB TECNOIOT da 6–24 V a 5 V, ha tenuto acceso il Pi fino a 5 V sull'alimentatore da banco; la tensione sul Pi con quell'ingresso non l'ho registrata. Inoltre l'IN− del buck è risultato scollegato e l'ho ricollegato prima di queste prove; gli serve un ritorno tutto suo al pin 15. Il pin 16 arriva al buck attraverso un diodo, con il condensatore da 2200 µF montato in parallelo a IN+/IN− subito dopo. Serve un condensatore da almeno 35 V; la banda del diodo guarda verso il condensatore. Questo rimedio non ha richiesto di aumentare la capacità. La forma d'onda dell'avviamento dell'auto non l'ho ancora misurata; nel calcolare il tempo di tenuta non va dato per buono un limite d'ingresso dichiarato di 6 V.

Componenti sopra; giunzioni e piste colorate si fanno sotto12345678910ABCDEFGHIJKLMNOPQRSTUVWX→ pin 5 del Pi (GPIO3)→ pin 32 autoquadro, 12 V su MAR→ pin 16 auto12 V permanenti (F36)→ buck IN+massa Pi ←pin 15 auto ←buck IN− ←100 kΩ100 kΩ1N4007 · banda F5diodo · banda J6PN2222pianoEBC−−−−−2200 µF35 V−+sdraiato sulla basetta,banda (−) verso la colonna 1;incollato o legato. L'estremitàlontana può sporgere un po'.RISVEGLIO CHIAVETAMPONE AVVIAMENTOcolorato = unito sotto:massabaseGPIO3pin 32 (12 V su MAR)pin 16 (12 V)punto = saldatura; tratto = pista
Vista da sopra. Ogni punto colorato è una saldatura, ogni tratto colorato una pista da fare sotto tra quei fori; i fori senza colore restano vuoti. Girata, la colonna 1 è a destra: bisogna andare con i nomi dei fori. Grigio: massa (quella del Pi dal lato del sotto chiave, il pin 15 dell'auto dal lato dell'avviamento, non unite sulla basetta: la corrente del buck resta fuori dal filo di massa del Pi); blu: base; turchese: GPIO3; ambra: pin 32; rosso: pin 16. Nessuno dei due 12 V deve arrivare a un pin del Pi.
ComponenteForiControllo
PN2222E in B3, B in B5, C in B7; faccia piatta verso la riga CE, B, C trovati prima con il multimetro, come nella tabella della breadboard qui sopra
100 kΩda D1 a D5 (base verso massa)circa 100 k, misurata fuori dalla basetta
100 kΩda E5 a E9 (dal pin 32)circa 100 k
1N4007da F1 a F5, banda in F5la banda va sulla colonna della base
Diododa J10 a J6, banda in J61N5822 o 1N4007; la banda verso il condensatore
2200 µF 35 V+ in L6, − in L3; corpo sdraiato sopra le righe M–Xil reoforo lungo è il +, la banda sul corpo segna il −. Montato al contrario può scoppiare
FiliPin 5 del Pi B9, massa del Pi G1, pin 32 dell'auto G9; pin 16 dell'auto I10, pin 15 dell'auto K1, IN+ del buck L10, IN− del buck L1entrano da sopra, saldati sotto
PisteB3–B1–G1, B5–F5, B7–B9, E9–G9; I10–J10, J6–K6–L6–L10, K1–L1–L3sotto; nessun altro foro collegato
  1. Ho iniziato dal transistor: ho allargato E e C per inserire i piedini in B3, B5 e B7, con la faccia piatta verso la riga C. Ho saldato sotto, senza unire i tre punti di saldatura.
  2. Le due resistenze e l'1N4007, sdraiati sulla basetta, banda in F5; il diodo dell'avviamento in J10–J6, banda in J6. Ho saldato, lasciando i reofori lunghi finché le piste non erano fatte.
  3. Ho piegato i due reofori del condensatore a 90°, a circa 3 mm dal corpo: + in L6 e − in L3. Ho disposto il corpo in orizzontale verso la riga X, saldato e fissato con colla. Si può anche usare una fascetta attraverso due fori liberi.
  4. Le piste sotto: ho steso ogni reoforo lungo sulla sua pista e l'ho saldato nei fori successivi; il resto l'ho fatto con ponti di stagno o con uno spezzone di filo nudo. Sotto chiave: B3–B1–G1, B5–F5, B7–B9, E9–G9. Avviamento: I10–J10, J6–K6–L6–L10, K1–L1–L3. La riga H e tutto il resto restano separati.
  5. I sette fili entrano da sopra e si saldano sotto.
  6. Multimetro in Ω, niente collegato: da C a E aperto nei due versi; dal filo del pin 5 del Pi al filo di massa del Pi aperto; dal filo del pin 32 dell'auto a B5 circa 100 k. Lato avviamento: dal filo del pin 16 dell'auto al filo IN− del buck non deve leggere vicino a 0 (il condensatore si carica dal multimetro, quindi la lettura sale); tra IN+ e IN− del buck lo stesso; in prova diodi, da I10 a L10 circa 0.3–0.7 V in un verso, niente nell'altro. Poi una goccia di colla sulle saldature dei fili.
  7. In auto, con l'F36 tolto, ho collegato i fili e ho rimesso l'F36. Resta da leggere GPIO3 mentre la chiave va su MAR e torna (0 su MAR, 1 da spenta), e da vedere che il Pi resti acceso durante un avviamento; lo Zero W non ha un rilevatore di bassa tensione, quindi get_throttled=0x0 non prova che l'alimentazione sia stabile. Se si resetta, vanno misurati con un oscilloscopio l'ingresso del buck e i 5 V del Pi.
L'avviamento è un problema diverso dallo spegnimento del quadro

L'avviamento abbassa l'alimentazione anche mentre il Pi è acceso in standby. Sul banco il buck originale perdeva l'uscita intorno ai 10 V di alimentazione; sostituirlo ha risolto i reset di cui ho parlato. Ho lasciato montati il diodo e il condensatore da 2200 µF, e mi sono assicurato che l'IN− del buck sia collegato al pin 15. Se i reset tornano, registrerò l'ingresso del buck e i 5 V del Pi durante l'avviamento. Lo Zero W non può segnalare una sottotensione con vcgencmd get_throttled: Raspberry Pi documenta l'esclusione della gamma Zero.

Lo Zero W non ha un orologio in tempo reale. Finché NTP non imposta l'ora, il valore started_at di ogni registrazione è la data di compilazione dell'immagine. L'hotspot del telefono permette di correggere l'orologio, ma le registrazioni precedenti conservano la data sbagliata. Un DS3231 da circa 2 € risolverebbe il problema; non l'ho ancora montato. Con il risveglio dal quadro serve un bus I2C separato (dtoverlay=i2c-gpio), perché quel circuito usa i pin 3 e 5.

  • Non ho ancora completato la prova di parcheggio prolungato. Occorre controllare la batteria dopo una notte e poi dopo quattro giorni. Il Pi deve spegnersi dopo 72 ore; blueandme-standby deve registrare lo spegnimento e il Wi-Fi smettere di rispondere. Rimettendo F36, oppure girando la chiave con il circuito di risveglio installato, il Pi deve ripartire. Il funzionamento quotidiano non dimostra che non scarichi la batteria durante una sosta più lunga.

Montaggio di custodia e connettore

La custodia originale misura 150 × 175 × 40 mm e ha quattro supporti per viti M3. La plastica PP-TD40 lascia passare il Bluetooth. Per stampare telaio e base di montaggio servono PETG o ASA; il PLA può ammorbidirsi in un'auto parcheggiata. Oltre a controllare il modello, bisogna provare gli ingombri dei cavi e degli spinotti reali e fissare tutto prima di chiudere.

Custodia nera Blue&Me con il connettore blu.
La custodia originale Blue&Me, riutilizzata per il nuovo montaggio.
Custodia vuota con i supporti originali e l’apertura del connettore.
La custodia vuota, prima di montare il supporto stampato.
Interno della custodia con quote e punti di fissaggio annotati.
Le misure annotate durante il montaggio. Sono un appunto da confrontare con il CAD, non le quote di riferimento.
Telaio bianco stampato montato nella custodia nera vuota.
Una delle versioni del telaio stampato provate nella custodia originale. È una versione intermedia, non quella definitiva.
Pi, scheda CAN blu e scheda audio USB nera disposti nella custodia.
Una prova di disposizione: Pi, modulo CAN e scheda audio USB sul supporto stampato. In rosso, i punti in cui i pezzi interferivano in questa prova. Non è la disposizione finale, né il cablaggio né le masse definitive.
Elettronica cablata sotto un telaio bianco stampato nella custodia nera.
Il nuovo montaggio nella custodia originale, sul banco di lavoro il 1° ottobre 2026. È precedente alla riparazione delle masse dell'11 ottobre, che questa foto non mostra.
Due viste del fondo della scatola con aree colorate che indicano dove stanno il convertitore buck, la scheda audio, il modulo CAN e il Pi con la millefori; nella vista di destra il telaio stampato è al suo posto.
La disposizione nella custodia. Blu: Pi e millefori. Viola: modulo CAN. Verde: scheda audio con gli spinotti. Arancione: convertitore appeso al telaio con due fascette. I cerchi indicano supporti e sporgenze da considerare nel posizionare i componenti.
Modello 3D del supporto: il telaio giallo poggia su quattro colonnine; sotto c'è la base di montaggio blu. I blocchi colorati indicano gli ingombri del Pi, del modulo CAN, della scheda audio e del convertitore.
Il modello del supporto. In giallo, il telaio sui quattro supporti per le viti; in blu, la base di montaggio; in rosso, le sporgenze della custodia. Ho controllato che i pezzi non interferissero tra loro né con il coperchio.

Per eliminare l'adattatore USB ho accorciato il cavo della scheda audio e l'ho saldato alle piazzole di test sotto il Pi. PP1 corrisponde a 5 V, PP6 a massa, PP22 a D+ e PP23 a D−. L'uscita a 5 V del convertitore va ai pin 4 e 6 del Pi.

Cavi e montaggio del connettore visti dal basso.
Una vista laterale del montaggio e del percorso dei cavi nella custodia.

Il connettore usa 32 pin quadrati da 0.64 mm, a passo 2.54 mm, su millefori tagliata a 2 × 16 fori con un bordo di circa 5 mm. Sono cablati solo i pin necessari. Prima di collegarlo, segnare i pin 1 e 17 e verificarli con i numeri "1" e "17" stampati sulla spina.

Piccola basetta millefori con pin del connettore e cavi che entrano nella custodia.
Il supporto del connettore e la basetta millefori nell’apertura della custodia.

Fissare e isolare i fili sui pad USB. Se la scheda scompare con device descriptor read/64, error -71, controllare i cavi dati e le saldature. Non azzerare il controller USB dello Zero W tramite unbind: nella mia prova ha causato un crash del kernel e l’USB è tornato solo togliendo alimentazione.

Wi-Fi durante l’audio

Sullo Zero W, Bluetooth e Wi-Fi condividono lo stesso chip radio. Ho misurato queste perdite di pacchetti con il Pi collegato all'hotspot del telefono. Spegnendo il Wi-Fi, le interruzioni della musica sono sparite.

Wi-FiPacchetti audio persi al minuto
Wi-Fi acceso, collegato all'hotspot, senza trasferimenti150–320
Acceso, con traffico SSH500–1200
Spento0

Ho aggiunto un piccolo servizio perché lo facesse al posto mio. Controlla i flussi audio Bluetooth ogni tre secondi e spegne il Wi-Fi durante la musica o una chiamata. Trenta secondi dopo la fine dell'audio lo riaccende. Lo ripristina soltanto se l'aveva spento lui, quindi non interferisce con lo standby.

In auto il Wi-Fi si spegne due secondi dopo l'inizio della musica. Quando voglio collegarmi al Pi via SSH, metto in pausa e aspetto circa 40 secondi.

Crediti

fmntf/fiatcan e la serie di quattro articoli su medium.com/@fmntf — il protocollo del Doblò 263, il trucco di rispondere al PROXI come i vicini e l'intuizione sui tempi dell'initramfs. karolkrupa/alfa-blue-me — la realizzazione per l'Alfa 159, la conferma indipendente della mappa dei caratteri e le risposte sulla larghezza degli identificatori della Giulietta. terilenard/mcp2515-tja1050-wiring — la modifica delle alimentazioni separate e le fotografie dei passi 2 e 5. Beyondlogic — la piedinatura CAN del Raspberry Pi e la configurazione dell'overlay. La fotografia del Pi Zero W al passo 5 è di Gareth Halfacree, con licenza CC BY-SA 2.0, da Wikimedia Commons, qui annotata con le posizioni dei pin.

Il codice è su github.com/crimeofheart/giulietta-blue-me. Genero le tabelle del protocollo direttamente dal codice. Per vedere la versione attuale uso blueandme-protocol-map.