Forum: Mikrocontroller und Digitale Elektronik Arduino-Kummunication


von samuel522 (Gast)


Lesenswert?

Hallo Zusammen,


ich wollte euere Meinungen einholen. es geht um folgendes:

ich steuere einen Arduino über Python mit Hilfe von serieller 
Schnittstelle, aber das Problem liegt daran, dass man den Arduino dann 
nicht über Seriell Monitor im Arduino IDE  nicht stewueren kann,
da die serielle Kommunikation schon vom Python beleget. meine Frage, 
weißt jemand wie man damit umgehen kann?, könnt Serial CAN-BUS Modul 
alternative sein ?

vielen Dank im Voraus

von Cyblord -. (cyblord)


Lesenswert?

Werde Gärtner.

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Neben der Berufswahl "Gärtner" könnte auch noch die Verwendung von 
einzelnen Portpins als emulierte serielle Schnittstelle helfen...

Beispiele dazu sind im Netz Massenhaft zu finden!

von samuel522 (Gast)


Lesenswert?

danke euch.

von Berufs Berater (Gast)


Lesenswert?

samuel522 schrieb:
> danke euch.

Wirst jetzt doch Gärtner?

von samuel522 (Gast)


Lesenswert?

das Problem ist, dass ich dafür eine Software brauche, aber ich darf nur 
Python auf dem Rechner installieren.

von Stephan G. (Firma: privat) (morob)


Lesenswert?

nimmst du firmdata auf dem arduino?

von Guest (Gast)


Lesenswert?

samuel522 schrieb:
> das Problem ist, dass ich dafür eine Software brauche, aber ich darf nur
> Python auf dem Rechner installieren.

Eben doch Gärtner...

von samuel522 (Gast)


Lesenswert?

Stephan G. schrieb:
> nimmst du firmdata auf dem arduino?
nein

von samuel522 (Gast)


Lesenswert?

nein, ich wäre gerne ein Busfahrer

von Dr. Sommer (Gast)


Lesenswert?

samuel522 schrieb:
> könnt Serial CAN-BUS Modul
> alternative sein ?

Und wie willst du das verbinden?!

Schreib doch dein Python Programm so, dass es Steuern und Messwerte 
aufnehmen kann. Dann brauchst den den Serial Monitor nicht mehr.

von huh (Gast)


Lesenswert?

samuel522 schrieb:
> nein, ich wäre gerne ein Busfahrer

CAN-Bus? :-)

von Guest (Gast)


Lesenswert?

Nimm einen Arduino Mega? Der hat 4 Hardware Serial Ports.

von min (Gast)


Lesenswert?

>>CAN-Bus? :-)
nein er will zwei RS232 Busse gleichzeitig fahren:-)

von Franz (Gast)


Lesenswert?

Samuel schrieb:
> ...nicht über Seriell Monitor im Arduino IDE  nicht stewueren kann,
>da die serielle Kommunikation schon vom Python beleget. meine Frage,
>weißt jemand wie man damit umgehen kann?, könnt Serial CAN-BUS Modul
>alternative sein ?
Vielleicht könnte Dir das
https://www.arduino.cc/en/Reference/SoftwareSerial
und ein zweiter FTDI-Adapter helfen.

>Cyblord schrieb
>Werde Gärtner.

Ach Cybi, den Erfolg der Arduinos entgegen deiner Prognosen wirst Du nie 
überwinden.
Für deine eigene Gesundheit: Gib auf!

von Stefan F. (Gast)


Lesenswert?

Verstehe ich dich richtig, dass du deinen Arduino seriell sowohl mit 
einem Python Programm als auch mit dem Monitor der Arduino IDE steuern 
möchtest?

Falls ja, schau mal ob dieser Ansatz für Dich geeignet ist:

Du fügst eine zweite Serielle Schnittstelle zu deinem Arduino Board 
hinzu:
1
           ____________                ______________
2
          |            |              |              |
3
          |          Tx|-----|<|------|Rx            |
4
USB o=====| USB-UART   |              |     Arduino  |======o USB
5
          | Adapter  Rx|--------------|Tx   Uno/Nano |
6
          |____________|              |______________|
Das funktioniert mit allen Arduino Boards, die selbst einen USB-UART 
Chip enthalten und zwischen diesem und dem AVR µC einen 
Schutzwiderstand. Ich weiß mit Sicherheit, dass es mit originalen 
Arduino Nano und Uno so funktioniert. Bei chinesischen Arduino Nano 
Clones musst du unter Umständen die Rx LED entfernen um gültige 
Signalpegel zu erhalten.

Wenn du das so machst, kannst du ABWECHSELND beide USB Anschlüsse 
benutzen, um Kommandos an deinen Mikrocontroller zu senden. Gleichzeitig 
geht aber nicht. Die Antworten des Mikrocontroller werden dupliziert an 
beide USB Kabel gesendet.

Nun kannst du das linke USB Kabel für dein Python Programm verwenden, 
und das rechte USB kabel für die Arduino IDE.

Entspricht das ungefähr deiner Erwartung?

von Dr. Sommer (Gast)


Lesenswert?

Software Probleme durch mehr Hardware lösen... Und da gibt's hier Leute 
die sich darüber beschweren, dass Software schneller langsamer wird, als 
Hardware schneller wird!

von Stefan F. (Gast)


Lesenswert?

Wenn du einen anderen Mikrocontroller (ATmega328PB ATmega2560) mit mehr 
echten seriellen Ports verwendest, oder die SoftwareSerial Klasse, 
kannst du beide Ports wirklich gleichzeitig benutzen. Aber dann musst du 
auch deinen Sketch entsprechend erweitern.

So oder so brauchst du zwei USB-UART Adapter, denn es ist ohne spezielle 
Software nicht möglich, dass zwei Programme sich einen seriellen Port 
teilen.

von Dr. Sommer (Gast)


Lesenswert?

Stefanus F. schrieb:
> So oder so brauchst du zwei USB-UART Adapter, denn es ist ohne spezielle
> Software nicht möglich, dass zwei Programme sich einen seriellen Port
> teilen.

Oder man schreibt die eine Software so, dass sie alles bietet, was die 
beiden Softwares können. Das was der Arduino Serial Monitor macht lässt 
sich doch wohl simpel in ein Python Programm übernehmen. Das kann man 
dann auch mit einer schöneren Oberfläche versehen.

von Stefan F. (Gast)


Lesenswert?

> Software Probleme durch mehr Hardware lösen... Und da gibt's hier Leute
> die sich darüber beschweren, dass Software schneller langsamer wird,
> als Hardware schneller wird!

Völlig unpassend. Mein Lösungsvorschlag kommt ganz ohne Softwareänderung 
aus. Also wird da nichts langsamer.

Wenn Du schon so schlau bist, dann schreibe dem Samuel bitte einen 
Windows Treiber, der die Nutzung eines virtuellen seriellen Portes 
mehreren Programmen gleichzeitig erlaubt. Aber so, dass es mit jedem 
beliebigen USB-UART funktioniert.

Kannst du nicht? Dann halt die ....

Die ganzen anderen unqualifizierten Lästereien der anderen Gäste nerven 
mich auch. Aber das ist typisch, sowas kommt fast immer von Gästen. Ich 
finde das feige.

> Das was der Arduino Serial Monitor macht lässt
> sich doch wohl simpel in ein Python Programm übernehmen

Mag sein, aber der Samuel hat klar verständlich gemacht, dass diese 
Option für ihn nicht in Frage kommt. Er wird dafür seine Gründe haben, 
akzeptiere sie.

von Dr. Sommer (Gast)


Lesenswert?

Stefanus F. schrieb:
> Völlig unpassend. Mein Lösungsvorschlag kommt ganz ohne Softwareänderung
> aus. Also wird da nichts langsamer.

Aber braucht mehr Hardware-Ressourcen. Ob mehr 
USB-Ports/Strom/Komponenten oder mehr Rechenleistung ist gleiches 
Prinzip.

Stefanus F. schrieb:
> Wenn Du schon so schlau bist, dann schreibe dem Samuel bitte einen
> Windows Treiber, der die Nutzung eines virtuellen seriellen Portes
> mehreren Programmen gleichzeitig erlaubt
Das wäre wieder nur ein unnötiger Workaround um das Fehldesign, 
unbedingt zwei Programme nutzen zu wollen.

Stefanus F. schrieb:
> Mag sein, aber der Samuel hat klar verständlich gemacht, dass diese
> Option für ihn nicht in Frage kommt.
Wo? Er müsste nur sein Python-Script anpassen.

von Guest (Gast)


Lesenswert?

Warum wird hier eigentlich immer alles tot diskutiert?

Er soll einfach einen Arduino Mega nehmen mit mehr Hardware Serial Ports 
und alle seine Probleme sind gelöst.

von Dr. Sommer (Gast)


Lesenswert?

Guest schrieb:
> Warum wird hier eigentlich immer alles tot diskutiert?

Es gibt halt Leute die haben gewisse Ansprüche an technische Lösungen, 
und würden gerne auch anderen dazu verhelfen einigermaßen ordentliche 
Dinge zu bauen. Ist man bei deutschen Industrieprodukten nicht gewohnt, 
ich weiß :)

USB-Serial-Adapter sind eh eine Krücke, und dann auch noch zwei 
COM-Ports am PC richtig konfigurieren, in der richtigen Zuordnung, 
Baudrate usw. ... Der Nutzer dankt.

von Guest (Gast)


Lesenswert?

Ich sehe da dennoch keine andere Lösung...

Python muss er haben. Das war die Vorgabe. Wenn er jetzt also noch 
Befehle per Seriellen Monitor senden möchte, na dann braucht er einen 
weiteren Port.

Er könnte natürlich auch einen SoftwareSerial Port nehmen.

von Dr. Sommer (Gast)


Lesenswert?

Guest schrieb:
> Python muss er haben. Das war die Vorgabe.

Das ist ja in Ordnung. Er könnte ja in seinem Python Programm 
zusätzlich über den dort bereits geöffneten Port Befehle senden. Was 
ist daran so kompliziert?! Kann Python keine Daten senden? Ist das 
Python Programm schreibgeschützt?

von Cyblord -. (cyblord)


Lesenswert?

Guest schrieb:
> Warum wird hier eigentlich immer alles tot diskutiert?
>
> Er soll einfach einen Arduino Mega nehmen mit mehr Hardware Serial Ports
> und alle seine Probleme sind gelöst.

Quatsch. Damit fangen seine Probleme erst an. Solche talentfreie Leute 
müssen direkt vor Ort gebrochen werden. Ihnen muss jeder Wille zur 
weiteren Beschäftigung mit der Materie von Grund auf ausgetrieben 
werden. Dann können sie (falls sie danach je wieder anfangen zu 
sprechen) ein neues Leben mit ihren echten Talenten führen.

Ansonsten hast du den irgendwann als Kollegen, oder schlimmer, als 
Entwickler deiner Herz-Lungen Maschine bei deiner nächsten Herz OP oder 
programmierer der Fly-By-Wire Steuerung bei deiner nächsten Flugreise. 
Willst du das riskieren?

von Dr. Sommer (Gast)


Lesenswert?

Ich würde dir ja einen Psychiater raten, aber der Arme müsste sich das 
dann ja anhören.

von Franz (Gast)


Lesenswert?

Dr.Sommer schrieb:
>Software Probleme durch mehr Hardware lösen... Und da gibt's hier Leute
>die sich darüber beschweren, dass Software schneller langsamer wird, als
>Hardware schneller wird!

Früher sah ich das auch immer so, aber mittlerweile bin ich der Meinung, 
das ist zu dogmatisch.
So lange man keine Massenprodukte oder nur kleine Stückzahlen baut, kann 
es durchaus pragmatisch sein, eine mögliche Softwarelösung durch 
Hardware zu ersetzten. Man spart sich manchmal ziemlich viel 
Programmieraufwand.
Ein Kollege hatte immer zwei serielle Schnittstellen verwendet: Eine als 
Debug-Schnittstelle und die andere als Standart-Output. Das hat sich auf 
Dauer als ziemlich pratktisch erwiesen und einfach handhabbar erwiesen.

Beitrag #5506583 wurde von einem Moderator gelöscht.
von samuel522 (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Stefanus F. schrieb:
>> So oder so brauchst du zwei USB-UART Adapter, denn es ist ohne spezielle
>> Software nicht möglich, dass zwei Programme sich einen seriellen Port
>> teilen.
>
> Oder man schreibt die eine Software so, dass sie alles bietet, was die
> beiden Softwares können. Das was der Arduino Serial Monitor macht lässt
> sich doch wohl simpel in ein Python Programm übernehmen. Das kann man
> dann auch mit einer schöneren Oberfläche versehen.

Dr. Sommer schrieb:
> Stefanus F. schrieb:
>> So oder so brauchst du zwei USB-UART Adapter, denn es ist ohne spezielle
>> Software nicht möglich, dass zwei Programme sich einen seriellen Port
>> teilen.
>
> Oder man schreibt die eine Software so, dass sie alles bietet, was die
> beiden Softwares können. Das was der Arduino Serial Monitor macht lässt
> sich doch wohl simpel in ein Python Programm übernehmen. Das kann man
> dann auch mit einer schöneren Oberfläche versehen.

ja stimmt, aber sowas geht leider nicht.

von Stefan F. (Gast)


Lesenswert?

> Keine Frau Zuhause? Lass dich mal durchvögeln damit du klar kommst.

Alles klar, und wenn der Moderator den ganzen Scheiß hier löscht, kommen 
genau diese Gäste und jammern wegen Zensur herum. Ihr seid so feige.

von samuel522 (Gast)


Lesenswert?

Stefanus F. schrieb:
> der die Nutzung eines virtuellen seriellen Portes
> mehreren Programmen gleichzeitig erlaubt

das ist genau was ich haben möchte.

von Dr. Sommer (Gast)


Lesenswert?

samuel522 schrieb:
> ja stimmt, aber sowas geht leider nicht.

Warum nicht? Wieso ist die offensichtliche Lösung nicht machbar?

samuel522 schrieb:
> das ist genau was ich haben möchte

Und bestimmt 100x komplizierter als das Programm anzupassen.

Wenn es unbedingt absolut zwei Programme sein müssen, könnte man einen 
Server schreiben der den Port an einen TCP Port weiter leitet. Dann 
müsste man das Python Programm anpassen und einen eigenen "Serial" TCP 
Monitor bauen.

von samuel522 (Gast)


Lesenswert?

sogar mit einem Mega braucht man da Serial enabled device, was 15 € 
kostet

von samuel522 (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Wenn es unbedingt absolut zwei Programme sein müssen, könnte man einen
> Server schreiben der den Port an einen TCP Port weiter leitet. Dann

eigentlich geht es nicht um Eingabe über seriell Monitor. das war nur 
zum Vereinfachen. Die Python wird in einem anderen Anwendungsprogramm 
durchgeführt. und Python-Oberfläche extra also insgesammt 2 Programme.

von Dr. Sommer (Gast)


Lesenswert?

samuel522 schrieb:
> Die Python wird in einem anderen Anwendungsprogramm durchgeführt. und
> Python-Oberfläche extra also insgesammt 2 Programme.

Dann kombiniere beides in ein Programm, oder lasse die Programme 
miteinander reden (Fifo, TCP).

Oder nimm einen Arduino der einen echten USB hat (Uno?) und simuliere 2 
serielle Schnittstellen. Dann hast du endlich die Nachteile zweier 
Schnittstellen erreicht ohne 2 Kabel zu brauchen, Hurra.

von il Conte (Gast)


Lesenswert?

Guest schrieb im Beitrag #5506583:
> Keine Frau Zuhause? Lass dich mal durchvögeln damit du klar kommst.

Tja, micht jeder kann sich ne Grosspackung  'blaue Pillen' pro Woche 
leiste so wie Du :-)

Zurück zum Ernst der Sache:
Wir benutzen für 'auf die schnelle Projekte' auschliesslich Teensy 
Module ( 3.2 / 3.6) die sind sau schnell und besitzen Peripherie im 
Überfluss ( z.b. bis zu 4 USART)
Und sind obendrein voll Arduino kompatible ! - Herz was willst du mehr.

von Stefan F. (Gast)


Lesenswert?

> Und bestimmt 100x komplizierter als das Programm anzupassen.

Sorry, da muss ich mal widersprechen. Eine Diode und ein USB-UART Modul 
sind genau zwei Bauteile. Die hinzuzufügen kann gar nicht 100x 
komplizierter sein, als eine Programmänderung (ganz egal wie klein sie 
sein mag).

Du übertreibst maßlos (schade dass man dieses Wort nicht steigern kann).

> Teensy ... sind obendrein voll Arduino kompatible

Leider gilt das nur, solange man keine Libraries einbindet, die nur für 
AVR geschrieben wurden. Und davon gibt es viele. Diese Dinger sich 
sicher nicht schlecht, aber keine Option für "mal eben schnell 
austauschen".

Abgesehen davon lösen sie den genannten Konflikt nicht, zwei Programme 
auf einem seriellen Port nutzen zu wollen, bzw. auf den zusätzlichen 
USB-UART verzichten zu können.

von Alex W. (gesperrt) (Gast)


Lesenswert?

Samuel ist ein Sommertroll, der anstatt Freitags nun Mittwochs schreibt!

Es ist da alles abgebildet: Arduino, Python, VirtualCom, CAN und 
Busfahrer...

von Dr. Sommer (Gast)


Lesenswert?

Stefanus F. schrieb:
> Eine Diode und ein USB-UART Modul sind genau zwei Bauteile.

Und sind kein Windows Treiber für gleichzeitigen Zugriff. Und darauf 
bezog sich das 100x komplizierter.

von noch so einer (Gast)


Lesenswert?

> ich steuere einen Arduino über Python mit Hilfe von serieller
> Schnittstelle, aber das Problem liegt daran, dass man den Arduino dann
> nicht über Seriell Monitor im Arduino IDE  nicht stewueren kann,
> da die serielle Kommunikation schon vom Python beleget. meine Frage,
> weißt jemand wie man damit umgehen kann?, könnt Serial CAN-BUS Modul
> alternative sein ?

Mir sind deine Anforderungen immer noch nicht klar.
Zu welchem Zeitpunkt benötigst Du den Ser.Monitor und wann das 
Py.Programm? Gleichzeitig?
Welche Programme kannst Du anpassen? Nur den Arduino Sketch?

Im "Normalfall" wo ein Steuerprogramm auf dem PC mit einem Sketch auf 
dem Arduino kommuniziert, muss um z.B. einen neuen Sketch auf den 
Arduino zu laden sowohl der Arduino angehalten werden (Resetbutton -> 
der Bootloader im Arduino nimmt den neuen Download vom AvrDude entgegen) 
als auch das Steuerprogramm am PC (um überhaupt die Schnittstelle f. 
AvrDude frei zu geben).

Zu beachten ist dabei dass die Arduino IDE die zeitliche Koordination 
zw. Ser.Monitor, AvrDude und bei gewissen Arduinomodellen dessen Reset 
übernimmt.
Das mitkoordinieren beliebigen weiteren (py oder nicht py) Programmen 
ist da nicht. Das funktioniert nichtmal mit anderen Seriellen Programme 
statt des in der Arduino IDE integrierten.

Um der Bequemlichkeit wegen das zu ändern wird es auf diese oder jene 
Art aufwändig.

Am transparentesten ist es die "haupt" USB/Serielle Schnittstelle 
ausschließlich für Sketch laden und Ein-/Ausgaben am Ser.Monitor zu 
belassen und für die Kommunikation des Sketches mit einem anderen 
(py-)Programm eine weitere Schnittstelle zu verwenden.

von noch so einer (Gast)


Lesenswert?

> Am transparentesten ist es die "haupt" USB/Serielle Schnittstelle ausschließlich 
für
> Sketch laden und Ein-/Ausgaben am Ser.Monitor zu belassen und für die 
Kommunikation
> des Sketches mit einem anderen (py-)Programm eine weitere Schnittstelle zu 
verwenden.

D.h. 2 Schnittstellen am PC und 2 Schnittstellen am Arduino! Natürlich 
mit 2 separaten Kabel korrekt zugeordnet verbunden.

von Einer K. (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Oder nimm einen Arduino der einen echten USB hat (Uno?) und simuliere 2
> serielle Schnittstellen. Dann hast du endlich die Nachteile zweier
> Schnittstellen erreicht ohne 2 Kabel zu brauchen, Hurra.

Lustige Idee!
Fix mit einem ATMega32U4 getestet.
1
Serial_ SerialA;
2
Serial_ SerialB;
3
4
void setup() 
5
{
6
  SerialA.begin(9600);
7
  SerialA.println("Start");
8
  SerialB.begin(9600);
9
  SerialB.println("Start");
10
}
11
12
void loop() 
13
{
14
  SerialA.println("A");
15
  SerialB.println("B");
16
}
So einfach gehts nicht.

Es wird nur 1 COM Port etabliert

Die Ausgaben von A und B kommen beide dort an.

Da ist also noch (erhebliche?) Nacharbeit in den Libraries nötig, damit 
das so schön, wie gewünscht, klappt.

von Dr. Sommer (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Da ist also noch (erhebliche?) Nacharbeit in den Libraries nötig, damit
> das so schön, wie gewünscht, klappt.

Kann sein. Je nachdem wie sauber die geschrieben sind. Bei diesem 
Projekt wurde es geschafft:
https://GitHub.com/Erlkoenig90/f1usb

USB-UART ist aber letztendlich super hässlich. Wenn man auf Controller 
Seite schon USB programmiert kann man auch direkt ein vernünftiges 
Protokoll bauen...

von Stefan F. (Gast)


Lesenswert?

> Wenn man auf Controller Seite schon USB programmiert
> kann man auch direkt ein vernünftiges Protokoll bauen...

Traust du das dem TO zu?

von Dr. Sommer (Gast)


Lesenswert?

Stefanus F. schrieb:
> Traust du das dem TO zu?

Mit den richtigen Bibliotheken gar nicht so schwierig. Schließlich 
entfällt die Paketierung, Flusskontrolle, Paket-Anfang-Erkennung, 
Einstellung der Baudrate... und zum Kenntnisstand wurde nichts gesagt.

von npn (Gast)


Lesenswert?

Cyblord -. schrieb:
> Willst du das riskieren?

Einen, wie du sprichst "talentfreien" Kollegen hätte ich zehnmal lieber 
als dich. Bei ihm ist die Chance groß, daß er nicht so arrogant und 
überheblich ist. Schon rein statistisch :-)

von Stefan F. (Gast)


Lesenswert?

>> Traust du das dem TO zu?
> zum Kenntnisstand wurde nichts gesagt.

Die Frage des TO lässt einiges durchblicken. Die offensichtliche Lösung 
(wurde ja schon mehrfach genannt) bestände darin, die Programme auf dem 
PC so umzuschreiben, dass sie mit einem seriellen Port klar kommen oder 
einen Windows Treiber zu programmieren, der doppelte Verwendung 
ermöglicht. Wenn das für den TO so einfach wäre, wie es klingt, hätte er 
es längst gemacht.

Ich sehe das so:

Ich kann keine Hosen schneidern, und Maßanfertigungen kann ich nicht 
bezahlen. Also kaufe ich fertige Produkte von der Stange. Die 
entsprechen zwar nicht exakt meiner Idealvorstellung, aber sie sind 
immer noch besser, als Kleider zu tragen oder nackt herum zu laufen. 
Damit käme ich nicht weit.

So sehe ich das auch mit den USB-UART Adaptern. Sie sind nicht ideal, 
aber ich komme damit zurecht. Darauf kommt es für mich an.

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
Noch kein Account? Hier anmelden.