Hallo liebe Community,
ich habe folgendes Problem....
Ich habe ein Raspberry Pi und einen Arduino über USB miteinander
verbunden.
Nun möchte ich Daten an meinen Arduino übermitteln.
z.B. Rasp. -> "LED-on" -> Ardu.
Den Sketch für den Arduino habe ich bereits...
da ich aber mit Linux programmieren noch nicht sehr erfahren bin, und
ich im Internet nichts wirklich passendes gefunden habe hoffe ich, dass
ihr mir helfen könnt.
MFG
Dome
Ich habe so etwas am laufen. Raspi und ein angeschlossener Arduino.
Man könnte das über ein 'virtuelle' TTY machen, also /dev/ttyUSB0.
Ich habe das über die Libusb gelöst, spreche also direkt das USB-Gerät
über Vensor/Produkt-ID an. Das ist allerdings nichts für Anfänger. Man
sollte schon C können und mit Bibliotheken umgehen können. Außerdem ein
Verständnis für die Funktion des USB-Busses besitzen.
ttyUSB ist wohl für Anfänger einfacher. Aber auch da sollte man
programmieren können. Versuch doch mal, ein String darüber raus zu
schicken. Der Arduino sollte das empfangen können.
Hallo PittyJ,
PittyJ schrieb:>>> Damit wuerde man sich die Umstaendlichkeiten von C sparen.> Geschmackssache. Ich finde C wesentlich angenehmer und kann mit Python> nichts anfangen.
Das kann ich nun wirklich nicht nachvollziehen.
Das Mit dem PHP Script hat leider nicht funktioniert...
Kennt ihr eine gute Seite, wo ich mich über die Serieleverbindung mit
Python mal einlesen kann?
Gruß Dome
Wenn ein /dev/ttyUSB0 erscheint -- zweiter Schritt wäre: einfach mit
einem Terminalemulator wie cutecom verbinden und schauen, ob überhaupt
was passiert.
Ich habe das mit USART probiert, er funktioniert bei mir aber blos, wenn
nebenher der Serial Monitor der Arduino IDE läuft...
Wieso? wie kann ich das ändern?
Uff. Wahrscheinlich setzt der Serial Monitor die passenden
stty-Parameter.
Gibt ein Programm namens stty. Während der Serial Monitor läuft die
Parameter lesen. Gibt eine lange Zeile mit Doppelpunkten, wenn ich mich
richtig erinnere. Später diese Zeile mit stty wieder setzen.
Dominik Wagner schrieb:> Ich habe das mit USART probiert, er funktioniert bei mir aber blos, wenn> nebenher der Serial Monitor der Arduino IDE läuft...> Wieso? wie kann ich das ändern?
anderen Arduino wählen mit 2ter Seriell Schnitte (oder Ports und Soft
seriell) und diese dafür benutzen :-)
Dominik Wagner schrieb:> Ich habe das mit USART probiert, er funktioniert bei mir aber blos, wenn> nebenher der Serial Monitor der Arduino IDE läuft...> Wieso? wie kann ich das ändern?
Meinst du USART vom RPi2, also den Pin-Header? Kann sein dass dein Linux
die Kernel-Meldungen auf den USART raushaut (so z.B. bei Arch Linux).
stty, Parameter, Kernel Meldungen darüber ...
Ich weiss schon, warum ich direkt über libusb gehe. Damit gibt es keine
Probleme dieser Art. Das Programm läuft auf Intel, ARM und sogar einem
Power-Mac (mit Linux). Recompile reicht. Ist letztendlich einfacher als
das Prokeln mit der seriellen Schnittstelle.
Probiert es einfach mal.
Ich habe so etwas in der Art auch mal in PHP gemacht. Habe dann auch
diese class gefunden und keinen Erfolg gehabt. Grundsätzlich kann man
aber in jeder Sprache auch Terminalanweisungen benutzen. Ob das dann der
beste stil ist sei dahingestellt, aber so lässt es sich einfach manuell
testen und in eine Sprache implementieren.
Wenn dir PHP liegt dann hier ein paar codeschnipsel:
Prüfen ob Gerät vorhanden
Hallo Dominik,
Dominik Wagner schrieb:> Das Mit dem PHP Script hat leider nicht funktioniert...>> Kennt ihr eine gute Seite, wo ich mich über die Serieleverbindung mit> Python mal einlesen kann?
Bei den Autoren des Python-Moduls PySerial, das ich in dem Beispiel oben
benutzt habe:
http://pyserial.sourceforge.net/
Wenn Du Python und PySerial installiert hast, findest Du natürlich auch
eine hervorragende Referenz in der mitgelieferten Dokumentation, die mit
"pydoc serial" aufgerufen werden kann. Aber im Grunde genommen brauchst
Du nicht viel mehr als das, was in meinem Beispiel oben steht: mit
"import serial" importierst Du das PySerial-Modul, mit dem Befehl
"serialport = serial.Serial('/dev/ttyUSB0', baudrate=9600)" öffnest Du
die genannte serielle Schnittstelle mit der angegebenen Baudrate, indem
Du ein Objekt namens "serialport" vom Typ "Serial" aus dem Modul
"serial" instanziierst. Der Konstruktor kann noch andere Parameter
annehmen: [1]; das ist (wie ja meistens in Python) simpel, geradeaus und
frei von Überraschungen. Was die Funktionen "serialport.read()" und
"serialport.write()" machen, dürfte ja wohl relativ offensichtlich
sein... ;-)
Wer mag, kann natürlich auch in Python die libusb verwenden; auch das
ist keine Geheimwissenschaft: "usb.busses()" gibt die gefundenen
USB-Busse zurück, "bus.devices" die an einem Bus hängenden Geräte,
"device.open()" gibt dann ein DeviceHandle zurück, über dessen
Funktionen dann mit dem Gerät interagiert werden kann. USB selbst ist
etwas komplizierter als so eine Serielle Schnittstelle, aber wer sich
damit bereits auskennt, wird mit der Python-Implementierung sicherlich
keine Probleme haben. Weitere Informationen dazu gibt es hier:
http://walac.github.io/pyusb/
Liebe Grüße,
Karl
[1]