Publié le 13 novembre 2017 - par

Envoyer de l’hexadécimal sur le port série du Raspberry Pi

La question m’a été posée par un utilisateur qui souhaitait envoyer des données en hexadécimal, stockées dans un fichier, vers une machine connectée sur le port série du Raspberry Pi.

Envoyer des données en hexadécimal sur le port série du Raspberry Pi

Ce court article est plutôt une note qui pourra aider ceux qui ont la même problématique.

Le fichier de données

Les données étant stockées dans un fichier, j’ai créé un fichier data dans lequel j’ai mis du texte. Le texte c’est… du binaire, codé en ASCII.

Et qui dit binaire, dit hexadécimal, ce dernier étant simplement une représentation plus accessible pour les humains du premier.

Du coup pour avoir autre chose que du texte ou des chiffres codés en ASCII, j’ai utilisé hexedit (après l’avoir installé sur le Raspberry Pi) pour transformer certains caractères en nombres hexa qui ne soient ni des chiffres ni des lettres :

Le port série du Raspberry Pi 3

Pour ceux qui n’ont pas vu passer l’information, il y a un lézard avec le port série du Pi 3. La fondation a discrètement utilisé l’UART matériel pour le Bluetooth, le port série se voyant connecté à un UART software au rabais.

Parfait si vous utilisez le Bluetooth, un peu em…bêtant si vous avez besoin réellement du port série. J’ai publié un article sur ce problème de port série il y a quelque temps. Pour configurer le Pi 3 et utiliser l’UART matériel sur le port série, j’ai choisi l’option 1 car je n’utilise pas le Bluetooth sur cette carte.

Le programme Python

send_data SVP ne m’incendiez pas, c’est en partie récupéré sur des exemples et en partie écrit sur un coin de table. Si vous faites mieux (et ce n’est pas difficile), je peux publier votre solution 😉

Quoi qu’il en soit, vous pouvez télécharger le programme pour éviter de le saisir.

Rapidement :
Le programme initialise le port série puis il ouvre le fichier data qui contient les octets à envoyer. Il envoie les données à l’écran et au port série, et boucle tant que le fichier n’est pas fini.

Résultat sur un terminal

Oui je sais il manque le premier octet 🙂 je vous laisse voir pourquoi et modifier le programme. Ici c’était juste une POC !

Résultat sur le port série

Le mieux pour voir ce qui est envoyé par le port série, c’est ce regarder ce qui se passe avec… le port série !

Pour cela on va relier la sortie TxD à l’entrée RxD (un fil entre la patte 8 et la patte 10). Les plus anciens se souviendront des « bouchons » RS232 que tout technicien digne de ce nom trimballait dans sa valise pour tester les ports série chez le client.

Image du site http://tk5yp.free.fr/brochages/rs232.htm

Quand on avait oublié son bouchon DB9 ou DB25, un simple trombone faisait l’affaire 😉

Une fois la boucle réalisée, tout ce qui sort sur TxD revient sur RxD. On pourrait modifier le programme pour recevoir et afficher ce qui arrive. Pour ma part j’ai choisi la solution de facilité et utilisé un terminal pour afficher le résultat : minicom

Comment faire ? J’ouvre 2 terminaux sur le Raspberry Pi 3.

  • Dans l’un je lance minicom qui se met à l’écoute du port série et affiche tout ce qui arrive (en Hexa car j’ai ajouté -H sur la ligne de commande)
  • Dans l’autre j’exécute le programme send_data.

Effectivement les données envoyées par le programme Python sont bien reçues par minicom. Il manque même le premier octet du fichier 😛

Cliquer pour agrandir

Conclusion

Ne considérez pas cet article comme un tutoriel. Il nécessite l’installation et l’utilisation de plusieurs programmes qui ne sont pas documentés ici.

Il met en œuvre l’hexadécimal, le port série qui ne sont pas forcément familiers aux débutants.

Voyez y un simple guide destiné à servir d’aide mémoire pour ceux qui auront à réaliser ce genre d’opération.

À 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.

6 réflexions au sujet de « Envoyer de l’hexadécimal sur le port série du Raspberry Pi »

  1. Fabien

    Une autre commande pour afficher des données en hexa (du port série, ou même d’un fichier binaire)
    hexdump -C /dev/ttyAMA0
    attention à bien mettre l’option -C (majuscule), sinon les données sont affichées par groupe de 2 octets avec les poids faibles et forts inversés (little endian…)

    Répondre
  2. dyox

    Bonjour,
    Je ne sais pas si vous le savez François mais vous pouvez utiliser un arduino en tant que convertisseur usb-TTL. Je viens de le faire sur une RPiv1, en tant que connection secours si l’adressage APIPA ne fonctionne pas.

    Répondre
  3. dyox

    Oh, rien de bien compliqué ! On met le reset au gnd puis la borne Rx de l’arduino (Uno dans mon cas) au Rx du pi, Tx au Tx et GND au GND puis on alimente normalement la Pi. Et j’ai utilisé MobaXterm pour les sessions (série et ssh).
    source : https://www.arduino.cc/reference/en/language/functions/communication/serial/
    Par contre en relisant, je n’ai pas fait attention à la tension qui diffère suivant les cartes, 5 ou 3V3.
    Ma Uno de contrefaçon travaille en 5V (confirmé au voltmètre, 4V pour Tx et 5V pour Rx)
    source https://store.arduino.cc/arduino-uno-rev3
    J’ai eu de la chance, c’est costaud ces petites bêtes 🙂

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

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.