Die serielle (UART) Kommunikation zwischen Mac und Python3 wird unter Verwendung eines seriellen USB-Treibers oder dergleichen durchgeführt.
Sie können dies tun, indem Sie pyserial mit pip installieren und serial importieren. Ich habe in der Suche viele Artikel gefunden, die ich mit Python3 nicht machen konnte, aber ab dem 29. Februar 2020 konnte ich es mit Python3 machen.
install.sh
$ pip install pyserial
Der Code lautet wie folgt: Er empfängt 1 Byte seriell, konvertiert es in Dezimalschreibweise und konvertiert es in Standardausgabe.
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 )
Die Portzeichenfolge sollte "ls / dev / cu. *" Sein und das entsprechende Gerät aus den Geräten auswählen, die als "usbserial -..." angezeigt werden. Der auskommentierte Teil behält die Standardeinstellungen bei. Kommentieren Sie diese aus und stellen Sie gegebenenfalls die entsprechenden Parameter ein.
Sie können überprüfen, ob im seriellen Puffer Daten empfangen wurden (die Anzahl der im Puffer enthaltenen Bytes), indem Sie auf "ser.in_waiting" verweisen.
Die empfangenen Daten werden als Zeichenfolge behandelt, auch wenn es sich um Binärdaten handelt. Wenn die empfangenen Daten binär sind, müssen Sie sie mit struct_unpack_from ()
wie im obigen Code in eine Zahl konvertieren. Für utf8-Zeichenfolgen müssen Sie dekodieren. Wenn es sich um eine sogenannte 7-Bit-Zeichenfolge handelt, kann sie unverändert behandelt werden, ohne sie zu dekodieren oder zu entpacken.
Senden Sie eine beliebige Byte-Zeichenfolge (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 )
Wenn Sie nicht selbst spülen, wird es anscheinend erst gesendet, wenn einige Übertragungsdaten gepuffert sind. Wenn Sie "ser.out_waiting" nicht aktivieren, scheint es, dass es manchmal nicht normal gesendet werden kann.
Wenn Sie eine (alphabetische) Zeichenfolge anstelle einer Binärzeichenfolge senden möchten, können Sie dies unten tun.
serial_str_write.py
x = b'abcdef'
ser.write( x )
Wenn Sie eine utf8-Zeichenfolge senden möchten, müssen Sie sie codieren.
Ich dachte, es wäre einfacher als in C-Sprache oder schnell zu schreiben, aber ich hatte eine Menge Dinge außerhalb des Kommunikationsteils zu tun, so dass ich Schwierigkeiten hatte, etwas über das Auspacken und Codieren herauszufinden.
Recommended Posts