zurück

Serielle Schnittstelle des Arduino

19.01.2018

Der Arduino ist in der Lage, über seine eingebaute serielle Schnittstelle Daten zu empfangen und zu senden. In diesem Experiment wird die interne LED des Arduino (auf PIN 13) mittels Befehlen gesteuert, die vom PC über die serielle Schnittstelle empfangen werden.
Für den Aufbau benötigt man nur den Arduino und eine Verbindung zum PC. Die Kommunikation zwischen PC und dem Arduino kann über den "Seriellen Monitor" der Arduino-IDE über auch über ein beliebiges Terminal-Programm, wie z.B. PuTTY erfolgen.

Sketch-Code von Github laden
Konfiguration von PuTTY
Abb.: Konfiguration von PuTTY
Terminal-Ausgabe in PuTTY
Abb.: Terminal-Ausgabe in PuTTY

Grafische Ausgabe von seriellen Daten

Es ist auch möglich mit spezieller Software über Zeit Daten als Graph darzustellen, die von der seriellen Schnittstelle empfangen werden.
Versuchsaufbau zum Empfangen der Daten sind drei verschiedenfarbige LEDs, welche Messdaten der Helligkeit an den Arduino weitergeben sollen.
Die graphische Auswertung erfolgt hier mit dem Programm Serial Port Plotter, welches die Daten ähnlich wie PuTTY im obigen Versuch über den COM-Port empfängt und grafisch aufbereitet.

Schaltplan
Abb.: Schaltplan
Aufbau der Schaltung
Abb.: Aufbau der Schaltung
Ausgabe des Serial Port Plotter
Abb.: Ausgabe des "Serial Port Plotter" mit den drei Messwerten der LEDs
Sketch-Code von Github laden

Mit dem folgenden selbstgeschriebenen simplen Programm "SerialGraph" (Windows/.NET) kann ein Wert (getrennt mit Linefeeds) graphisch über die serielle Schnittstelle beobachtet werden.

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    Serial.println(random(1000));
    delay(250);
}
Code: Beispielcode zur Demonstration von SerialGraph
Beispiel-Ausgabe von SerialGraph
Abb.: Beispiel-Ausgabe von SerialGraph
SerialGraph laden [6 kB]
Source von SerialGraph laden (.NET/C#) [305 kB]

"Serial event"

Arduino (und Genuino) triggern in loop() die Funktion serialEvent(), auf die wir im Code reagieren können. Jedesmal, wenn über RX Daten empfangen werden, wird dieses event ausgelöst.
Der Aufbau benötigt lediglich einen Arduino Uno und eine USB-Verbindung zum PC. Der Code ist vom Standard-Beispiel der Arduino-IDE leicht modifiziert übernommen worden.

Sketch-Code von Github laden

Binäre Daten vom Arduino senden

Es können auch binäre Daten vom Arduino an den PC oder umgekehrt übertragen werden.
(Siehe dazu den entsprechenden Sketch im GIT Repository)

Sketch-Code von Github laden

Daten auf dem PC mit Python empfangen

Zunächst muss Python für Windows installiert werden. Dannach die Python-Module für den seriellen Port. Dafür öffent man die Windows PowerShell oder eine Eingabeaufforderung cmd:
pip3 install pyserial
pip3 install serial

(Da ich die Python v3.7.3 verwende, wird pip3 statt pip benutzt!)
Das folgende Python-Programm speichert man am besten in eine Datei "list-serial.py" und es gibt dann alle verfügbaren seriellen Port aus, wenn man es auf der Konsole mit python list-serial.py startet:

import serial.tools.list_ports as port_list
ports = list(port_list.comports())
for p in ports:
    print (p)

Baurate und Port-Nummer müssen im folgenden Code natürlich noch angepasst werden:

import serial
ser = serial.Serial("COM1", 9600, timeout=5)
ser.flushInput()
ser.flushOutput()
while True:
    data_raw = ser.readline()
    print(data_raw)