Metainformationen zur Seite

RaspberryPi mit Arduino koppeln

Um den Arduino mit dem Raspberry Pi zu verbinden muss man lediglich die TX-Leitung des Pis mit der RX-Leitung des Arduinos und jeweils die Masseleitung miteinander verbinden.

Arduino

Auf der Arduino-Seite reicht folgendes kleines Programm aus, um Daten zu empfangen, die an der seriellen Schnittstelle ankommen (dabei darf die Datenleitung während des Programmierens nicht mit dem Pi verbunden sein!):

int i = 0;                          // for incoming serial data
void setup() {
    Serial.begin(9600);             // opens serial port, sets data rate to 9600 bps
}
 
void loop() {   
    if (Serial.available() > 0) {   // send data only when you receive data:
        i = Serial.read();          // read the incoming byte:
        Serial.println(i, DEC);     // say what you got:
    }
}

Raspberry Pi

Zuerst muss man die serielle Schnittstelle für die eigene Nutzung freischaufeln (zuvor diente die Schnittstelle, um dort Terminals zu betreiben.)

sudo nano /etc/inittab
1:2345:respawn:/sbin/getty 115200 tty1
# Line below commented out
# 2:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
3:23:respawn:/sbin/getty 115200 tty3
4:23:respawn:/sbin/getty 115200 tty4
5:23:respawn:/sbin/getty 115200 tty5
6:23:respawn:/sbin/getty 115200 tty6
 sudo nano /boot/cmdline.txt

folgende Zeilen auskommentieren:

...
console=ttyAMA0,115200
...
kgdboc=ttyAMA0,115200
...

Für das Programm braucht man noch Python-Bibliotheken, die man schnell installiert:

apt-get install python-pip
pip install pyserial

Anschließend den Raspberry Pi neu starten:

sudo reboot

Das nachfolgende Programm übergibt abwechselnd 0 und 255 an den Arduino:

import serial
import time
 
delay = 0.5
comunicacion = serial.Serial('/dev/ttyAMA0',9600)
comunicacion.close()
comunicacion.open()
 
while True:
    comunicacion.write(chr(0))
    time.sleep(delay)
    comunicacion.write(chr(255))
    time.sleep(delay)