Ou plutôt, minitel et série
Après un article d’introduction, passons aux choses sérieuses : relier un minitel à un ordinateur, et faire communiquer les deux ensemble.
Côté minitel
À l’arrière du minitel, un port DIN est prévu pour la communication avec un périphérique externe… dans notre cas, un ordinateur. Si le terme MIDI désigne pour vous autre chose que le format de fichier que le protocole a engendré, alors vous connaissez sans doute ces connecteurs.
Dans notre cas, seulement trois des cinq broches nous intéressent. Le schéma des broches côté minitel est le suivant :
À cette étape, vous avez le choix : soit vous ne trouvez pas de connecteur DIN approprié…
…soit vous en trouvez un et faites un peu de soudure.
Serial
Comme vous l’avez surement remarqué dans le schéma de branchement, outre la, masse, nous avons une broche de réception et une broche d’envoi. Et cela suffit pour communiquer en série.
Vous vous souvenez des « ports série » ? Ou peut-être utilisez-vous Serial ? C’est bien de cela que l’on parle. Avec quelques petites configurations propres au minitel.
Mais avant de configurer tout ça, ne faut-il pas déjà relier le minitel à l’ordinateur ? Vous avez déjà les trois fils qu’il faut du côté minitel, concentrons-nous maintenant sur l’autre côté de la communication.
Côté ordinateur
Via un connecteur RS-232
Peut-être avez-vous encore un connecteur RS-232 sur votre ordinateur ? Dans ce cas, puisque le « port série » communique en série, très peu de matériel va être nécessaire.
Ne disposant pas de ce port antique, votre serviteur a utilisé un joli convertisseur USB-série bleu fluo pour pouvoir faire des tests.
Le montage électronique utilisé nécessite quelques résistances et transistors, et évidemment un connecteur RS-232. À noter que les valeurs des résistances sont approximatives.
Quelques branchements et le tour est joué !
Via un arduino
L’autre solution de réutilisation du matériel que vous avez déjà consiste à utiliser un arduino.
La première solution qui vient à l’esprit est d’utiliser la librairie SoftwareSerial, et de transférer les données reçues de l’ordinateur vers deux des broches numériques. Pour cela, le programme présenté sur la page de documentation fera l’affaire. Hélas, il s’avère à l’utilisation que cette méthode n’offre pas de résultats probants : des bytes sont perdus en cours de route dans certaines conditions.
Plutôt que d’investir dans un Arduino Mega et d’utiliser les implémentations matérielles des interfaces séries, une solution plus simple existe : enlever l’ATMEGA !
En effet, pour communiquer avec l’ATMEGA328, l’arduino dispose d’un convertisseur USB-série intégré. Une fois le micro-contrôleur enlevé, il suffit d’utiliser les broches 0 et 1 directement.
Via un convertisseur USB-série
Enfin, une solution facile consiste à utiliser un convertisseur USB-série. On peut en trouver facilement pour quelques euros.
Côté arduino
Alternativement, au lieu de relier le minitel à un ordinateur, on peut relier le minitel à un arduino.
Il s’agit de la même méthode que d’utiliser l’arduino pour faire le pont entre le minitel et l’ordinateur, si ce n’est que :
- on n’enlève pas l’ATMEGA
- on utilise quand même les broches 0 et 1 de l’arduino pour la communication
- on n’a pas besoin d’ordinateur : l’arduino peut être simplement alimenté par une source externe
L’exemple de code à la fin de l’article utilise cette configuration.
Activation du minitel
Une foi le minitel allumé, pour utiliser le port DIN, il faut appuyer sur les touches suivantes :
Fct-T
puisA
(ouF
éventuellement) pour choisir le modeFct-T
puisE
pour désactiver l’écho à l’écran des touches tapéesFct-P
puis4
pour choisir la vitesse de transfert de 4800 bauds.
Le mode « français » (Fct-T
puis F
) est une version spéciale de l’ASCII, en remplaçant simplement les caractères « #^[]{}|~ » par « £ç↑°§éèù » ».
Pour choisir d’autres vitesses de transfert, utiliser :
Fct-P
puis1
pour 1200 baudsFct-P
puis3
pour 300 baudsFct-P
puis4
pour 4800 baudsFct-P
puis9
pour 9600 bauds
Logiciels
Maintenant que le minitel et l’ordinateur sont reliés d’une manière ou d’une autre, il est temps de regarder le côté logiciel pour communiquer avec le minitel.
À noter que je les outils que je mentionne ici tournent sous GNU/Linux, pour la raison objective que c’est le système d’exploitation que je connais le mieux. Nul doute que des outils équivalents existent pour votre système d’exploitation préféré.
Général
La communication série est bien documentée, et les logiciels ne manquent pas. À noter qu’il faut faire l’étape de configuration pour qu’elle corresponde à ce qu’utilise le minitel.
Les points à configurer sont les suivants:
- l’interface : pour trouver le nom de l’interface, il est possible de lancer
la commandels /dev/tty*
par exemple - la vitesse de transfert : voir ci-dessus
- le nombre de bits utilisés : 7
- la parité (pour le huitième bit) : paire
Pour le reste, le codage ASCII est utilisé, et on notera l’interprétation des séquences ou caractères suivants :
- le caractère d’appel
\x07
fait un joli bruit - le caractère de tabulation horizontale
\t
équivaut à un déplacement de 8 caractères - les déplacements vers le haut, bas, gauche et droite sont représentés par les séquences respectives
\x1b[A
,\x1b[B
,\x1b[C
et\x1b[D
- …et d’autres séquences pour tous les touches spécifiques au minitel : le plus simple pour les obtenir est d’appuyer sur la touche correspondante et de regarder quelle séquence elle renvoie.
En ligne de commande
Un certain nombre de logiciels permettent de communiquer en série directement à partir de la ligne de commande. Sans être exhaustif, on peut en lister quelques uns.
Pour utiliser l’interface /dev/ttyUSB0
, les commandes seront donc, par exemple :
cu -e -l /dev/ttyUSB0 -s 4800
screen /dev/ttyUSB0 4800,cs7
minicom -D /dev/ttyUSB0
, puisCtrl-A
etP
, puis modifier la vitesse avecA
etB
, et utiliserU
etM
pour définir le nombre de bits et la parité
Directement dans un langage de programmation
Pour faire des programmes qui communiquent avec le minitel, chaque langage a sa méthode. Un bon point de départ est la page listant les moyens de communiquer avec l’arduino.
À titre d’exemple, je vous propose le programme arduino suivant (reliez simplement les masses ensemble et croisez les entrées et sorties entre l’arduino (broches 0 et 1) et le minitel) :
/*
* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the CC0 license (French version).
* See http://vvlibri.org/fr/licence/cc0/10/fr/legalcode for more details.
*/
void setup() {
Serial.begin(4800);
sendMessage("\r\t\t\t\t");
}
char modifyParity(byte c) {
byte i = 1 << 6;
boolean p = false;
c &= B01111111;
while(i) {
if(c & i) {
p = !p;
}
i >>= 1;
}
c |= p << 7;
return c;
}
void sendMessage(char *msg) {
int i = 0;
while(msg[i] > 0) {
msg[i] = modifyParity(msg[i]);
i++;
}
Serial.write(msg);
Serial.flush();
}
void loop() {
sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D####\n");
sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-AT-#\n");
sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-CG-#\n");
sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#--TA--#\n");
sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-AT-#\n");
sendMessage("\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D\x1b[D#-GC-#\n");
}
Si tout se passe bien, vous verrez une hélice d’ADN tourner sur elle-même (après un certain temps à fixer l’écran, c’est assez hypnotique).
Au prochain épisode, un exemple de programmes que l’on peut réaliser…
Merci pour ces conseils.