In diesem Kapitel verwende ich einen Arduino UNO als Endgerät zur Kommunikation per USB-Schnittstelle. Auf diesem sollte der folgende Sketch laufen:
1
2
3
4
5
6
7
8
9
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available()) { // If anything comes in Serial (USB),
Serial.write(Serial.read()); // read it and send it out via serial
}
}
Der Arduino liest mit diesem Sketch Daten, die vom PC gesendet werden und gibt diese unverändert wieder an den PC zurück. Wir brauchen als nächstest also ein Python-Skript, das Daten an den Arduino sendet und dann wartet, bis diese vom Arduino zurückgesendet werden.
Python zum Datenaustausch per USB
Um in Python die USB-Schnittstelle nutzen zu können, muss das entsprechende Modul installiert sein:
sudo apt-get install python3-serial
Nun kann das folgende Skript gestartet werden:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/python3
import sys # Needed for handling command line parameters
import serial # Needed for USB communication
import time
# Open USB port to Arduino running echo script
usbComm = serial.Serial(
# port = '/dev/ttyUSB0', #Replace ttyS0 with ttyACM0 for Pi1,Pi2,Pi0
port = '/dev/ttyACM0', #Replace ttyACM0 with ttyUSB0 for Pi3 and Pi4
baudrate = 115200,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout = 1
)
time.sleep(1.002)# Give port some time to really open...
# Now write the text received from the command line
for arg in sys.argv: # Loop through all command line parameters
command_line = arg + '\r\n' # Add return and new line to argument
print(arg)
usbComm.write(command_line.encode('utf-8'))# Write line to USB
Das Python Skript sendet sämtliche, von der Kommandozeile übergebenen Parameter an den Arduino. Nach dem Senden eines Parameters wird dabei auf die Antwort vom Arduino gewartet und das empfangene Byte ausgegeben. Sollte es sich bei einem empfangenen Byte um einen Buchstaben handeln, so werden Kleinbuchstaben in Großbuchstaben gewandelt. Das empfangene Wort wird vom Skript ausgegeben, sobald kein weiteres Byte im Empfangspuffer vorgefunden wird.