Publié le 13 février 2017 - par

Le port série du Raspberry Pi 3 : pas simple !

On ne l’avait pas vue venir, celle-là ! La Fondation nous l’a glissée en loucedé sur le Raspberry Pi 3 : pas de page d’information sur leur blog, juste des réponses dans les forums…
L’adjonction du Bluetooth au Raspberry Pi 3 a amené les concepteurs de la framboise à détourner l’UART du BCM2837 précédemment relié aux bornes 8 et 10 du GPIO vers le Bluetooth.

Cliquez pour avoir de l’information sur les niveaux.

Le port Série du Raspberry Pi 3

Les UART du Raspberry Pi

Un UART, pour Universal Asynchronous Receiver Transmitter, est un émetteur-récepteur asynchrone universel. En langage courant, c’est le composant utilisé pour faire la liaison entre l’ordinateur et le port série . L’ordinateur envoie les données en parallèle (autant de fils que de bits de données). Il faut donc transformer ces données pour les faire passer à travers une liaison série qui utilise un seul fil pour faire passer tous les bits de données. (Wikipedia)

UART0 = PL011

Le SoC du Raspberry Pi est toujours basé sur le même hardware, le BCM2835. Seul le microprocesseur a évolué. Le BCM2835 comporte deux UART, pour les liaisons série. Le premier, le PL011 est un « vrai » UART :

C’est à dire qu’il est autonome, doté de son propre générateur de Baud Rate, et de tous les circuits nécessaires à son fonctionnement.

UART1 = « mini » UART

Le second UART est quand à lui un « mini » UART :

Il ne comporte pas de générateur de Baud Rate et utilise la fréquence du cœur du CPU. Ça pourrait être bien, sauf que la fréquence du CPU est susceptible de varier en fonction de sa charge 🙁

Il ne gère pas non plus la parité.

C’était mieux avant ! Le port série du Raspberry Pi 2

Sur les premières générations de Raspberry Pi (model 1 B, B+ et 2) l’UART0 PL011 est utilisé et il est connecté aux broches 8 et 10 du GPIO. Les messages du système en cours de démarrage sont envoyés par défaut sur ce port. Il suffit de brancher un terminal pour les lire.

Cette entrée série peut également être connectée à un terminal qui servira alors à se connecter au Raspberry Pi après s’être logué.

Enfin, cette E/S série est utilisée dans des applications industrielles ou domotiques, pour lire des données GPS, relier deux Raspberry Pi entre eux, un Raspberry Pi avec un Arduino etc.

Le port série du Raspberry Pi 3 : la cata !

Le SoC du Raspberry Pi 3 est un BCM2837 SoC. C’est un BCM2836 avec un CPU quad-core ARMv8 qui peut fonctionner en 32 ou en 64 bits. Le mode 32 bits est actuellement sélectionné par défaut la firmware du VideoCore sur le Raspberry Pi 3.

Un autre changement intervient dans l’utilisation des UART. Sur tous les Raspberry Pi précédents, le PL011 était le seul UART en service. Le Raspberry Pi 3 accueille un module Bluetooth qui utilise un UART pour se connecter au SoC. Par défaut, c’est le PL011 qui est utilisé pour le Bluetooth car il a une pile FIFO plus importante que celle du « mini » UART.

Le mini UART est donc relié au port GPIO (broches 8 et 10).

Cette modification importante et non documentée a « cassé » des applications qui tournaient bien avec le port série du Raspberry Pi 2 et qui refusaient de fonctionner sur le Pi3. De nombreux articles de blogs qui fonctionnaient avec les générations précédentes de Raspberry Pi sont devenus inopérants. Les auteurs ne pensent pas forcément à revenir sur ces anciens articles et il faudra être prudent(e) si vous les utilisez.

Un UART pour mon SIGFOX

Dit comme ça ça peut sembler bizarre, mais je vous explique. La SNOC (Société Nationale des Objets Connectés) située à Saint-Sylvain-d’Anjou a sorti fin janvier une carte de prototypage pour SIGFOX. Cette BRKWS01 distribuée par Yadom, se connecte… sur le port série du Raspberry Pi (ou tout autre port série en 3,3v). Comme je prépare un article sur cette carte j’avais besoin du port série du Raspberry Pi 3.

Voilà, vous avez tout compris.

Pour faire fonctionner dans de bonnes conditions cette carte SIGFOX, je voulais la connecter au port série du GPIO (8 et 10) mais … ça ne fonctionnait pas et du coup bin voilà cet article 🙂

Rendre à César…

La première chose à faire c’est un choix. Est-ce que j’ai besoin du Bluetooth ? Ma réponse est non. Ça veut dire que je peux dévalider le Bluetooth et du coup récupérer l’UART « kivabien » pour ma carte SIGFOX.

Vous avez 4 options

  • Option 1 : Utiliser l’UART (le vrai !) en perdant la fonction Bluetooth. Il faut permuter les E/S des deux UART. Pour cela, ajoutez à /boot/config.txt : dtoverlay = pi3-disable-bt
    Puis supprimer :
    console=serial0,115200  dans cmdline.txt
  • Option 2 :  Faire fonctionner l’interface série et le Bluetooth correctement, mais la vitesse d’horloge du processeur sera fixée (à une vitesse faible [250MHz] ou à une vitesse élevée [500MHz?]). Ajoutez enable_uart = 1 à /boot/config.txt. Cela affectera les performances du processeur car ça contrôle la vitesse du cache L2, et on notera également une réduction de la qualité audio analogique (voyez ici et ).
    Si vous optez pour la vitesse d’horloge élevée (il faudra vraiment prévoir un ventilateur et un radiateur) pour garder la performance du processeur et la qualité audio, ajoutez également  force_turbo = 1 à /boot/config.txt.
  • Option 3 : Avoir une interface série « pourrie » sur le GPIO (vitesse variable) mais avoir un Bluetooth correcte : Ne rien faire. Ce sont les paramètres par défauts
  • Option 4 : Faire fonctionner correctement l’interface série (UART), avec un Bluetooth qui fonctionne lentement. Permutez les UART : ajoutez dtoverlay = pi3-miniuart-bt  au fichier /boot/config.txt, puis définissez la fréquence à une valeur fixe (faible) en ajoutant, toujours à /boot/config.txt : core_freq = 250. Cela affectera les performances du processeur.  Si vous préférez conserver des performances plus élevées n’ajoutez pas la ligne core_freq = 250 mais plutôt la ligne force_turbo = 1 mais cela nécessite d’utiliser un ventilateur et un radiateur.

J’ai choisi la première.

Les ports série

Si tout va bien en faisant un ls -l /dev vous devriez retrouver un port serial0 qui pointe vers ttyAMA0.

Les tests

Bien entendu pas question de connecter quoi que ce soit derrière le port série sans savoir d’abord si ça fonctionne. Vous me voyez venir ? Alors c’est une question dans les commentaires à la fin de l’article sur la carte SIGFOX (j’imagine, bien sûr : ça ne se produira pas ! 😀 ) :
« Bonjour, j’ai suivi le tuto mais ça ne marche pas ! »
Réponse : « Est-ce que vous avez testé le port série avant de connecter la carte SIGFOX ?  »
« Non, mais j’ai bien suivi le tuto !! ça doit marcher !!« 

Eh bien non, cher(e) lecteur(trice) ! Point ne suffit de suivre à la lettre un tuto ! Tu te dois de vérifier à chaque étape que le résultat attendu est bien au rendez vous…

Certes me diras tu, mais comment qu’je fais moi ? pour tester le port série ?
Fastoche :
Tu vas relier les ports GPIO 8 et 10 correspondant à TXD et RxD (Données émises => Données reçues).
Lorsque tu vas envoyer des données sur le port série TxD, elles vont revenir par le port RxD… Hop là retour à l’envoyeur (ça s’appelle un loopback) ! Et le programme utilisé pour envoyer les données va les recevoir et les afficher 🙂
Suite à une remarque de msg (voir les commentaires) reliez les bornes 8 et 10 avec une résistance pour éviter la destruction des ports (ou pire) en cas d’erreur. 680 Ω ou 560 Ω fera l’affaire.
Bon avant de sortir la grosse artillerie on va dégainer un petit bout de Python, déjà pour se rendre compte de ce qui se passe.

 [stextbox id= »warning » caption= »Attention ! »]Le loopback fonctionne bien lorsque l’UART est connecté aux broches 8 et 10. Pensez à débrancher le court-circuit entre ces deux bornes après la fin des tests, sinon vous risquez d’endommager votre SoC ![/stextbox]

Un programme en Python

Ce programme (adapté d’un prog du forum raspberrypi.org) va envoyer des données en sortie sur le port série, puis les récupérer  sur l’entrée. Ici le test qui nous intéresse est celui de /dev/ttyAMA0. Vous pouvez mettre les ports que vous voulez tester dans la liste.

Lancez le programme de test et vous devriez obtenir :

pi@raspberrypi:~ $ python tesTxRx.py
Port Série  /dev/ttyAMA0  ouvert pour le test :
Envoyé  33  octets
Reçu  33 octets identiques. Le port /dev/ttyAMA0 fonctionne bien !
Port Série  /dev/ttyAMA0  ouvert pour le test :
Envoyé  33  octets
Reçu  33 octets identiques. Le port /dev/ttyAMA0 fonctionne bien !
Erreur sur  /dev/ttyS0
Erreur sur  /dev/ttyS0

Si vous n’avez pas la confirmation que le port ttyAMA0 fonctionne correctement, inutile de continuer. Il faut d’abord faire fonctionner ce port pour pouvoir l’utiliser.

Minicom un mini émulateur de terminal sous Linux

Pour utiliser Minicom, commencez par l’installer sur votre Raspberry Pi.

pi@raspberrypi:~ $ sudo apt-get install minicom

Configurez le :

Pour adapter le fonctionnement à la carte SIGFOX qui rejoindra ce Raspberry Pi, il faut régler les paramètres du port série à 9600 bits par seconde, 8 bits de données, pas de parité et un bit de stop. Ceci se traduit par 9600 8N1.

Choisissez également le port série pour qu’il corresponde au port raccordé au GPIO : /dev/ttyAMA0.

Il ne reste plus qu’à tester : tapez… n’importe quoi sur le clavier et ça doit apparaître sur l’écran. Si rien n’apparait… C’est que le port série ne fonctionne pas ou que quelque chose est mal configuré.

En Python

=========###  Edit du 25 février 2019  ###=========

Étienne m’a envoyé ce message :

J’ai testé cette excellente modif sur mon Pi3B+ car grand besoin d’un UART de compète pour mes projets !
Attention, si vous travaillez comme moi en python3, il faut faire quelques modifs, rajouter les parenthèses dans les fonctions print, par exemple pour la dernière ligne on écrira :

print (« Erreur sur « , port, « \n »)

il se peut aussi que vous ayez des erreurs d’encodage des caractères, il faudra alors écrire :
test_string = b »Je teste le port série 1 2 3 4 5″

Conclusion

Ce n’est pas la première fois que la Fondation Raspberry Pi nous fait le coup. On avait déjà connu ça avec l’introduction de systemd, peu documentée. Les habitués de Linux s’en sortaient tant bien que mal, mais cela avais mis de nombreux débutants en mauvaise posture. Pas ou peu d’infos, pas de doc… Système D ( 😀 ) obligatoire.

Eh bien là c’est rebelotte. On modifie les ports série, pas ou peu d’infos… Des surprises à la clé !

Eh les gars pensez aux utilisateurs… Le Raspberry Pi est fait pour l’éducation (aussi) et ceux/celles qui le mettent en œuvre ne sont pas forcément des vieux linuxiens barbus ! Alors s’il vous plait un peu d’infos et de doc, juste un peu 😉

===>  Edit du 21 avril 2020 <==================

Merci à Benoît qui m’a transmis ce message pour appliquer au Pi4

Le port série du Raspberry Pi 4

Un grand merci pour ces explications!!! ça m’a sauvé 🙂
Je sais bien que cet article est destiné au Pi3 mais je voulais juste faire une remontée d’expérience quant à sa mise en œuvre sur Pi4 (sous Raspbian à jour en date d’avril 2020).

j’ai essayé d’appliquer le méthode 1 n’ayant pas du tout besoin du Bluetooth intégré au Pi4:

Dans /boot/config.txt au lieu de dtoverlay = pi3-disable-bt j’ai rajouté :
dtoverlay = disable-bt en fin de fichier
et bien entendu j’ai supprimé  dans /boot/cmdline.txt : console=serial0,115200

PS: j’ai également désactivé le service hciuart en exécutant la commande :

sudo systemctl disable hciuart
puis reboot…

 Quant au code pour tester les ports serie j’ai été obligé de le modifier un petit peu pour qu’il soit compatible avec mon environnement python:

Sources

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

59 réflexions au sujet de « Le port série du Raspberry Pi 3 : pas simple ! »

  1. F6EEQ

    Merci pour cet article.

    J’avais déjà +/- débrouillé le bazar pour brancher un GPS en port série, mais les tutos ou forums apportent toujours des réponses partielles.
    Au moins ici on a les explications précises de l’origine du problème et les remèdes à apporter su un seul article!

    Gérard

    Répondre
      1. S.POURRE

        Bonjour,

        C’est bien plus qu’une simple compilation.
        Derrière, il y a un travail d’analyse, de tests, de rédaction. chapeau l’artiste 😉

        Sylvain

        Répondre
  2. gUI

    Merci pour ces explications très complètes !

    Je me sers encore de l’UART souvent en tout dernier dépannage. J’ai pas (encore) de RPi3, mais j’aurais pas mal galéré 🙂

    Répondre
  3. msg

    Bonjour François ,

    Petite remarque pour le test :
    Ne peut-on pas remplacer le court circuit par une résistance tampon ?
    ça serait moins dangereux pour le Pi en cas de fausse manœuvre ou d’oubli .

    Je ne veux pas dire de bêtises , mais je crois que l’UART , comme les GPIO en entrée , fonctionnent en tension et non en courant ,
    Une résistance de pas trop grosse valeur devrait faire l’affaire .

    la 1KΩ est parfaite pour les signaux en 5V , ça limite le courant à 5mA en cas de court jus .
    Testé sur un montage où j’avais des « GPIO » en mode bi-directionnel (lecture depuis un composant puis écriture vers un autre en mode parallèle sur la même ligne de données ) , la résistance tampon m’évitait de faire des court-jus lorsque les bits reçus étaient de valeur contraire aux bits envoyés .

    Pour le test , vu que le GPIO tourne en 3,3V , une 680 Ω ou une 560 Ω devrait faire l’affaire pour un courant équivalent .

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      oui tout à fait d’accord!
      c’est vrai que j’ai gardé l’habitude du court-circuit qu’on faisait… avant sur les prises DB25 et DB 9 😀
      merci je modifie l’article en conséquence !
      cordialement
      François

      Répondre
  4. Namu

    Salut,

    La dernière révision du Pi 2 qui utilise le même SoC que le Pi 3 mais sans wifi, ni BT. Logiquement, elle ne devrait pas avoir de soucis mais si quelqu’un pouvait le confirmer ça m’arrangerait 🙂

    Je dois remplacer le B+ qui gère ma domotique et j’utilise l’UART pour la Téléinfo EDF…

    Répondre
  5. hajji

    bonjour,
    j’ai un projet qui nécessite d’envoyer des données : par trois équipements liée en série
    -Envoyer des données du raspberry pi 3 par un adaptateur USB/RS232 vers un adaptateur RS232/ethernet (MOXA 5210 A) et ensuite vers un data concentrateur via un câble RJ 45.
    les données sont envoyées bidirectionnels
    l’adresse IP du raspberry pi :169.254.244.62
    l’adresse IP du MOXA :192.168.0.3
    l’adresse IP du Data concentrateur : 192.168.0.1
    comment créer un script shell qui envoie les données du raspberry pi vers le data concentrateur ?
    et merci

    Répondre
  6. G DE LA RUE

    Merci pour cet article François ! Je l’avait fait sur tous les raspi avant le 3, et j’ai été bloqué 2h cet après-midi sur rpi3 à cause de ça…
    Pour moi également j’ai fait le choix de supprimer le BT et utiliser l’UART0 en full speed.
    Je fais une chose en plus : désactiver le service BT qui ne sert plus à rien.


    sudo vi /boot/cmdline.txt

    dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait


    echo "Disable bluetooth service"
    sudo systemctl disable hciuart


    sudo vi /boot/config.txt

    # Disable BT and enable UART0 on /dev/ttyAMA0
    dtoverlay=pi3-disable-bt
    enable_uart=1

    Répondre
  7. Thierry

    Bonjour François,
    Merci pour ce tuto c’est exactement ce que je cherchais, malgrés tout, lorsque je lance le script python j’ai ca en retour :
    Erreur sur /dev/ttyAMA0
    Erreur sur /dev/ttyAMA0
    Erreur sur /dev/ttyS0
    Erreur sur /dev/ttyS0
    Il y a donc un dysfonctionnement quelque part ???
    Par contre je suis sous Ubuntu Mate 16.04, peut être est ce cela mon problème ???
    Thierry

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Thierry
      c’est possible je n’utilse pas Ubuntu
      il faudrait analyser en détail les messages
      et la façon dont Ubuntu gère les ports RS232
      cordialement
      François

      Répondre
      1. Thierry

        Merci pour cette réponse, je viens de faire le test avec la dernière RaspBian et cela fonctionne.
        Il ne me reste plus qu’a adapter ROS sur la Debian.
        Merci François.

        Répondre
  8. thierry76

    Merci François pour toutes ces explications, malheureusement pour moi, ça ne fonctionne pas.
    J’ai choisi l’option 1 en respectant la syntaxe et après reboot, la Raspi est plantée.
    Reformatage et écriture de la dernière image Raspbian Jessie.
    Y-a-t-il un endroit particulier dans le fichier config.txt où ecrire la modif dtoverlay = pi3-disable-bt

    Thierry76

    Répondre
  9. boubou

    Bonjour,
    J’ai désactivé la fonction bluetooth parce que j’e n’en pas besoin pour l’instant
    lorsque je tape cette commande ls -l / dev j’ai :  » serial1 -> ttyAMA0  »
    J’ai mis le même programme que vous avez mis en dessus pour testear le bon fonctionnement du port mais ça bloque dans la première phrase du programme :  » Port Série /dev/ttyAMA0 ouvert pour le test :  »
    et ne rien fait après, je ne vois aucune émission/réception de données
    Avez vous une idée ?
    merci d’avance

    Répondre
    1. RogerT

      bonjour,
      j’ai eu le même problème (Rasbian Jessie – voir mon message du 25/08/2018) :
      J’ai Rajouter à /boot/config.txt
      enable_uart=1
      après reboot :
      $ ls -l /dev | grep serial
      lrwxrwxrwx 1 root root 5 Aug 25 21:59 serial0 -> ttyS0
      lrwxrwxrwx 1 root root 7 Aug 25 21:59 serial1 -> ttyAMA0

      Répondre
      1. Pointillé

        Bonjour,

        Nous avions le même problème que boubou, nous avons suivi vos conseils. Nous avons bien serial0 pointant vers ttyS0, et serial1 pointant vers ttyAMA0.
        Cependant, après l’éxecution du programme python, le terminal affiche ” Port Série /dev/ttyAMA0 ouvert pour le test : ”, et pas de suite.

        Merci d’avance.

        Répondre
          1. Pointillé

            Oui les deux broches GPIO étaient bien strappées, après recommencement depuis le début, cela a fonctionné, donc plus de problèmes.

            Cordialement

            Répondre
  10. S.DECORME

    Bonjour
    Merci pour cette article complet .
    Je cherche juste le baudrate Max que peut atteindre l’UART0 , j’ai besoin de monter à 460800bauds
    Merci

    Répondre
  11. Hendrik

    Bonjour,
    Je suis novice en Linux et je développe une application qui nécessite le port série complet.
    Cet article est, semble-t-il, très complet.
    Mais mon Pi3 me refuse le droit de modifier les fichiers config.txt et cmdline.txt.
    Comment faire pour modifier les droits de ces fichiers?
    Merci pour votre réponse

    Répondre
    1. Michel

      Tu utilises la commande sudo chmod. (Sudo c’est pour avoir les droits de root, c’est à dire de tout faire). chmod c’est la commande que tu change les droits en lecture, écriture et exécution.

      Répondre
  12. David.B

    Salut à tous,

    Article très instructif et qui fonctionne parfaitement, mais je souhaitais partager avec vous un problème annexe, résolu mais inexpliqué, alors si ça peut éviter une galère à d’autres et qu’un spécialiste peut nous éclairer sur ce phénomène…

    J’ai utilisé la procédure ci-dessus sur un Raspberry Pi 3 sous Raspbian 9.1 et Python 2.7 dont l’objectif était d’utiliser le port série depuis PHP 7.0.19-1. En suivant les instructions ci-dessus, tout fonctionne parfaitement. Alors vous allez me dire où est le problème ? Eh bien, si on omet le test du script python, d’autant qu’on pourra procéder aux mêmes vérifications sous PHP, rien ne fonctionne avec cette technologie. La lecture de Rx ne fournit cette fois absolument rien ! Pourtant minicom démontre que le shunt est opérationnel.

    Comment résoudre ce problème ? Sachant qu’il faut initier une communication série via un script python (même plus élémentaire que celui décrit ci-dessus) pour que PHP s’en sorte jusqu’au prochain démarrage, il faut lancer ce script automatiquement au lancement de l’OS et le problème n’existe plus.

    Maintenant je suis preneur de toutes explications sur ce phénomène pour éviter ce genre de bidouille. En tout cas vous voilà averti, si vous pensiez maitriser le port série via PHP, redémarrez avant de crier victoire…

    David.B

    Répondre
  13. M. BLIN

    Bonjour,
    Merci pour cet article très bien fait qui explique clairement les possibilités pour faire fonctionner le UART du Raspberry pi 3.
    J’ai suivit les instructions, ai fait les mise à jour qui s’impose, …
    J’utilise le Rapsberry Pi comme serveur, permettant de piloter des périphériques i2c tel que des afficheurs oLed, LCD, pilote de moteur pas à pas, le GrovePi+, …
    mais certain périphériques fonctionnent avec le port UART. Lorsque je l’utilise en lecture seul, tout fonctionne bien (exemple d’un module GPS). mais lorsque je dois transmettre des messages, il se met à déblatérer des informations dont je ne suis pas l’auteur. Comment savoir d’où cela vient ? Quelqu’un aurai-t-il déjà rencontré puis résolu ce problème ?

    Je vous remercie par avance,
    Jean BLIN

    Répondre
    1. M. BLIN

      Bonjour,
      Je me répond à moi même, mais j’ai fini par trouver la solution, …
      La carte GrovePi+ qui est vendu avec un grand nombre d’équipement prévu pour communiquer avec le port série… perturbe et ne permet pas d’utiliser le port série.
      Il y a des concepteurs qui devraient réfléchir au moins une fois avant d’agir…
      Donc désolé d’avoir posé une question avant de tester la chose la plus simple… Retirer tous les équipement et faire un test à vide.
      Encore désolé et que ma déconvenue serve au minimum à guider les futures devs qui oublierons, sans doute par rêverie, de faire les testes les plus simple.
      Cordialement,
      M BLIN

      Répondre
  14. didi

    Bonjour

    Raspberry pi 3 , Raspbian stretch ,
    J’ai essayer votre option numéro 1 et j’ai pas été dessus : « kernel panic » et impossible de démarrer la Raspberry , j’ai essayer de re-modifier les fichier directement sur la carte SD mais rien n’y fait , obliger de reformater la carte et de refaire la config de la Rasp. et c’est un peut prés le même problème pour tout vos tuto il ne sont ni a jour et ne fonctionnent pas pour stretch … merci de donné dans le futur qu’elles sont les versions des logiciels et la date de création du post

    bonne journée

    Répondre
    1. tnatf

      UP !

      De mon coté, j’arrive à éditer le fichier depuis un autre système linux.
      c’est le rajout de enable_uart=1 à /boot/config.txt qui fait planter

      Répondre
  15. Fleron

    Bonjour,
    Je viens régulièrement sur votre site … Merci pour le boulot!
    J’ai un soucis de parasites sur la sortie de la liaison série, suffisamment important pour ne pas pouvoir récupérer qq de propre pour être traduit en DMX.
    Ces parasites semblent constants et répondre à une fréquence précise
    Je suis sur un rasp 3 B+
    Avez vous des pistes sur la cause de ces parasites?
    Encore merci.

    Répondre
  16. Don

    Étrange… le UART fonctionne bien Rx & Tx lorsque le programme est démarrer en ligne de commande « python3 main.py », mais le UART ne fonctionne pas une fois la distribution compléter avec pyinstaller…
    « /home/pi/.local/bin/pyinstaller –onefile –hidden-import=tkinter -y –hidden-import=’PIL._tkinter_finder’ main.py » « cd dist/ » « ./main »

    Le programme sombre dans boucle infini avec l’appel de: « device.readline() »….

    J’ai l’impression que RaspberryPi3 contient des permissions et que la documentation est nul part…. :s

    Répondre
  17. ZAABOUBI

    Bonjour,
    A ce que il y a une possibilité de lire les messages envoyée par la raspberry via l’UART, ji utilisé le port 8 pour TX pour l’envoi des donnée. lire les données envoyées sur la broche 8

    Répondre
  18. MARTIN

    Bonjour François,
    Le Rapsberry me paraît intéressant pour résoudre mon problème :
    Je cherche un matériel qui peut remplacer un modem en protocole minitel par un modem 4G.

    J’ai actuellement une connexion à distance entre un minitel d’une part et un modem analogique bas débit de protocole Minitel d’autre part, connecté à un système de chauffage Clipsol PSDAI, me permettant de piloter ce chauffage à distance.
    La connexion s’établit en composant sur le Minitel le n° de téléphone à 10 chiffres de la ligne où est branché le modem.

    C’est super pratique et ça marche très bien.

    Malheureusement, Orange va bientôt supprimer la liaison filaire analogique et du coup, plus rien ne fonctionnera avec le minitel.

    Je voudrais donc faire évoluer le système sur internet : une solution serait de remplacer le modem Minitel par un modem internet, 4G si possible.
    D’un côté, à partir de l’entrée du modem à remplacer (Light Modem MV 123 V23 de COM1), installer un modem 4G et envoyer les pages de dialogue sur internet.
    De l’autre côté, recevoir ces pages sur un PC ou un smartphone, et échanger des informations pour contrôler et programmer le chauffage.

    Je cherche donc quelqu’un pour réaliser cette transformation.
    Merci pour votre proposition.
    Cordialement.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      je sais que des solutions existent pour interfacer un minitel et un Raspi mais je n’ai pas pratiqué
      si le Raspi sert à envoyer/recevoir les données, vous devriez pouvoir passer par la prise série à l’arrière du minitel (moyennant une adaptation de niveau)
      Minitel piloté par un Raspberry Pi sur le stand SLMEDIATION aux #RNRPI3 de Nevers 2018
      ici sur le stand de SLMEDIATION un Minitel piloté par un Raspberry Pi lors de #RNRPI3 à Nevers
      essayez de poser la question dans le forum vous aurez peut etre des solutions ?
      cordialement
      François

      Répondre
  19. RogerT

    Bonjour,
    comme de nombreuses personnes, j’ai perdu _beaucoup_ de temps à configurer ce fichu port série du Rpi 3 ArgX!(@@)%$\/…
    Dans mon cas (RPi3 model B), c’est le commentaire de G DE LA RUE qui a finalisé une solution opérationnelle, cad l’option 2 de François + désactivation du BT :
    & cat /boot/config.txt
    #…
    dtoverlay = pi3-disable-bt
    enable_uart=1
    (et en modifiant aussi /boot/cmdline.txt)

    Je m’occupe maintenant de communiquer enfin avec mon modem.
    Je testerai plus tard toutes les autres options avec BT et je vous mettrai au parfum.

    Merci à vous deux

    Répondre
      1. RogerT

        Pour information à ceux qui galèrent dans leur communication avec leur modem (après avoir enfin réglé le problème du port série du RPi3) :
        J’ai eu et j’ai réglé un souci bloquant ( avec minicom, non lié à minicom) : impossible de causer avec le modem via ce port série.
        En fait, ça ne marchait pas car la communication était réglée à 9600 bauds. A 115200 bauds, débit du modem, ça marche impeccable.
        AT
        OK

        Question : quel composant de communication série le plus léger recommandez-vous d’utiliser pour intégrer à un programme _quelconque_ (éventuellement un script bash) ? A ce propos, quels composant utilise Python et sa bibliothèque (directive « import serial ») ?
        Savez-vous comment utiliser minicom en CLI (ligne de commande) plutôt qu’en tant que terminal ?

        Merci

        Répondre
  20. etiennes33

    Hello la team 🙂

    J’ai testé cette excellente modif sur mon Pi3B+ car grand besoin d’un UART de compète pour mes projets !

    Attention, si vous travaillez comme moi en python3, il faut faire quelques modifs :

    rajouter les parenthèses dans les fonctions print, par exemple pour la dernière ligne on écrira :
    print (« Erreur sur « , port, « \n »)

    il se peut aussi que vous ayez des erreurs d’encodage des caractères, il faudra alors écrire :
    test_string = b »Je teste le port série 1 2 3 4 5″

    Et avec ça, c’est nickel …

    Merci framboise314 pour tout ce que tu fais !!

    Répondre
  21. ebac1

    Bonjour,
    etant novice en la matière comment faisons nous un retour en arrière, remise en service du bluetooth ?
    merci d’avance pour votre aide

    Répondre
  22. Ping : Le port série du Raspberry Pi 3 – very Usefull tricks, or not

  23. Ping : Un GPS USB pour le Raspberry Pi - Framboise 314, le Raspberry Pi à la sauce française....

  24. Valentin COLLIEZ

    Bonjour,
    Est-ce que couper le Bluetooth interne au Rpi comme indiqué ici, pour faire fonctionner la Pizigate, et utiliser un dongle Bluetooth usb me permettrait d’avoir Zigbee et Bluetooth sur mon Rpi 3 ?

    Répondre
  25. Phillou53

    Bonjour François,

    Un IMMENSE merci pour ce site et pour cet article très intéressant en particulier. Il m’a sauvé de la crise de nerf avec une interface z-wave.me Razberry particulièrement récalcitrante sur une Jeedom RPi ! D’autres détails ici : https://community.jeedom.com/t/interface-z-wave-razberry-qui-ne-fonctionnait-pas-et-mesure-niveau-du-signal-z-wave/27953

    Avec un brin de nostalgie en pensant au chip USART 8251 d’un autre temps à x bits/s, 1 stop bit, part paire ou impaire … 200 bits/s au début avec les « fameux » Teletype et autres Dumb Terminal vt100 … Un autre monde 😉

    Répondre
    1. François MOCQ Auteur de l’article

      merci 🙂
      et merci pour le lien qui pourra sans doute servir à d’autres domoticiens
      ah oui j’ai bien connu aussi notre ami 8251 puisque j’ai été élevé avec du Z80 dans mon biberon 😀
      la prise uFL du raspi est là pour les tests lors de la certification de la partie radio (mesures de puissance et de « propreté » du signal), on n’est pas censé ajouter une prise et une antenne car on perd la certif 😀
      cdt
      francois

      Répondre
  26. Ping : Synchronisez la date et l’heure de votre Raspberry PI avec un GPS – Société Havraise de Télégraphie Sans Fil -- 25 rue des Iris

  27. fred

    Bonsoir,
    Merci pour cet article.
    Je cherchais pourquoi je n’arrivais pas à communiquer avec mon compteur LINKY avec un RPI3B+.
    Après avoir parcouru tous les commentaires j’ai enfin réussi à faire fonctionner le programme de test en Python 3.5 sur l’option 1 et je suis sous stretch. Mais le résultat n’est pas satisfaisant et je ne comprends pas pourquoi!
    Je vous donne donc toutes mes étapes en espérant que quelqu’un comprenne le problème.
    Dans config.txt, j’ai ajouté: dtoverlay =pi3-desable-bt et mis en commentaire #enable_uart=1
    Dans cmdline.txt j’ai supprimer console=serial0,115200
    et en plus également désactivé le service hciuart : sudo systemctl disable hciuart
    J’ai corrigé toutes les «  » et () du fichier original pour que le prog fonctionne et bouclé avec une résistance de 560 ohm pour le test.
    et le test me renvoie:
    Port Série /dev/ttyAMA0 ouvert pour le test:
    Envoyé b’Je teste le port serie 1 2 3 4 5′ soit 32 octets
    Reçu des données incorrectes: b » sur le port série /dev/ttyAMA0 bouclé
    j’ai descendu la vitesse du port à 1200bauds mais rien n’y fait je ne reçois pas ce que j’envoie sur les pin 8 et 10.
    merci pour vos propositions.

    Répondre
  28. Matthieu

    De rien. Et bravo pour le truc du loopback. C’est une astuce que peu de bricoleurs connaissent étonnamment, et qui rend des grands services pour débuguer ces satanées UARTs 😊

    Répondre
  29. Mickael

    Bonjour,

    Très bon article, mais sur la photo en haut un voit un cablage des ports TX/RX + GND et VCC sur un composant, je ne vois nulle part sa référence ?

    Est-il possible de se passer de ce composant en reliant les pins TXD/RXD à un DB9 sur les pins 2-3 ?

    Je viens d’essayer mais ça ne fonctionne pas. (en loopback ma config ça fonctionne)

    Répondre
  30. Framont

    Bonjour,
    Merci pour votre billet. J’essaye de connecter une imprimante thermique (9600 baud) sur le port série d’un Raspberry Pi Zero W (raspbian bullseye), sans succès.

    J’ai connecté GPIO14 et GPIO15 avec une résistance tampon de 680 Ohm ; testé, c’est ok.

    J’ai suivi votre option 1 (je n’ai pas besoin de bluetooth) :
    – ajouté dtoverlay=pi3-disable-bt dans /boot/config.txt
    – effacé
    console=serial0,115200 dans /boot/cmdline.txt

    ls -l /dev donne
    lrwxrwxrwx 1 root root 7 Jul 21 16:28 serial0 -> ttyAMA0
    lrwxrwxrwx 1 root root 5 Jul 21 16:28 serial1
    -> ttyS0

    Après reboot, le script python de test ne fonctionne pas.

    Jai aussi essayé en désactivant le service hciuart
    sudo systemctl disable hciuart

    Puis modifié la ligne du script python en test_string = b »testtest »

    Une fois lancé le test, j’obtiens toujours

    Port Série /dev/ttyAMA0 ouvert pour le test:
    Envoyé 8 octets
    Reçu des données incorrectes: b » sur le port série /dev/ttyAMA0 bouclé
    Erreur sur /dev/ttyS0
    Erreur sur /dev/ttyS

    J’ai aussi essayé avec minicom, qui reste muet et remplacé le Pi Zero avec un autre… même résultat.

    stty -F /dev/serial0 donne :
    speed 9600 baud; line = 0;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

    Y a-t-il un erreur ou oubli de ma part ?

    Répondre
  31. Framont

    Merci pour votre réponse. En effet, mon projet est bloqué à cause de ce problème de port série. J’ai lu aussi votre autre article au sujet… sans malheureusement trouver de quoi résoudre mon problème.

    Répondre
  32. Nkuindjeu Frank

    Salut !

    Vraiment merci pour ce tuto complet cela m’a beaucoup aide. Cependant lors d’un essaie de communication entre mon pi 3 et le terminal sur mon pc (RealTerm) je rencontre un problème de décodage sur le terminal en question.

    Voici le code sur mon pi :

    «  » » »import serial

    ser = serial.Serial(‘/dev/ttyAMA0′)

    print(ser.name)
    ser.write(b »Hello world\r\n »)

    ser.close() «  » » »

    Et voici le résultat que j’obtiens :

     » »’ 5 »!¿!’7åë  » »

    Quel peut en être la cause svp ?

    Répondre
  33. Nkuindjeu Frank

    Merci monsieur pour votre réponse aussi rapidement et désole de vous répondre aussi tardivement.
    Oui la vitesse de transmission est bien similaire des 2 cotes

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.