Envoyer et recevoir des données binaires via une communication série avec python3 (sur Mac)

Choses à faire

La communication série (UART) est effectuée entre mac et python3 à l'aide d'un pilote série USB ou similaire.

Comment faire

Vous pouvez le faire en installant pyserial avec pip et en important serial. J'ai trouvé beaucoup d'articles dans la recherche que je ne pouvais pas faire avec python3, mais à partir du 29 février 2020, je pouvais le faire avec python3.

environnement

procédure

Installez pyserial

install.sh


$ pip install pyserial

Recevoir

Le code est le suivant, qui reçoit 1 octet en série, le convertit en notation décimale et le convertit en sortie standard.

serial_read.py


import serial
import struct

ser = serial.Serial(
      port = "/dev/cu.usbserial-XXXXXXXX",
      baudrate = 115200,
      #parity = serial.PARITY_NONE,
      #bytesize = serial.EIGHTBITS,
      #stopbits = serial.STOPBITS_ONE,
      #timeout = None,
      #xonxoff = 0,
      #rtscts = 0,
      )

while True:
      if ser.in_waiting > 0:
            recv_data = ser.read(1)
            print(type(recv_data))
            a = struct.unpack_from("B",recv_data ,0)
            print( a )

La chaîne de port doit être ls / dev / cu. *, Et sélectionnez le périphérique approprié parmi les périphériques qui apparaissent comme ʻusbserial -... `. La partie commentée conserve les paramètres par défaut, alors commentez et définissez les paramètres appropriés si nécessaire.

Vous pouvez vérifier s'il y a des données reçues dans le tampon série (le nombre d'octets contenus dans le tampon) en vous référant à ser.in_waiting.

Les données reçues seront traitées comme une chaîne de caractères même s'il s'agit de données binaires. Si les données reçues sont binaires, vous devez les convertir en nombre en utilisant struct_unpack_from () comme dans le code ci-dessus. Pour les chaînes utf8, vous devez décoder. S'il s'agit d'une soi-disant chaîne de caractères 7 bits, elle peut être traitée telle quelle sans décodage ni déballage.

Envoyer

Envoyez n'importe quelle chaîne d'octets (buf).

serial_write.py


import serial
import struct

def send( buf ):
      while True:
            if ser.out_waiting == 0:
                  break
      for b in buf:
            a = struct.pack( "B", b )
            ser.write(a)
      ser.flush()

ser = serial.Serial(
      port = "/dev/cu.usbserial-XXXXXXXX",
      baudrate = 115200,
      #parity = serial.PARITY_NONE,
      #bytesize = serial.EIGHTBITS,
      #stopbits = serial.STOPBITS_ONE,
      #timeout = None,
      #xonxoff = 0,
      #rtscts = 0,
      )

x = [ 0x01, 0xFF, 0x02, 0xFE, 0x03]
send( x )

Si vous ne videz pas vous-même, il semble qu'il ne sera pas envoyé tant que certaines données de transmission ne seront pas mises en mémoire tampon. Si vous ne cochez pas ser.out_waiting, il semble que parfois il ne puisse pas être envoyé normalement.

Si vous souhaitez envoyer une chaîne (alphabétique) au lieu d'un binaire, vous pouvez le faire ci-dessous.

serial_str_write.py


x = b'abcdef'
ser.write( x )

Si vous souhaitez envoyer une chaîne utf8, vous devez l'encoder.

Résumé

Je pensais que ce serait plus facile que d'écrire en langage C ou rapide, mais j'avais beaucoup de choses à faire en dehors de la partie communication, donc j'avais du mal à découvrir comment déballer et encoder.

Recommended Posts

Envoyer et recevoir des données binaires via une communication série avec python3 (sur Mac)
Envoyez et recevez des données avec MQTT via Watson IoT Platform
Communication série avec Python
Essayez d'importer des données MLB sur Mac et Python
Commencez la communication avec UDP et envoyez et recevez avec TCP
Installez le sélénium sur votre Mac et essayez-le avec python
Envoyer des données de Python au traitement via une communication socket
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
La communication I2C est effectuée en contrôlant la communication série avec python (à l'aide d'un périphérique USBGPIO8)
Contrôle de la communication série avec communication python et SPI (à l'aide d'un périphérique USBGPIO8)
Envoyer des e-mails via gmail avec Python 3.4.3.
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
Erreur et solution lors de l'installation de python3 avec homebrew sur mac (catalina 10.15)
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Installez lp_solve sur Mac OSX et appelez-le avec python.
Construction de pipeline de données avec Python et Luigi
Recevoir des données textuelles de mysql avec python
Essayez de travailler avec des données binaires en Python
Vérifier et recevoir le port série en Python (vérification du port)
POSTER diversement avec Python et recevoir avec Flask
Un mémo contenant Python2.7 et Python3 dans CentOS
Chase des applications actives sur Mac avec Python
Remarques sur la construction de Python et pyenv sur Mac
Créer un environnement Python avec Anaconda sur Mac
Envoyer un e-mail avec SES en Python et un message court avec SMS sur SNS
Mettre la liaison MeCab pour Python sur Windows, Mac et Linux avec pip
Créez un environnement Python 3 avec pyenv sur Mac et affichez des graphiques Network X
Recevoir et afficher les données de formulaire HTML en Python
Une histoire sur la gestion des données binaires en Python
python sur mac
Essayez de travailler avec Mongo en Python sur Mac
Mettez Python 2.7.x dans pyenv sur Mac OSX 10.15.5
Installez MongoDB sur Ubuntu 16.04 et utilisez python
Installez Python 3 sur Mac et créez un environnement [Definitive Edition]
Remarques sur le traitement d'images HDR et RAW avec Python
Suivi automatique sur Twitter avec python et sélénium! (RPA)
Installation de Python 3 sur Mac et vérification du fonctionnement de base Partie 1
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
E-mail hipchat avec postfix, fluentd et python sur Azure
Étudiez l'échange de données Java et Python avec Apache Arrow
Automatisez Chrome avec Python et Selenium sur votre Chromebook
Obtenir des données de la base de données via ODBC avec Python (Access)
Communication de socket avec Python
Analyse de données avec python 2
Installez Python sur Mac
Installer Python 3 dans un environnement Mac
Dichotomie avec python
Dichotomie avec Python 3
Communication HTTP avec Python
Envoyer des e-mails par Python
Installez Python 3.4 sur Mac
Analyse de données avec Python
Nombre de mots avec Apache Spark et python (Mac OS X)
Remarques sur l'importation de données depuis MySQL ou CSV avec Python
Construire un environnement Python sur un Mac, jusqu'au point d'utiliser Jupyter Lab
Remarques sur la gestion de grandes quantités de données avec python + pandas
Usurpation d'adresse IP à l'aide de tor sur macOS et vérification avec python
Tester Python avec Miniconda dans un environnement OS X et Linux avec travis-ci
Réglage du mode octet de l'application de communication série TWE-Lite (envoi en Python)
Débarrassez-vous des données sales avec Python et les expressions régulières
Résolvez le livre en spirale (algorithme et structure de données) avec python!