Hallo,
ich möchte gerne einen Webserver erstellen und diesen auf einen
LCD-Monitor (15")(ohne extra computer) darstellen. Da sollte dann Datum,
Wetter, Kalender und Nachrichten stehen.
Jetzt habe ich einen Arduino mit Ehternet-Shield und einen RaspberryPi.
gerne würde ich das mit dem Arduino machen (Programmieren in C/C++).
Habe aber keine Ahnung, wie ich das ganze auf einen Monitor darstellen
lassen kann. Ich benutze den/das Arudino gerne als Entwicklungsboard, da
dieser fertig mit peripherie ausgestattet ist. Einfacher (und
wahrscheinlich schöner), wäre die Umsetzung mit einem RaspberryPi.
Diesen kann ich aber leider nicht in C/C++ Programmieren.
Hat einer eine Idee, wie ich einen Webserver in C/C++ programmieren kann
und diesen auf einen externen Monitor (ohne extra computer) darstellen
lassen kann?
Frank
Frank schrieb:> Diesen kann ich aber leider nicht in C/C++ Programmieren.
warum nicht? Was glaubst du, wie die ganzen Programm auf das Raspi
programmiert sind?
Moin,
Frank schrieb:> Einfacher (und> wahrscheinlich schöner), wäre die Umsetzung mit einem RaspberryPi.> Diesen kann ich aber leider nicht in C/C++ Programmieren.
Wieso nicht? Aufm RaspPi kannste in ziemlich vielen Sprachen Programme
entwickeln, weitaus mehr als nur C/C++.
> Hat einer eine Idee, wie ich einen Webserver in C/C++ programmieren kann> und diesen auf einen externen Monitor (ohne extra computer) darstellen> lassen kann?
Mir ist unklar, was du mit Webserver meinst. Ein Webserver ist fuer mich
ein Stueck Software (apache, lighttpd, nginx,...), das selbst ueberhaupt
nix darstellen kann. Das kann nur Files an irgendwelche Clients
ausliefern oder auf Anfrage irgendwelchen anderen Shice (CGI, PHP,...)
anstossen, der widerum dem Anfragenden antwortet.
Also was willst du wirklich machen?
Gruss
WK
Edit: huups - wieder viel zu langsam...
Die üblichen Arduinos sind für Webserver sehr knapp ausgestattet. HTTPS
wird damit gar nicht möglich sein und auch sonst kannst du mit so wenig
Speicher nur sehr simple Webseiten mit wenig Inhalt erzeugen. Und er
kann dann auch nur sehr wenige Clients (Browser) gleichzeitig bedienen.
Auf einem Raspberry Pi wird das ganze sehr viel einfacher. Anfängern
würde ich dazu die Scriptsprache PHP und den Apache Webserver mit dem
Modul mod_php emfpehlen. Die Grundlagen von PHP sind schnell erlernt und
die Performance ist Ok.
Fortgeschrittenen Entwicklern würde ich die Sprache Java mit Tomcat oder
Wildlfy als Grundlage empfehlen. Fähige Java Web Entwickler werden zur
Zeit sehr gut bezahlt.
Da du in C++ Programmieren möchtest, solltest Du erwägen, dein Programm
entweder direkt als Modul für den Apache HTTP Server zu schreiben oder
Stand-Alone mit der QtWebApp Library.
Du kannst deinen Raspberry Pi in C++ programmieren. QtWebApp ist eine
C++ Library. Als Entwicklungsumgebung verwednet man üblicherweise Qt
Creator - gibt's auch für den Raspi.
Das ganze ist mehr als Easy, da reicht ein Rapsi. Vorausgesetzt dein
Monitor hat HDMI.
- geany IDE installieren
- Apache Server installieren
- bißchen PHP programmieren: JSON Wetterabfrage von einem kostenlosen
Diens
- bißchen HTML, CSS
- die Webseite mit nem Browser http:\\localhost aufrufen, evtl vollbild
F11 bei firefox fertig.
Arbeitsaufwand 2h maximal.
@Geist:
Ich glaube Dir, dass du einen ersten Wurf in 2 Stunden hinbekommst. Aber
dem TO nützt diese Angabe nichts. Er wird dafür sicher ein paar Tage
brauchen (was nicht bedeuten soll, dass sein Vorhaben eine schlechte
Idee sei).
Mhh,
erst einmal vielen Dank für die Antworten. Natürlich habe ich mich nicht
gut genug ausgedrückt. Sry. Also was ich vorhabe, ist auf einem
TFT-Bildschirm sachen, wie Temperatur usw. anzeigen zu lassen. Das ganze
Projekt ist für einige natürlich sehr einfach, für mich aber schon eine
herausforderung und eine gute gelegenheit meine Kentnisse in C++ zu
vertiefen (daher suche ich den richtigen Start, nicht um irgendwann
festzustellen, dass es so doch gar nicht geht). Der Bildschirm soll dann
an der Wand und mir die Daten anzeigen.
Da ich den Arduino (und Ethernet Shield) habe, war die Idee das damit zu
machen (da ich wusste, dass ich es dort mit C/C++ machen kann). Meine
Idee war es, z.B. Wetter.com aufzurufen und die Temperatur auszulesen.
Hierbei weiss ich aber nicht, wie ich das auf dem Bildschirm bekomme
(ohne noch extra einen Computer dazwischen zu schalten). Wenn der
Arduino noch am Laptop gesteckt ist (mit USB) kann ich auf einer
angelegten Seite mir die Temperatur auch anzeigen lassen.
Da der Raspberry Pi ja extra einen HDMI-Ausgang hat, habe ich mir
gedacht, dass es damit natürlich einfacher sein wird. Hier bin ich aber
davon ausgeangen, dass dieser in python programmiert wird, was mir nicht
wirklich hilft um meine C++ Kentnisse zu verbessern.
Da dieser anscheinend doch so programmiert werden kann, werde ich noch
einmal genauer suchen.
Entscheide dich für C oder C++. Das sind zwei verschiedene Sprachen.
Für dein Vorhaben sind aber Beide nicht die erste Wahl.
Eine Skriptsprache bietet da bessere Möglichkeiten. Auch davon hat der
Raspberry (bzw sein Betriebssystem) etliche zur Auswahl.
Bei dem Projekt (wenn du die Anzeige in einem Browser willst) brauchst
du HTML und Javascript.
Gibt es da kein HDMI-Shield?
Mit der Arduino Hardware könnte man evtl. noch VGA oder ein
s/w-SD-Signal erzeugen. Ob man das in C hinbekommt, wage ich zu
bezweifeln. Für weitere Dinge hat er dann allerdings nur noch wenig
Zeit.
Beim R¶ ist die Bildausgabe schon fertig. Du benötigst nur ein Programm,
welches die Sensoren ausliest und auf dieser malt.
Gruß
Jobst
Warum hast du eigentlich das Wort "Webserver" benutzt? Bist Du Dir
sicher, dass deine Anwendung einen Webserver benötigt?
Webserver erzeugen Webseiten, die man mit Webbrowsern darstellt.
Es gibt noch andere deutlich einfachere Möglichkeiten, Bildschirme
anzusteuern.
Arduinos sind jedenfalls viel zu klein, um normale Computerbildschirme
oder Displays in dieser Größe anzusteuern. Mit viel Mühe kann man das
machen, aber die Möglichkeiten sind alleine schon wegen dem begrenzten
Speicherplatz massiv eingeschrängt. Mehr als ein bisschen Text und
einfachste Grafiken kannst du mit Arduinos nicht erzeugen.
Dazu kommt, dass der nötige Adapter (HDMI Shield, VGA Grafikkarte) mehr
kosten dürfte, als ein Raspberry Pi, der den nötigen Ausgang bereits
On-Board hat, genügend Speicher hat und auch jede Menge
Programmiersprachen und Libraries mit sich bringt, die dabei hilfreich
sind. Egal ob jetzt mit oder ohne Webserver.
Hallo,
'Webserver' war wohl das völlig falsche Wort. Wie gesagt, ich möchte
einfach nur Daten aus dem Internet auf einem Bildschirm darstellen und
diesen an der Wand hängen. Hauptsächlich geht es mir hierbei um meine
Programmierkentnisse in C++ weiter zu verbessern.
Werde nochmal suchen, wie ich das mit dem raspberry pi hinbekommen kann.
Also kein Webserver.
Dann nimm einen Raspberry Pi und programmiere ihn in der
Programmiersprache deiner Wahl. Ich empfehle Dir das C++ Qt Framework
(https://www.qt.io/)
Der Raspberry ist ein vollwertiger Computer mit kompletten
Betriebssystem (wie Debian ARM oder ähnliches) Da kannst du im Zweifel
alles drauf programmieren, ja sogar eine Entwicklungsumgebung deiner
Wahl auf einer graphischen Oberfläche laufen lassen. Das ganze genau so
simple zu installieren wie am heimischen PC.
also "apt-get install build-essentials" ind die Konsole und los gehts :)
tutorials gibts dafür zu hauf im Netz.
Ich kann mich Stefan Us nur anschließen.
Nimm C++ mit Qt aufm RaspberryPi.
Damit lernst du C++- und GUI-Entwicklung, mit welcher du später
auch auf x86-Platformen (bzw. PCs) noch was anfangen kannst.
Qt kommt mit allem was du brauchst. HTTP-Client um Wetterdaten
abzufragen und einen GUI-Toolkit um das ganze auch noch anzuzeigen.
Das Problem ist nur, dass Qt sehr umfangreich ist und man sich
erstmal durch einige Beispiele und Tutorials kämpfen muss. Vorallem
wenn man noch keine Erfahrung mit GUI-Bibliotheken hat.
Aber das Wissen kannst du später prima transferieren auf
C#/WPF/Visual Studio oder Python mit Qt oder Java mit Swing.
Der Arduino ist super für ganz Low-Level dinge. Bspw. Steuerungsaufgaben
von Relais bis hin zum Abfragen von Sensoren.
Die verfügbaren Resourcen auf einem Arduino sind so winzig, dass man
echt viel Ahnung von IP/TCP/HTTP haben muss um da noch HTTP-Requests
zu schicken und die Antwort zu parsen. Definitiv kein Anfängerprojekt
wenn du mich fragst.
Frank schrieb:> Da der Raspberry Pi ja extra einen HDMI-Ausgang hat, habe ich mir> gedacht, dass es damit natürlich einfacher sein wird. Hier bin ich aber> davon ausgeangen, dass dieser in python programmiert wird, was mir nicht> wirklich hilft um meine C++ Kentnisse zu verbessern.
Der RasPi hat ein ziemlich komplettes Linux-System. Deswegen kannst Du
ihn mit so ziemlich allem programmieren, das unter Linux läuft: C und
C++, klar, Java, Python, Perl und Ruby, Lisp, Haskell, Erlang, Ocaml,
sogar Brainfuck, Whitespace oder Assembler, wenn Du willst. Mit jeder
dieser Sprachen kannst Du CGI-Programme schreiben.
Wenn Du wirklich einen Webserver schreiben willst, findest Du in
Boost::Asio [1], Pstreams für CGI [2] und dem C++ Web Toolkit [3]
nützliche Bibliotheken und Beispiele. Aber bitte bedenke, daß die
Aufgabe, einen auch nur halbwegs sicheren Webserver zu schreiben, nicht
trivial ist. Wenn Du erwägst, Deine Webseite öffentlich zugänglich zu
machen, dann dürfte es besser sein, einen fertigen Webserver wie Apache,
nginx, Thttpd, Lighthttpd oder Hiawatha zu benutzen. HTH, YMMV.
[1] http://www.boost.org/doc/libs/1_62_0/doc/html/boost_asio.html
[2] http://pstreams.sourceforge.net/
[3] https://www.webtoolkit.eu/wt
Frank schrieb:> 'Webserver' war wohl das völlig falsche Wort. Wie gesagt, ich möchte> einfach nur Daten aus dem Internet auf einem Bildschirm darstellen und> diesen an der Wand hängen. Hauptsächlich geht es mir hierbei um meine> Programmierkentnisse in C++ weiter zu verbessern.> Werde nochmal suchen, wie ich das mit dem raspberry pi hinbekommen kann.
Letztlich kommt es darauf an, was Du machen willst. Daten auf einen
Monitor malen kannst Du mit jedem GUI-Framework. Ein Webserver würde Dir
hingegen die Möglichkeit eröffnen, die Daten auch von anderen Rechnern
aus abrufen und darstellen zu können.
Im Prinzip Du legst einen neuen Benutzer an, konfigurierst systemd so,
daß er automatisch nach dem Booten eingeloggt wird, und konfigurierst
"etwas" als Client für einen Windowmanager wie etwa Matchbox. Dieses
"etwas" steht entweder für ein von Dir geschriebenes GUI-Programm, oder
aber für einen Webbrowser wie Firefox, Midori oä. im Kiosk-Modus.