Arduinos erscheinen normalerweise als serielle USB-Geräte. Die aktuellen Karten verwenden den im Hauptmikroprozessor integrierten seriellen USB-Treiber, ältere Arduinos (und Klone) verwendeten jedoch separate serielle USB-Chips von Drittanbietern.
Um einfach Serial.print
Daten auf dem Raspberry Pi vom Arduino zu empfangen , verwende ich das GNU Screen- Programm als Basis-Terminal: screen [serial-port] [baud-rate]
(zum Beispiel screen /dev/ttyACM0 9600
).
Ich habe drei verschiedene Arduinos und einen ziemlich unterschiedlichen Klon getestet. Die neueren Varianten erschienen alle als /dev/ttyACM0
Ports und die älteren /dev/ttyUSB0
. Das habe ich unter Raspbian gefunden:
Der Raspberry Pi liefert möglicherweise nicht genügend Strom, um ein Arduino anzutreiben, sodass Sie möglicherweise externe Stromversorgung benötigen. Der Vollständigkeit halber habe ich auch einen Prolific PL2303 getestet , obwohl er auf keinem mir bekannten Arduino zu finden ist. Es wirkte ganz fröhlich wie /dev/ttyUSB0
.
Für eine komplexere Kommunikation mit Sensoren können Sie Firmata in Betracht ziehen , ein "generisches Protokoll für die Kommunikation mit Mikrocontrollern über Software auf einem Host-Computer". Es enthält Implementierungen für Arduino- und Python-Bibliotheken, die auf der Raspberry Pi-Seite ausgeführt werden können.
Hier ein kleines Beispiel mit pyFirmata zum Lesen eines LM35 und zum Ändern der Helligkeit einer LED:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# simple test of pyfirmata and Arduino; read from an LM35 on A0,
# brighten an LED on D3 using PWM
# scruss, 2012-08-14 - tested on Arduino Uno & Raspberry Pi (Raspbian)
import pyfirmata
# Create a new board, specifying serial port
board = pyfirmata.Arduino('/dev/ttyACM0')
# start an iterator thread so that serial buffer doesn't overflow
it = pyfirmata.util.Iterator(board)
it.start()
# set up pins
pin0=board.get_pin('a:0:i') # A0 Input (LM35)
pin3=board.get_pin('d:3:p') # D3 PWM Output (LED)
# IMPORTANT! discard first reads until A0 gets something valid
while pin0.read() is None:
pass
for i in range(10):
pin3.write(i/10.0) # set D3 to 0, 10%, 20%, ... brightness
print "PWM: %d %% Temperature %.1f °C" % (i * 10, pin0.read() * 5 * 100)
board.pass_time(1) # pause 1 second
pin3.write(0) # turn LED back off
board.exit()
Es gibt einige Einschränkungen bei der Verwendung von pyFirmata:
- Analoge Lesevorgänge und PWM-Schreibvorgänge werden auf einen Bereich von 0 bis 1 normalisiert und nicht auf die Standard-Arduino-Werte 0 bis 255 und 0 bis 1023.
- Sie müssen wirklich einen separaten Iterator-Thread starten, um zu verhindern, dass alte Messwerte über den seriellen Puffer laufen
- Da der Arduino asynchron gelesen wird, stellen Sie sicher, dass die pyFirmata-Verbindung vollständig initialisiert ist, bevor Sie von den Ports lesen. Ansonsten
None
ergeben sich Werte.
Falls es nicht klar ist, können Sie mit Raspbian Wheezy die Arduino IDE ausführen und Skizzen auf das Arduino hochladen, wenn Sie mit dem USB-Port des Raspberry Pi verbunden sind. Um auf Raspbian zu installieren, geben Sie einfach Folgendes in die Shell ein (auch als Befehlszeile bezeichnet):
Es werden alle benötigten Pakete heruntergeladen und installiert. Ich habe ein paar Fotos von der Arduino IDE in Raspbian hier:
http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/03/review-of-raspberry-pi-images
(Wie andere Leute oben beschrieben haben, könnte der Raspberry Pi das Arduino auch über die UART-Pins (Serial Port) des GPIO-Headers programmieren. In diesem Fall müssten Sie keinen USB-Port "verschwenden", aber es wäre eine zusätzliche Konfiguration erforderlich ).
Prost, Drew
quelle
Man kann sich dafür entscheiden, den RPI über einen USB-Port oder über die GPIO-Pins mit dem Arduino zu verbinden. Man kann Wiringpi verwenden , um die Kommunikation zwischen den Platinen durchzuführen .
Derzeit wird auch eine Brücke namens Ponte gebaut .
Eine grundlegende Hallo Welt finden Sie hier .
quelle
Der à la mode
Angekündigt als der richtige Weg , ein Arduino in einem Raspberry Pi setzen von Hack Ein Tag, der à la mode ist ein stapelbarer Arduino Klon entworfen von Anool Mahidharia, Justin Shaw und Kevin Osborn vom Wyolum.com OSHW kooperativ. Hack A Day beschrieb es wie folgt
Kevin gibt ein wenig mehr Details in seinem Blog :
Limited Beta
Das Board befindet sich derzeit in einer eingeschränkten Beta-Phase, verdient jedoch Erwähnung als gut durchdachter Klon, der von einer Gruppe mit vorheriger Form angekündigt wurde .
Verweise
quelle
Sie könnten das Gert Board in Betracht ziehen, das jetzt auf Arduino basiert, wenn Sie eine universelle Hardware-Schnittstellenplattform wünschen. Ein Vorteil ist, dass es eine umfangreiche Dokumentation zur Interaktion mit dem RPi gibt. Ab dem 08.08.12 bei Element14 vorbestellbar.
quelle
Es gibt einen RaspberryPi HAT, der sich wie Arduino verhält und über die Web-Benutzeroberfläche von jedem Browser aus programmiert werden kann. Projekt namens CoPiino . Es wird komplett mit lauffähiger Software geliefert. Geben Sie einfach die Arduino-Skizze in die Browser-Benutzeroberfläche ein und klicken Sie auf "Kompilieren und ausführen" - das wars.
quelle