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
Vllt fängst du mal an und sagst wo es klemmt? Ansonsten ist hier der übliche Stundenlohn 100€ wenn du dir selber schon keine Gedanken machen willst.
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.
Kann man nicht mit Python direkt die serielle Schnittstelle ansprechen? Damit wuerde man sich die Umstaendlichkeiten von C sparen.
>> Damit wuerde man sich die Umstaendlichkeiten von C sparen.
Geschmackssache. Ich finde C wesentlich angenehmer und kann mit Python
nichts anfangen.
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.
1 | import serial |
2 | serialport = serial.Serial('/dev/ttyUSB0', baudrate=9600) |
3 | while True: |
4 | print serialport.readline() |
Noch angenehmer geht es doch kaum. Liebe Grüße, Karl
Ich habe etwas gefunden, was meinen anforderungen gerecht wird.
1 | <?php |
2 | include "php_serial.class.php"; |
3 | |
4 | $serial = new phpSerial(); |
5 | $serial -> deviceSet("/dev/ttyUSB0"); // usb port ansteuern |
6 | $serial -> confBaudRate(9600); // baudrate definieren |
7 | $serial -> confParity("none"); |
8 | $serial -> confCharacterLength(8); |
9 | $serial -> confStopBits(1); |
10 | $serial -> confFlowControl("none"); |
11 | $serial -> deviceOpen(); |
12 | |
13 | sleep(3); // da der PI jedes mal neugestartet wird. |
14 | |
15 | $serial -> sendMessage('LEDon;'); |
16 | $read = $serial -> readPort(); // rückgabe abfragen |
17 | |
18 | echo $read; // rückgabe ausgeben |
19 | |
20 | $serial -> deviceClose(); |
aber Ich bekomme immer noch keinen Output....
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
Dominik Wagner schrieb: > Kennt ihr eine gute Seite, vielleicht hier, hat mir sehr geholfen auch in C zu proggen http://kampis-elektroecke.de/?page_id=1682
chris_ schrieb: > Raspberry Pi, Python, serial port: aber erst mal muss die Schnitte freigeschaufelt werden zur Benutzung, beim PI 1 war die vorbelegt. http://kampis-elektroecke.de/?page_id=1682
:
Bearbeitet durch User
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 :-)
:
Bearbeitet durch User
Dominik Wagner schrieb: > Wie Kann ich die parameter auslesen? vorlesen lassen? oder verstehe ich gerade nicht deine Frage?
Erstmal einfach in der Shell ausprobieren stty -g -F /dev/tty... Serial Monitor stoppen stty -F /dev/tty... copy:paste:der:zeile:mit:den:doppelpunkten
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
1 | if(file_exists("/dev/ttyUSB0")) |
Schnittstelle konfigurieren
1 | shell_exec("sudo stty 19200 -F /dev/ttyUSB0"); |
Befehl senden
1 | shell_exec("echo '".$command."' >> /dev/ttyUSB0"); |
Befehlszeile empfangen
1 | $line = shell_exec("head -1 /dev/ttyUSB0"); |
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]
1 | | __init__(self, port=None, baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, writeTimeout=None, dsrdtr=False, interCharTimeout=None) |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.