Activer le port série TTL du Raspberry Pi et vérifier qu’il fonctionne.
CommentairesSi vous vous lancez dans l’électronique avec le Raspberry Pi vous serez vite amené à utiliser le port série pour permettre à votre Pi de communiquer avec un module externe. Mais pour pouvoir utiliser le port série, vous devrez au préalable l’activer sur le Raspberry Pi.
Dans ce tutoriel nous allons donc voir comment activer le port série du Raspberry Pi et vérifier son bon fonctionnement.
Pour cela, vous aurez besoin du matériel suivant :
- Un Raspberry Pi avec raspbian.
- Des câbles duponts et des résistances.
Le port série à quoi ça sert ?
Comme son nom l’indique, le port série communique les données « en série », c’est à dire un bit après l’autre. C’est ce qui rend son utilisation et sa mise en œuvre assez simples du point de vue logiciel et électronique, permettant la création d’interfaces très bon marché.
Si il est aujourd’hui largement inconnu du grand public, remplacé par l’USB (lequel est d’ailleurs lui même un port série), il reste très utilisé en électronique pour permettre à différents modules électroniques de communiquer.
Dans le cadre du Raspberry Pi, vous serez donc potentiellement amené à utiliser le port série pour utiliser des sondes ou des modules externes nécessitant un échange de données avec le Raspberry.
Activer le port série du Raspberry pour communiquer avec un module externe.
Par défaut, le port série du Raspberry Pi est relié à la console afin de permettre de contrôler le Raspberry Pi sans interface graphique. Si cela peut être utile pour se connecter au Raspberry sans internet, c’est en revanche incompatible avec une utilisation standard du port série.
Pour commencer, nous allons donc devoir modifier la configuration du Raspberry pour utiliser le port série comme une « interface série » plutôt qu’une console.
Pour cela, ouvrez un terminal sur votre Raspberry Pi, soit directement soit via SSH, puis lancez la commande sudo raspi-config
pour accéder à l’outil de gestion de la configuration du Raspberry.
Une fois raspi-config lancé, choisissez Interfacing options
, puis Serial
. Répondez No
à la partie demandant si vous souhaitez activer un shell via la connexion série, puis Yes
à la partie demandant si vous souhaitez activer le port hardware. Validez, faites Finish
, puis dites oui à la question vous demandant si vous souhaitez rebooter le Raspberry Pi.
Étapes supplémentaires pour activer le port série des Raspberry Pi 3, 4 et plus.
Cette partie est spécifique aux modèles 3 et ultérieurs.
En interne la lecture de données série utilise ce que l’on appelle un UART. Tous les modèles de Raspberry possèdent au minimum 2 UART, le numéro 0, qui est un UART normal et le numéro 1 qui est un mini UART aux capacités beaucoup plus limitées et très contraignant.
Historiquement l’UART 0 était utilisé par défaut, mais depuis le passage à la version 3 ce n’est plus le cas, celui-ci étant désormais utilisé pour gérer la puce bluetooth. Si vous utilisez une Raspberry Pi 3 ou un modèle ultérieur, vous allez donc devoir modifier ce comportement et désactiver le bluetooth.
Pour cela, lancez les commandes ci-dessous :
echo "dtoverlay=disable-bt" | sudo tee -a /boot/config.txt
sudo systemctl disable hciuart
sudo reboot
Vérifier que le port série du Raspberry a bien été activé.
Maintenant que notre port est activé, il ne nous reste plus qu’à vérifier que tout fonctionne comme prévu.
Techniquement, le port série du Raspberry se présente sous la forme de deux GPIOs, un pour la réception de donnée, RXD, et un pour l’envoi TXD.
Pour vérifier que notre port fonctionne comme prévu, nous allons tout simplement relier les ports RXD et TXD entre eux. De cette façon, toute donnée envoyée sur le port TXD sera reçue par le port RXD, et nous pourrons les lire à l’écran.
Attention, quand vous utiliserez un véritable module externe, le principe sera le même, à savoir brancher le TXD du module sur le RXT du Pi et le TXD du Pi sur le RXD du module.
Brancher les ports série.
Pour brancher les ports série entre eux, nous allons utiliser une breadboard des câbles dupont, et une résistance. Techniquement la résistance n’est pas absolument nécessaire, mais en cas d’erreur de manipulation elle protégera votre raspberry.
Le choix de la résistance n’a pas beaucoup d’importance, vous trouverez facilement des 1000 ohms qui feront très bien l’affaire, mais 470 ohms suffisent largement.
À noter quand vous brancherez un véritable module, pensez à vérifier que son TXD utilise du 3.3 V, comme le Raspberry. Si vous devez branchez un module qui envoi ses données en 5 V, vous devrez utilisez un pont diviseur. Si vous utilisez un module susceptible de fournir une tension négative, vous devez impérativement utiliser une diode pour protéger votre circuit.
Vérifier que tout fonctionne avec Minicom.
Maintenant que tout est câblé, il ne reste plus qu’à tester en utilisant un programme permettant la communication série, Minicom.
Pour commencer non allons donc installer Minicom avec les commandes ci-dessous.
sudo apt update -y
sudo apt install minicom -y
Une fois l’installation terminée, il ne nous reste plus qu’à démarrer Minicom en lui indiquant le port série à utiliser.
Les ports série sont tous accessibles sous la forme de périphériques dans Linux, donc dans le dossier /dev
et sont nommés serialX
, où X
est le numéro du port série. Dans notre cas nous souhaitons utiliser le port série 0, nous utiliserons donc /dev/serial0
.
Nous pouvons donc lancer Minicom avec la commande suivante :
sudo minicom -D /dev/serial0
Un terminal Minicom se lance, si vous y tapez une lettre, celle-ci doit alors s’afficher à l’écran !
Voilà, votre port série est fonctionnel, il ne vous reste plus qu’à l’utiliser !
Attention à corriger votre rubrique sur le fond jaune.
La pin RST n’existe pas je pense qu’il s’agit des pins: RxT et TxD.
Question: comment lire et récupérer un flux d’information venant de l’Uart,
Sur mon Raspi 3B, je voudrais récupérer et lire une trame de donnes Uart venant d’une carte PSoC Cypress.
Sur le Cypress je connais la trame et les data car je l’ai crée en 9600/8/N/1.
Merci de m’orienter vers un tuto ou un lien.
Bonjour, merci de ton retour, nous avons corrigé ça.
Pour lire les trames sur ton UART tu peux le faire en utilisant Python et la librairie PySerial. Nous avons un tuto sur Python en général sur le site, mais rien en revanche qui porte sur l’utilisation du port série avec Python, mais je pense que tu trouveras facilement des tutos en ligne en cherchant « tuto pyserial ».
Vos corrections pour le cas de liaisons série traditionnelles sont insuffisantes:
un pont diviseur ne protègera en rien le RPi contre les inversions de polarité (cas des très vieux PC, qui sortent … ce qu’ils veulent; des montages avec MAX232 (elektor des années 90-2010- -sort du -12v/12v:
le -12v sèmera un joyeux carnage chez le RPi)
Une diode est à rajouter…
Effectivement un port qui sortira du -12v ne pourra absolument pas protéger contre une inversion de polarité, mais l’article mentionne clairement un montage classique en 3.3v ou 5v. Je vais néanmoins rajouter un avertissement relatif.
Il y a quelques petits details qui me chagrinent:
lors de l’installation de logiciels supplementaires, il faudrait peut être privilégier picocom à minicom (noter que … gtkterm, des bouts de python faits sur mesure avec pyserial… peuvent aussi « faire l’affaire »).
minicom est critiqué dans https://e2e.ti.com/support/processors/f/791/t/28674?use-picocom-instead-minicom , qui est plus lourd, est géné pour les caractères UTF https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872051
Personne, selon une recherche rapide google, n’est géné par picocom + UTF-8… (j’avais été un peu ennuyé avec minicom; je suis passé à picocom).
Autre point: si on veut une liaison série, ce n’est pas pour faire un « loopback », c’est pour transmettre -et recevoir – vers et de un autre calculateur. (la patte en emission du RPi devient alors connectée à la patte en reception de l’autre calculateur-c’est une erreur courante d’oublier ce petit détail)
Que se passe-t-il si les niveaux serie d’un autre calculateur sont de 0- 5v (arduino uno), variables entre -15/0v et +3…15V (vieux PCs)?
Je doure qu’une résistance suffise (il faut au moins savoir quelle est la plage de tensions du calculateur avec lequel le RPi doit échanger)
Merci de ton commentaire, je n’ai jamais utilisé picocom et c’est pour ça que je n’en parle pas, je n’aime pas particulièrement minicom par ailleurs. Mais dans l’absolu tout ça a peu d’importance puisqu’en pratique pour une utilisation réelle on utilisera de toute façon du code et un terminal série.
Concernant les différences de tension sur les cartes autres que le Pi et sur le fait de confondre TXD et RXD ce sont effectivement des bonnes remarques et j’ai modifié l’article pour ajouter des avertissements liés.
Hello, c’est dommage d’illustrer avec une photo de port VGA 🙂
Oh, merci de me l’avoir fait remarqué, j’ai cherché des images libre de droits sur les ports série et celle-ci c’est glissée au milieu. Et comme un port série ça ressemble quand même vachement à un port VGA j’ai pas vu… C’est corrigé !