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
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!
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...
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.
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!
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?
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!
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.
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.
> 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.
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 erlaubtDas 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.
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.
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.
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.
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?
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?
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.
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.
> 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.
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.
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.
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.
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.
> 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.
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.
> 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.
> 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.
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
voidsetup()
5
{
6
SerialA.begin(9600);
7
SerialA.println("Start");
8
SerialB.begin(9600);
9
SerialB.println("Start");
10
}
11
12
voidloop()
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.
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...
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.
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 :-)
>> 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.