Utilizzo di strumenti standard
Su Linux, le porte seriali sono rappresentate da file, quindi è possibile utilizzare comandi standard come echo e cat per interagire con esse. Il comando stty permette invece di configurare la porta.
Con stty, puoi impostare la velocità in baud, il numero di bit dati, la parità, il tipo di handshake (controllo di flusso), e altri parametri. I parametri devono corrispondere a quelli del dispositivo o applicazione per stabilire una connessione corretta.
Per visualizzare la configurazione attuale della porta, usa:
sudo stty -a -F <tuo_dispositivo>
Ecco un esempio per impostare la porta ttyS0 a 9600 baud, 8 bit, e handshake RTS/CTS:
sudo stty -F /dev/ttyS0 9600 cs8 crtscts
Una volta configurata, è possibile inviare dati alla porta usando echo. Ad esempio:
echo ‘TESTO’ > /dev/ttyS0
Tuttavia, per fare ciò, devi accedere come superutente. Puoi farlo con il comando su -.
Nel nostro caso, per utilizzare appieno la stampante collegata, sono necessari simboli ASCII speciali, come ESC e Carriage Return. Un modo per farlo è utilizzare l’argomento -e di echo e le sequenze di escape. Una sequenza di escape per caratteri ASCII si inizia con \x, seguita da un numero esadecimale che corrisponde al carattere.
Ad esempio, ecco come può essere stampata la parola “TEXT” con sequenze di escape:
echo -e '\x54\x45\x58\x54'‘
Invieremo i seguenti messaggi:
1B 40 | (ESC @, Inizializza) |
1B 6D | (ESC m, Taglio completo) |
4C 49 4E 45 20 31 | ("LINEA 1") |
1B 21 80 | (Abilita sottolineatura) |
4C 49 4E 45 20 32 | ("LINEA 2") |
0D 0A | (A capo) |
1B 40 | (Taglio completo) |
L’argomento -e è necessario per abilitare le sequenze di escape esadecimali \x. Questo è ciò che vedrai nel terminale e nel risultato stampato.
Mentre echo può essere utilizzato per inviare dati su una connessione seriale, cat può essere usato per riceverli. Nel nostro caso, la stampante risponderà a richieste ESC/POS standard per informazioni sullo stato e l'ID. Dobbiamo quindi catturare queste risposte. Prima avviamo cat, ascoltando il dispositivo ttyS0 e reindirizzando l’output su un file di testo:
cat /dev/ttyS0 > file_esempio
L’applicazione deve rimanere in esecuzione per ricevere i dati, quindi bisogna aprire una nuova finestra o scheda del Terminale per inviare le richieste al nostro dispositivo. Usiamo echo per inviare quanto segue:
1D 49 31 | (Richiedi ID modello) |
1D 49 32 | (Richiedi ID tipo) |
Poiché le risposte verranno fornite in formato esadecimale, l'output diretto di cat, registrato nel file "file_esempio", non sarà leggibile direttamente. Invece, eseguiamo il file tramite hexdump:
Utilizzo di gtkterm
Linux mette a disposizione terminali seriali come minicom e gtkterm, strumenti potenti che consentono un’interazione completa con le porte seriali. Questi terminali gestiscono input e output, offrono opzioni avanzate di formattazione e semplificano notevolmente il lavoro con i dispositivi seriali connessi.
Come esempio pratico, useremo gtkterm. Così come per stty, anche gtkterm può essere avviato con argomenti da linea di comando per specificare i parametri di connessione, nel caso in cui le impostazioni predefinite non siano adatte.
Alcune opzioni utili includono l’echo locale (per duplicare i dati inviati sul proprio terminale), la registrazione delle sessioni, la visualizzazione esadecimale, e la possibilità di inviare dati in formato esadecimale. Inoltre, è importante notare gli indicatori in basso a destra – mostrano lo stato delle linee di segnale DTR, RTS, CD, DSR e RI – fornendo un ulteriore metodo per verificare che il dispositivo sia collegato correttamente e pronto a ricevere dati.