[PYTHON] Binäres Senden / Empfangen mit Pyserial

Einführung

Ich werde das binäre Senden und Empfangen unter Verwendung von Pyserial als Erinnerung beschreiben.

So senden Sie Binary mit Pyserial

Referenz: Binärdaten über Pyserial (serielle Python-Schnittstelle) Unter diesen sendet die Serial.write () -Methode von pyserial nur Zeichenfolgendaten. Ist geschrieben.

Sie können eine binär konvertierte Version senden, sodass die Ausgabe ungefähr "\ x00" ist. ("\ X" bedeutet, die folgenden zwei Zeichen als ganzzahligen Wert in hexadezimaler Notation zu interpretieren.)

Als Konvertierungsbeispiel Es wird beschrieben, wie [Array - feste Datentypsequenz] verwendet wird (http://ja.pymotw.com/2/array/).

import serial
import array

#Ich möchte Binärdaten senden
b = [0xc0, 0x04, 0x00]
print(b)
#Wird nach der Konvertierung in eine Dezimalzahl angezeigt
# >>>[192, 4, 0]

#Methode mit Konvertierungsarray zu Binary of Python
b_data=array.array('B', [0xc0, 0x04, 0x00]).tostring()
print(b_data)
# >>>b'\xc0\x04\x00'

#Methode mit Konvertierungsbytes für Binary of Python
b2_data = bytes(b)
print(b2_data)
# >>>b'\xc0\x04\x00'

#Beide sind im Vergleich gleich.
print(b_data==b2_data)
# >>>True

Es ist einfacher, bytes () zu verwenden, verwenden Sie dies also. Es kann beim Austausch im binären Modus von TWELITE im vorherigen Artikel verwendet werden.

Senden

#Senden Sie zum Beispiel
senddata=[0xA5,0x5A,0x80,0x07,0x00,0x00,0x00,0x64,0xFF,0xFF,0x02,0x67]

print(senddata)
#Die Druckausgabe erfolgt in Dezimalschreibweise
# [65, 90, 128, 7, 1, 0, 0, 100, 255, 255, 2, 103]

#In Binär konvertieren
send_binary =bytes(senddata) 
# bytearray()Vielleicht
# send_binary =bytearray(senddata) 

print(send_binary)
#Daten senden Binär
# b'\xa5Z\x80\x07\x01\x00\x00d\xff\xff\x02g'

#Senden Sie per Pyserial
with serial.Serial('COM12', 115200) as ser:
    print('---')
    ser.write(send_binary)
    print('---')

Erhalten


with serial.Serial('COM12', 115200) as ser:
    #Geben Sie die Anzahl der zu lesenden Bytes im Argument read an.
    b_reply = ser.read(23)
    #Beim Lesen aller
    b_reply = ser.read_all()

    print(b_reply)
    # >>> b'\xa5Z\x80\x04\xdb\xa1\x98\x01\xe3\x04\xa5Z\x80\x07\x01\x04\x00\x013<")\x04'

    #Mit dem struct-Modul muss angegeben werden, wie viele Bytes und welcher Typ gelesen werden sollen.
    #Dieses Mal werden 23 Bytes in Schritten von 1 Byte gelesen.
    #23B ist dasselbe wie 23 Bs in einer Reihe. B ist ein vorzeichenloser Zeichentyp in der Sprache C, der in Python eine Ganzzahl von 1 Byte ist.

    reply =struct.unpack('23B',b_reply)

    print(reply)
    # >>> 165, 90, 128, 4, 219, 161, 152, 1, 227, 4, 165, 90, 128, 7, 1, 4, 0, 1, 51, 60, 34, 41, 4
    #Die letzten 4 sind(EOT)Übertragungsendezeichen (Ende-of-Transmission character)
    #Analysieren Sie gemäß den Spezifikationen, welche Anzahl von Bytes welche Informationen enthält.

Recommended Posts

Binäres Senden / Empfangen mit Pyserial
Dichotomie mit Python
Dichotomie mit Python 3
Serielle Kommunikation mit Raspberry Pi + PySerial