Comment communiquer avec les ports série en Python

Dans vous décrit comment lire et écrire des données sur un port série en Python, généralement pour interagir avec un périphérique matériel (par exemple, un robot ou un capteur).

Bien que vous puissiez probablement le faire directement en utilisant les primitives d’E/S intégrées de Python, votre meilleur choix pour la communication série est d’utiliser le module pySerial.

Il est très facile de commencer avec le package. Vous ouvrez simplement un port série en utilisant un code comme celui-ci:

import serial
ser = serial.Serial('/dev/tty.usb41', baudrate=9600,
bytesize=8,
parity='N',
stopbits=1)

Le nom de l’appareil varie en fonction du type d’appareil et du système d’exploitation. Par exemple, sous Windows, vous pouvez utiliser un périphérique de 0 ou 1, pour ouvrir les ports de communication tels que “COM0” ou “COM1”.

Une fois ouvert, vous pouvez lire et écrire des données en utilisant les appels read(), readline() et write(). Par exemple:

ser.write(b'G1 X50 Y50\r\n')
resp = ser.readline()

Pour la plupart, la communication série devrait être assez simple et facile à partir de maintenant.

La communication série peut parfois devenir assez compliquée. L’une des raisons pour lesquelles vous devriez utiliser un module tel que pySerial est qu’il prend en charge les fonctions avancées (par exemple, les temporisations, le flux de contrôle, le vidage de tampon, le handshaking, etc.).

Par exemple, si vous voulez activer le handshaking RTS-CTS, vous fournissez simplement un argument rtscts=True à Serial(). La documentation fournie est excellente, vous pouvez la consulter pour plus d’informations.

Gardez à l’esprit que toutes les E/S impliquant des ports série sont binaires. Ainsi, assurez-vous d’écrire votre code pour utiliser des octets au lieu du texte (ou effectuez un encodage/décodage de texte approprié si nécessaire).

Le module struct peut également être utile si vous avez besoin de créer des commandes ou des paquets codés en binaire.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here