Pilotare una stampante termica Bluetooth portatile da un microcontrollore ESP32-C3, senza passare dall’applicazione proprietaria dello smartphone. È quello che fa Bas BotBerg, e il risultato è che i report sui dati raccolti dai sensori finiscono su carta termica senza che nessun telefono entri in gioco. Il metodo usato non è la classica cattura dei log Bluetooth su Android: l’autore interroga direttamente il dispositivo e ne ricostruisce il protocollo di comunicazione.
La parte interessante sta nella scelta di fondo. Invece di affidarsi all’app del produttore, il progetto adotta un’applicazione che elenca servizi e caratteristiche Bluetooth Low Energy della stampante. Così il lavoro si sposta dal traffico cifrato di un’app chiusa ai servizi esposti dal dispositivo, che restano visibili e interrogabili.
Individuare i servizi scrivibili e inviare i primi payload
Il passo successivo è separare i servizi marcati come scrivibili da tutti gli altri. Su quelli l’autore inizia a inviare dati e osserva come risponde la stampante. È un lavoro di tentativi, ma ogni risposta restringe il campo. Perciò la fase di scoperta si fa in Python con la libreria Bleak, che consente di iterare e adattare il codice in pochi secondi.
- Interrogare il dispositivo e leggere l’elenco dei servizi Bluetooth Low Energy.
- Isolare le caratteristiche marcate come scrivibili.
- Inviare payload di prova e osservare la reazione della stampante.
- Adattare il codice in Python con la libreria Bleak a ogni tentativo.
- Mappare comandi ed endpoint una volta capito cosa li attiva.
Il primo traguardo arriva quando il motore della stampante parte e fa avanzare la carta. Quel movimento conferma che il comando individuato è quello giusto e che la strada è quella buona. Da lì in poi il lavoro diventa più ordinato: si annotano i payload, si annotano gli endpoint a cui inviarli, e la mappa del protocollo prende forma.
Trasferire i payload nel firmware C++ sull’ESP32-C3
Una volta mappati i dati da inviare e gli endpoint a cui inviarli in Python, gli stessi payload passano nel codice C++ sull’ESP32-C3. Il microcontrollore diventa quindi l’unico interlocutore della stampante. Inoltre la libreria Adafruit GFX serve a produrre icone e a formattare più facilmente l’output, così il report non è solo testo grezzo ma ha una struttura leggibile.
Per chi vuole rifare il progetto, la scheda di partenza è compatta e ha la radio integrata: il modulo ESP32-C3 in formato SuperMini copre sia la parte Bluetooth Low Energy sia il controllo dei sensori. Il resto del lavoro sta nel firmware, non nell’hardware.
Chi ha già smontato una stampante termica portatile sa che il punto critico non è la meccanica. Il punto critico è il protocollo, ed è esattamente quello che il progetto affronta. Il metodo usato è alternativo alla cattura dei log Bluetooth su Android, e per certi versi più diretto: si parla con il dispositivo invece di spiare un’app. Il blog di Bas BotBerg racconta il lavoro fatto su questa stampante termica Bluetooth, dal Python sul laptop al C++ sull’ESP32-C3.
Il caso è un buon riferimento per chiunque debba controllare da un microcontrollore periferiche che il produttore rende accessibili solo tramite applicazioni proprietarie. La sequenza è sempre la stessa: elencare i servizi, trovare quelli scrivibili, inviare dati, osservare le risposte, mappare i payload. Cambia il dispositivo, non il metodo.
