k-ist-k
Goto Top

Arduino - Rasbperry - Serial Verbindung USB - C Sharp Code

Hallo,

bräuchte wieder mal Private Hilfe zum Thema Programmierung.
Die leider nicht meine Stärke ist.

Ich habe folgendes Konstrukt:
An meinem Raspberry 2 (Raspian) hängt per USB ein Arduino
der wiederum an einen Gerät hängt das Daten an den Arduino überträgt.

Am Raspian wird eine .exe ausgeführt die an einem Windows Rechner mit C# programmiert worden ist.
In diesen C# Code wird eine Serielle Schnittstelle benutzt die am COM Port nach Daten sucht.
Unter Windows läuft logischerweiße alles toll.

Am Raspberry nicht, da es dort meines Wissens nach ja keinen COM Port gibt.
Die .exe wird am Raspberry mit dem Programm "mono" ausgeführt.


Am liebsten wäre mir wenn es eine möglichkeit gäbe den Raspberry eine COM Schnittstelle vorzugaukeln.
Gute Programmierer könnten vermutlich den C# Code ändern, damit es unter Linux auch läuft, das bin ich aber nicht.

Bitte vermeidet solche Antworten:
Programmier es neu mit ......
Was genau macht der Arduino ....
Was wird ausgelesen

Da dieses Projekt noch relativ Geheim ist, würde ich auf diese Fragen ungern eingehen.


Lg

Content-Key: 300424

Url: https://administrator.de/contentid/300424

Printed on: April 19, 2024 at 17:04 o'clock

Member: BirdyB
BirdyB Mar 30, 2016 at 20:20:59 (UTC)
Goto Top
Zitat von @K-ist-K:
Am Raspian wird eine .exe ausgeführt die an einem Windows Rechner mit C# programmiert worden ist.
In diesen C# Code wird eine Serielle Schnittstelle benutzt die am COM Port nach Daten sucht.
Unter Windows läuft logischerweiße alles toll.
Korrekt wäre "logischerweise". Es hat nichts mit Farben zu tun, sondern mit "Art und Weise".
Am Raspberry nicht, da es dort meines Wissens nach ja keinen COM Port gibt.
Die .exe wird am Raspberry mit dem Programm "mono" ausgeführt.


Am liebsten wäre mir wenn es eine möglichkeit gäbe den Raspberry eine COM Schnittstelle vorzugaukeln.
Brauchst du nicht, der Raspberry hat eine RS232-Schnittstelle, die an den GPIO-Pins direkt herausgeführt wird. Du musst deinem Programm nur mitteilen, dass es die entsprechende Schnittstelle nutzen soll, falls das geht.
Gute Programmierer könnten vermutlich den C# Code ändern, damit es unter Linux auch läuft, das bin ich aber nicht.

Bitte vermeidet solche Antworten:
Programmier es neu mit ......
Wie soll ich dir bitte helfen, wenn du an deinem Code nix ändern willst? Zaubern kann ich nicht.
Was genau macht der Arduino ....
Was wird ausgelesen
Solange es serielle Daten sind, ist das ziemlich egal.
Da dieses Projekt noch relativ Geheim ist, würde ich auf diese Fragen ungern eingehen.
Dann brauchst du jemanden, der dich bei dem Projekt unterstützt...

Beste Grüße


Berthold
Member: K-ist-K
K-ist-K Mar 30, 2016 at 20:29:21 (UTC)
Goto Top
Danke für deine schnelle Antwort.

umprogrammieren ist ja OK.
Meinte eigentlich Sätze wie. Dann Programmier es neu in Java ....

Ich habe im C# Code, eine Serielle Schnittstelle mit Drag&Drop ins Formular gezogen,
dann eingestellt, welche Bitrate und welchen Port ....

Also dein Tipp ist, irgendwie mit den GPIO Pins zu arbeiten ?
Momentan geht ein USB B Kabel vom Arduino zum Raspberry auf die normale USB A Port.

Lg
Member: BirdyB
BirdyB Mar 30, 2016 at 20:50:38 (UTC)
Goto Top
Zitat von @K-ist-K:

Danke für deine schnelle Antwort.
Immer gerne...
umprogrammieren ist ja OK.
Meinte eigentlich Sätze wie. Dann Programmier es neu in Java ....
Das war mir nicht klar.
Ich habe im C# Code, eine Serielle Schnittstelle mit Drag&Drop ins Formular gezogen,
dann eingestellt, welche Bitrate und welchen Port ....
Hm, also eher so Klickibunti-Programmierung?
Also dein Tipp ist, irgendwie mit den GPIO Pins zu arbeiten ?
Momentan geht ein USB B Kabel vom Arduino zum Raspberry auf die normale USB A Port.
Das war mir so auch nicht klar. Ich dachte, die serielle Kommunikation läuft unabhängig von der USB-Verbindung. So würde ich das ganze dann vermutlich umsetzen. Eine direkte Verbindung zwischen den seriellen Pins des Arduino und der GPIO-Leiste des Raspberry (CAVE: Ich bin mir wegen der Spannung gerade aus dem Kopf nicht sicher.)
Die USB-Ports hättest du dann zu Debugging-Zwecken und für das Firmwareupdate frei.
Ansonsten kannst du natürlich die serielle Kommunikation auch über das USB-Kabel abfrühstücken.
Vermutlich ist am Pi dann /dev/ttyACM0 das serielle Terminal zum Arduino... siehe auch hier: http://www.raspberry-pi-geek.de/Magazin/2013/05/Raspberry-Pi-und-Arduin ...
Lg
Beste Grüße!


Berthold
Member: tikayevent
tikayevent Mar 30, 2016 at 20:52:49 (UTC)
Goto Top
Wie meldet sich denn der Arduino auf dem Raspi? Ist das eine virtuelle serielle Schnittstelle, als HID-Device oder als irgendwas anderes?

Ich nutze mehrere Raspis für die Logistik in unserer Firma, da hängen per RS232 mehrere Barcodescanner dran und das ganze in C#. Funktioniert problemlos, auch bei 1500 Paketen am Tag mit nur zwei Raspis. Also ob C# oder was anderes ist egal. Gibt bei Mono nur eine Einschränkung. Für die serielle Schnittstelle werden keine Eventdelegates unterstützt, hier müsste das auslesen dann per Schleife erfolgen.
Member: K-ist-K
K-ist-K Mar 30, 2016 at 21:08:50 (UTC)
Goto Top
Der Arduino gibt immer eine drei stellige Zahl aus, wenn sich am Gerät das am Arduino angesteckt ist,
einen Wert von der Matrix erkennt.

Klickbunti Programmierung, Ja zum Teil.

Mein C# Code besteht aus Private Voids / Public Voids und aus einer Public Class

Hier ein kleiner Teil des Codes:
        private void timer1_Tick(object sender, EventArgs e)  // Starte das Hauptprogramm
        {
            A = serialPort1.ReadExisting();
            
            if (A != "")  
            {
                A = A.Substring(A.Length - count, count);


Wie man die Bitrate unter Linux umstellt, weiß ich schon.
Wenn ich den Standard Serial Namen von Linux wissen würde,
würde es was bringen diesen Namen im C# Code zu hinterlegen ?

Lg
Member: tikayevent
tikayevent Mar 30, 2016 at 21:20:25 (UTC)
Goto Top
Es gibt keinen "Standard Serial Namen" unter Linux, es kommt darauf an, wie sich das Gerät ins System hängt. es kann /dev/tty0 bis irgendwas sein oder /dev/ttyUSB0 bis irgendwas oder /dev/usbAMA0 bis irgendwas oder /dev/hidraw0 ...

Wichtig wäre erstmal zu wissen, wie die Schnittstelle des Arduino unter Debian heißt.

Und mach dich mal unter C# mit der Properties-Datei vertraut, dann brauchst du nicht jedes mal, wenn sich die serielle Schnittstelle ändert, den Quelltext ändern.

Mein C# Code besteht aus Private Voids / Public Voids und aus einer Public Class
Das ist so ne Aussage wie "Mein Code besteht aus Quelltext" also absolut sinnlos und unnötig. private void heißt einfach nur, dass nur die Klasse, in der diese Methode definiert ist, auf diese Methode zugreifen darf und dass es keinen Rückgabewert gibt. public void hat auch keinen Rückgabewert, dafür darf die Methode von jeder anderen Klasse direkt angesprochen werden. Alles allgemeines Grundwissen (passt unter C# genauso wie unter Java).

Warum man unbedingt einen Arduino an einen Raspi hängt ist unverständlich. Beide Geräte haben SPI, GPIO, ..., aber was ein Arduino wirklich kann weiß ich nicht, wenn ich sowas brauche, nehm ich einen netduino, der frisst C# pur.
Member: aqui
aqui Mar 31, 2016 updated at 06:00:05 (UTC)
Goto Top
Am Raspberry nicht, da es dort meines Wissens nach ja keinen COM Port gibt.
Wie oben bereits schon gesagt ist das schlicht falsch....
Zusammengefasst kann man ja sagen es geht hier einzig und allein darum eine serielle Schnittstelle auf dem Raspi zu generieren.
Eigentlich ein Kinderspiel.
Hier steht alles was du über die serielle RasPi onboard Schnittstelle, quasi den COM Port, wissen musst:
http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_Serial.html
http://www.instructables.com/id/Read-and-write-from-serial-port-with-Ra ...
und viele andere Websites....

Noch einfacher ist es wenn du dir einen preiswerten USB zu Seriell Adapter beschaffst:
http://www.amazon.de/RS232-Seriell-Adapter-Kabel-Serial/dp/B00HV5GSDU/r ...
Den steckst du einfach in den RasPi auf einen seiner USB Ports und et voila....
Schon hast du die serielle Schnittstelle auf /dev/ttyUSB0 ohne Basteln und kannst dort bequem die Daten abnehmen.
Such dir das für dich sinnvollste raus.
Zum Rest ist ja oben schon alles gesagt.
Member: K-ist-K
K-ist-K Mar 31, 2016 at 08:11:26 (UTC)
Goto Top
Es tut mir leid, das ich so mühevoll bin, aber wenn das meine Stärken wären, hätte ich euch ja nicht gebraucht : )

Warum ich (denke ich) einen Arduino brauche ist:
Auf den Arduino Mega 2530 hängt eine Matrix die 20 PIN braucht und dann nochmal ein paar PINs für 10 Taster,
1 USB Port für einen Barcode Scanner. Einen Bewegungssensor. Einen Vibrationssensor und möglicherweise einen Ultraschall Sensor.

Der C# benötigt eine genaue Beschreibung, welche Serielle Schnittstelle er nutzen soll.
Also was schreibt man dann beim COM Port Namen hinein ?

Was erspart mir der USB zu Seriell Adapter ? Muss ja trotzdem beim C# Code das alles angeben oder ?
Member: BirdyB
BirdyB Mar 31, 2016 at 08:19:14 (UTC)
Goto Top
Du hast doch schon die USB-Verbindung zwischen Raspberry und Arduino. Darüber können doch die seriellen Daten übertragen werden.
Nimm minicom und teste die Ports durch... Schau wo die Daten ankommen. Am besten startest du mal bei /dev/ttyACM0
Schau einfach mal in den Artikel aus meinem letzten Beitrag... Da steht alles drin...