Forum: Mikrocontroller und Digitale Elektronik Webserver in C/C++ und auf externen Monitor darstellen


von Frank (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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?

von physiker (Gast)


Lesenswert?

Du meinst sicherlich keinen Webserver. Das bräuchtest Du wenn sich 
andere! Rechner von Deinem Gerät die Inhalte holen sollten. Eigentlich 
brauchst Du auch nichts programmieren. Das geht z.B. als Webseite die 
lokal läuft:
http://www.instructables.com/id/Raspberry-Pi-Wall-Mounted-Calender-and-Notificatio/?ALLSTEPS

https://www.raspberrypi.org/forums/viewtopic.php?f=41&t=41261

als qt programm z.B. hier
https://hackaday.io/project/6184-piclock-a-raspberry-pi-clock-weather-display

und ungefähr 260000 weitere Treffer.

Und wieso solltest Du nicht Programm in C oder C++ auf dem Rpi erstellen 
können?

von Dergute W. (derguteweka)


Lesenswert?

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...

: Bearbeitet durch User
von Dampf T. (ouuneii)


Lesenswert?

Darstellen von Webseiten geschieht mit einem Browser. Ich wuerd erst man 
so einen verwenden. Firefox, Chrome, Opera, ..

von Stefan F. (Gast)


Lesenswert?

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.

von ♪Geist (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

@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).

von Frank (Gast)


Lesenswert?

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.

von Dirk B. (dirkb2)


Lesenswert?

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.

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

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.

von Peter Lustig (Gast)


Lesenswert?

Moin,

[keine Werbung]
die Firma NEC hat/bringt Monitore mit eingebauten Raspberry am Start.
[/keine Werbung]

https://www.heise.de/ix/meldung/NEC-bringt-Monitore-mit-eingebautem-Raspberry-Pi-3349885.html

von Stefan F. (Gast)


Lesenswert?

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/)

von waflija (Gast)


Lesenswert?

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.

von R. R. (elec-lisper)


Lesenswert?

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.

von Sheeva P. (sheevaplug)


Lesenswert?

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

von Sheeva P. (sheevaplug)


Lesenswert?

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.

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.