Forum: PC-Programmierung Python: Verkehssimulation


von chris (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Allerseits,

nach einigen Anläufen mit Java und QT als graphische Oberfläche bin ich 
jetzt by Python ( bzw. dem Package Pygame ) angelangt.
Für die Kommunikation mit einem Mikrocontroller oder die Visualisierung 
von Messdaten scheint mir Python sehr geeignet.
Im Anhang mal ein kleines Pythonprogramm mit der Library "Pygame" umd 
die Einfachheit der Programmierung zu zeigen. Als Beispiel habe ich 
allerdings keine MC-Communication sondern die Simulation unserer 
Straßenverhältnisse.

Viel Spass damit,
chris

von Möwie (Gast)


Lesenswert?

Was misst denn der uC?

von Dennis H. (c-logic) Benutzerseite


Angehängte Dateien:

Lesenswert?

Tkinter in Python bietet da aber auch interessante Möglichkeiten mit 
Canvas.
WxPython schaue ich mir momentan in die Richtung noch an.

Hab da mal ein paar Python 2.X-Samples angehangen mit denen ich 
experimentierte.

von chris (Gast)


Lesenswert?

Hallo Dennis,

Tkinter sieht auch interessant aus. Ist es bei der Grundinstallation von 
Python gleich dabei?
In Deinen Programmbeispielen erscheint es mir aber etwas komplizierter 
als "pygame".

Ich habe in "pygame" ein einfaches graphisches Terminal programmiert.
( http://hobby-roboter.de/forum/viewtopic.php?f=4&t=139 )

Damit kann ein Mikrocontroller über die serielle Schnittstelle auf dem 
PC zeichnen. Es gibt ein Beispiel Programm für einen Arduino, mit dem 
die Werte des AD-Wandlers als Graph dargestellt werden.

Die implementierten Kommandos sind folgende:
cls              : clear screen
plot x y         : plot a point at x,y. Example: plot 100 200
color <color>    : set the color for the next drawing. Example: color 
red
pos x y          : set the position for the next drawing. Example: pos 
100 150
line x y         : plot a line from the last position to x,y. Example: 
line 200 300
print <string>   : print a string at the current position. Example: 
print hello world

Gruß,
chris

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

TKinter ist für gewöhnlich bei der Standardinstallation dabei.
Auf Debian liefen Programme bis jetzt auch Problemlos mit Tkinter/Tix.

Das Grafikterminal ist interessant, da ist wohl Pygame vielleicht die 
bessere Wahl, weil die Unterstützung von Tkinter und Bitmaps etwas mager 
sind.
Grafiken im Canvas von TkInter sind meist vektorbasierend.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Grafikterminal schön und gut, wie weit willste es treiben ?

Gibt es schon einen Rückkanal zum µC ?

Wäre es nicht besser die Befehle in einem Bytecode zu übertragen ?

Für Windows wäre vielleicht sogar ein richtiges C-Programm als Option 
auch denkbar.

von Sven B. (scummos)


Lesenswert?

Wenn Du eh schon Qt benutzt hast, warum dann nicht Qt als UI-Framework? 
Es gibt eine sehr schöne Qt-API für Python.

von Robert L. (lrlr)


Lesenswert?

ziemlich old-school

warum kein WEB Interface?

von chris (Gast)


Lesenswert?

>warum kein WEB Interface?

Mach mal eines mit Anbindung zur seriellen Schnittstelle.

von Sven B. (scummos)


Lesenswert?

chris schrieb:
>>warum kein WEB Interface?
>
> Mach mal eines mit Anbindung zur seriellen Schnittstelle.

Und wo soll dabei jetzt das Problem sein? ;)

von chris (Gast)


Lesenswert?

Es gibt nichts gutes, es sei denn, man tut es.(Kästner, Erich )

von Robert L. (lrlr)


Lesenswert?

>Mach mal eines mit Anbindung zur seriellen Schnittstelle.

die vom Server, kein Problem..

vom Client natürlich schon, aber das ist ja der Sinn dahinter..

von Sven B. (scummos)


Lesenswert?

Ok, wenn der Client das machen soll, muss man ein bisschen tricksen, 
aber ich behaupte, das geht trotzdem... der Client gibt der Anwendung 
Zugriff auf lokale Dateien, und man macht per JavaScript XMLHTTPRequests 
auf /dev/ttyS0. Ich gebe aber zu, dass das ziemlich esoterisch ist ;)

von chris (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal ein mit dem Graphik-Terminal erzeugtes Bildchen.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

chris :

Zum Thema Tkinter
Probiere mal das hier

import Tkinter
root = Tkinter.Tk()
photo = Tkinter.PhotoImage(width=32, height=32)
for t in range(16):
    photo.put("#ff0000", (t,t))
label = Tkinter.Label(root, image=photo)
label.grid()
root.mainloop()

von Simon B. (nomis)


Lesenswert?

Sven B. schrieb:
> Ok, wenn der Client das machen soll, muss man ein bisschen tricksen,
> aber ich behaupte, das geht trotzdem... der Client gibt der Anwendung
> Zugriff auf lokale Dateien, und man macht per JavaScript XMLHTTPRequests
> auf /dev/ttyS0. Ich gebe aber zu, dass das ziemlich esoterisch ist ;)

Öh. Du willst den Webbrowser dazu bringen mittels eines XMLHTTPRequests 
auf eine lokale Device-Datei zugreift? Ohne einen lokalen Server 
aufzumachen?

[x] das will ich sehen.

Grüße,
        Simon

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Chris :

Tkinter ist der Gedanke falls du doch noch GUI-Funktionalität brauchst 
wie Buttons, da macht Pygame schlapp.
Zum Zeichnen (mit eingebauten Draw-Funktionen) ist PIL sehr geeignet.
PIL-Images kann man mit Tkinter benutzen.

von Sven B. (scummos)


Lesenswert?

Simon Budig schrieb:
> Sven B. schrieb:
>> Ok, wenn der Client das machen soll, muss man ein bisschen tricksen,
>> aber ich behaupte, das geht trotzdem... der Client gibt der Anwendung
>> Zugriff auf lokale Dateien, und man macht per JavaScript XMLHTTPRequests
>> auf /dev/ttyS0. Ich gebe aber zu, dass das ziemlich esoterisch ist ;)
>
> Öh. Du willst den Webbrowser dazu bringen mittels eines XMLHTTPRequests
> auf eine lokale Device-Datei zugreift? Ohne einen lokalen Server
> aufzumachen?
>
> [x] das will ich sehen.
>
> Grüße,
>         Simon

Na gut, ich habe übersehen, dass schreiben nicht hinhaut -- lesen geht 
aber (mit entsprechenden "Sicherheits"einstellungen vom Browser) ;)

von nicht "Gast" (Gast)


Lesenswert?

Chris:

wenn du was plotten willst, dann nimm lieber die matplotlib. das ist 
wesentlich besser, als den alles selber zeichnen zu wollen.

Grüße,

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Sven B. schrieb:
> Na gut, ich habe übersehen, dass schreiben nicht hinhaut -- lesen geht
> aber (mit entsprechenden "Sicherheits"einstellungen vom Browser) ;)

Mit einem TCP zu Serial Deamon würde es aber Problemlos und ohne 
Verrenkungen klappen. Für Windows gibt es ja schon com0tcp der uC muss 
dann nur halt HTTP über die Serielle sprechen was aber auch nicht weiter 
wild ist.

von Sven B. (scummos)


Lesenswert?

Klar, aber die Challenge war ja, das in purem JS ohne Software auf dem 
Client zu realisieren. ;)
Aus den Device-Files lesen geht zwar, aber rein schreiben leider nicht 
(ich dachte das geht mit POST, ist aber natürlich nicht so).

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.