Utilizzando utilità standard
Poiché le porte seriali sono rappresentate da file su Linux, è possibile utilizzare utilità standard come echo e cat per interagire con esse. stty può essere usato per modificare le impostazioni della porta. Vediamo come viene utilizzata ciascuna di queste applicazioni.
Con stty, puoi impostare il baud rate della porta, il numero di bit di dati, la parità, il tipo di handshake (noto anche come controllo di flusso) e altri parametri. Questo può essere necessario per interagire con un dispositivo o un’applicazione, poiché nella maggior parte dei casi i parametri devono corrispondere affinché la connessione funzioni.
Nota da Nick:
Ho eseguito la seguente dimostrazione su Debian 11 (Bullseye) con una stampante SP-POS88VMF.
Tuttavia, puoi anche provare i comandi forniti con una connessione null-modem tra due porte seriali o USB-to-serial sullo stesso computer. In tal caso, dovrai modificare il comando cat per metterlo in ascolto sull’altra porta collegata, non su quella che invia.
Usa il seguente comando per elencare le impostazioni correnti della tua porta:
sudo stty -a -F <your port>
E questo è un comando di esempio che imposta la velocità in baud della porta ttyS0 a 9600, i bit di dati a 8 e abilita l’handshaking RTS/CTS:
sudo stty -F /dev/ttyS0 9600 cs8 crtscts
Con le impostazioni corrette selezionate, possiamo inviare dati al dispositivo con echo. È possibile inviare testo semplice a una porta seriale con echo, in questo modo:
echo 'TEXT' > /dev/ttyS0
Tuttavia, per farlo, è necessario accedere come superutente. Questo può essere fatto con il comando “su -”.
Nel nostro caso, sono necessari simboli ASCII speciali, come ESC e Carriage Return, per sfruttare appieno la stampante collegata. Un modo per farlo è utilizzare l’argomento -e di echo e le sequenze di escape. Una sequenza di escape per i caratteri ASCII inizia con \x, seguita da un numero esadecimale che corrisponde al carattere.
Per esempio, ecco come si può stampare la parola “TEXT” con le sequenze di escape:
echo -e '\x54\x45\x58\x54'
Invieremo i seguenti messaggi:
1B 40 |
(ESC @, Initialize) |
1B 6D |
(ESC m, Full Cut) |
4C 49 4E 45 20 31 |
("LINE 1") |
1B 21 80 |
(Enable Underline) |
4C 49 4E 45 20 32 |
("LINE 2") |
0D 0A |
(CR LF, New Line) |
1B 6D |
(Full Cut) |
L’argomento -e è necessario per consentire le sequenze di escape esadecimali “\x”. Ecco come appare nel terminale e nella stampa risultante:
Mentre echo può essere usato per inviare dati tramite una connessione seriale, cat può essere usato per riceverli. Nel nostro caso, la stampante risponderà alle richieste standard ESC/POS per informazioni di stato e ID. Questo significa che dovremo intercettare le risposte. Per prima cosa, avvieremo cat, in ascolto sul dispositivo ttyS0 e reindirizzando l’output a un file di testo:
cat /dev/ttyS0 > examplefile
L’applicazione deve rimanere in esecuzione per ricevere dati, quindi è necessario aprire una nuova finestra o scheda del Terminale per inviare richieste al nostro dispositivo. Useremo echo per inviare quanto segue:
1D 49 31 |
(Request model ID) |
1D 49 32 |
(Request type ID) |
Poiché le risposte verranno fornite in formato esadecimale, l'output diretto di cat, che è stato registrato in “examplefile”, non sarà leggibile dall'uomo. Invece, eseguiremo il file tramite hexdump:
Utilizzo di gtkterm
Linux offre anche terminali seriali come minicom e gtkterm che possono interagire in modo completo con le porte seriali, gestendo sia l’input sia l’output, offrendo più opzioni di formattazione e rendendo le cose complessivamente più semplici.
Come esempio, proveremo gtkterm. Analogamente a stty, gtkterm deve essere avviato con argomenti da riga di comando per specificare le impostazioni di connessione, se i valori predefiniti non sono adatti.
Nota da Nick:
Sebbene Minicom sia uno strumento altamente flessibile, i controlli complicati lo rendono inadatto all’uso da parte dei principianti e difficile da trattare in una guida rapida. Se vuoi iniziare a imparare Minicom, parti dalla sua pagina man per evitare di confonderti una volta avviata l’app.
Alcune opzioni utili includono l'eco locale (per duplicare i dati che invii dal tuo lato), la registrazione, la visualizzazione esadecimale e l'invio di dati esadecimali. Inoltre, nota gli indicatori in basso a destra: mostrano gli stati delle linee di segnale DTR, RTS, CD, DSR e RI: è un altro modo per vedere che il dispositivo è connesso e pronto a ricevere dati.