Forum: Mikrocontroller und Digitale Elektronik Temperatur Value anzeige über .htm Seite


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Daniel G. (daniel_g87)


Lesenswert?

Hoi Mikrocontroller Gemeinde,

ich arbeite mit einem LM3S8962 Stellaris Kit und habe ein Problem, bei 
dem ich euch um Hilfe ersuche !

Ausgangssituation:

Ich betreibe einen Webserver auf diesem Board
- > dieser Funtkioniert einwandfrei

Ich habe außerdem die Funktion eines DHCP - Client inkludiert, damit 
sich das Board über Ethernet eine IP zugewiesen bekommt, oder sich 
selbst "erreichbar" macht !
-> Funktioniert einwandfrei

Problemstellung:

Ich lese die Temperatur des internen Temperature Sensors aus und 
berechne ihn in Celsius und Fahrenheit - was auch prima Funktioniert !

Jetzt möchte ich diesen Werte (Fahrenheit und Celsius) auf einer .htm 
seite / .html Seite anzeigen lassen

Die Werte stehen mir als unsigned integer zu Verfügung !

Hat jemand vlt. einen Ansatz / Idee wie ich diese Werte auf einer 
Dynamischen Webseite ausgeben kann ? Oder hat jemand vlt. ein Beispiel 
an denen man(n) [ich ;) ] orientieren könnte ?

Vielen Dank für Eure Zeit und das Lesen

Merci

Gruss

Daniel

von Karl H. (kbuchegg)


Lesenswert?

Daniel G. schrieb:
> Hoi Mikrocontroller Gemeinde,
>
> ich arbeite mit einem LM3S8962 Stellaris Kit und habe ein Problem, bei
> dem ich euch um Hilfe ersuche !
>
> Ausgangssituation:
>
> Ich betreibe einen Webserver auf diesem Board

Welchen?

> Hat jemand vlt. einen Ansatz / Idee wie ich diese Werte auf einer
> Dynamischen Webseite ausgeben kann ? Oder hat jemand vlt. ein Beispiel
> an denen man(n) [ich ;) ] orientieren könnte ?

Du musst dir gewahr sein, das eine HTML Seite auch nichts anderes ist, 
als einfach nur Text, den der Server auf Anforderung von sich gibt.

Kommt vom Browser die Anforderung: Gib mir die Seite XYZ.html
Dann schickt ihm der Server als Antwort den Text
1
<html>
2
<header>
3
</header>
4
<body>
5
  Dies ist die Seite und es hat 23 Grad
6
</body>
7
</html>

Wie dieser Text zustande kommt, interessiert den Browser nicht. Der 
Server kann diesen Text aus einem File holen, der Server kann diesen 
Text auch 'on-the-fly' zusammenstellen, zb indem er in ein paar 
Textvariablen direkt im Programm vorrätig ist.

Und natürlich kann der Server auch während er den Text ausgibt, 
Veränderungen an einem vorhandenen Text vornehmen, denn wie gesagt: Den 
Browser interessiert nur das Eregbnis, nicht wie der Server es erzeugt 
hat.
1
  sprintf( buffer, "  Dies ist die Seite und es hat %d Grad", Temperatur );
2
  buffer über den TCP/IP Kanal schicken
ist völlig zulässig.

Bei einem 'großen' Web-Server gibt es jetzt standardisierte 
Möglichkeiten, wie der Server den Text, den er ausgibt verändern kann. 
Zb. indem er eine eingebettete Programmiersprache auswerten kann, die 
dann eben zb PHP heißt und wo die Textersetzung in PHP gemacht wird.

Auf kleinen Web-Servern, die auf µC laufen, hat man aber oftmals diese 
Möglichkeiten nicht. Der Umfang eines Web-Servers wäre zu groß. In 
einigen Fällen behilft man sich damit, dass speziell für diesen 
Web-Server Vereinbarungen getroffen werden, bzw. fix in den Server 
reinprogrammiert werden, das er bestimmte 'Steuersequenzen' im Text 
durch den Wert von irgendwelchen Variablen ersetzt.

Das könnte dann zb so aussehen, das du im HTML Text schreibst
1
...
2
   Dies ist die Seite und es hat $TEMP Grad
3
...
und das Programm des Webservers untersucht den auszugebenden Text und 
wenn es da den Text "$TEMP" findet, ersetzt es diesen Text durch die 
aktuelle Temperatur.

Ob das geht und wie das geht, hängt jetzt von deinem Web-Server ab. 
Daher auch die Frage nach ihm. Ist das ein ausgewachsener Web-Server, 
dann wird irgendeine der Standardmethoden funktionieren. Ist es ein 
abgespeckter Server, dann hat er vielleicht so eine Ersetzung bereits 
integriert. Hat man gar den Quelltext des Servers, dann kann man sich 
sowas auch selbst in dieses Serverprogramm reinprogrammieren. Denn 
letzten Endes geht es nur darum, einen Text während der Ausgabe über die 
TCP/IP Leitung zu modifizieren, während er ausgegeben wird.

von Max D. (max_d)


Lesenswert?

Entweder die Werte einfach als Text (Stichwort itoa() ) besorgen und 
dann in deine Seite Einbauen (vlt. mit iwelchen Tags $temp oder so) oder 
ein bischen js das die werte immer aktuell von deinem Board holt und 
anzeigt...

von Daniel G. (daniel_g87)


Lesenswert?

Hi Ihr Zwei,
 erstmal danke für die fixe Antwort !


Karl Heinz Buchegger schrieb:
> Welchen?

Hierzu kann ich "nur" diese offizielle NOTE herbeizitieren:
1
Note that the web server used by this example has been modified from the example shipped with the basic lwIP package.  Additions include SSI and
2
CGI support along with the ability to have the server automatically insert
3
the HTTP headers rather than having these built in to the files in the
4
file system image.
5
6
For additional details on lwIP, refer to the lwIP web page at:
7
http://savannah.nongnu.org/projects/lwip/

ich verwende den modifizierten von Stellaris, der in einigen Examples 
schon verwendet wurde!

Die beispiel Seiten beinhalten auch js an der stelle und holen über 
functions() die werte und stellen Sie dann da

Ein Beispiel :
1
<script language="JavaScript">
2
<!--
3
function toggle_led()
4
{
5
var req = false;
6
var led = false;
7
function ledComplete()
8
{
9
if(led.readyState == 4)
10
{
11
if(led.status == 200)
12
{
13
document.getElementById("ledstate").innerHTML = "<div>" + led.responseText + "</div>";
14
}
15
}
16
}
17
if(window.XMLHttpRequest)
18
{
19
req = new XMLHttpRequest();
20
led = new XMLHttpRequest();
21
}
22
else if(window.ActiveXObject)
23
{
24
req = new ActiveXObject("Microsoft.XMLHTTP");
25
led = new ActiveXObject("Microsoft.XMLHTTP");
26
}
27
if(req)
28
{
29
req.open("GET", "/cgi-bin/toggle_led?id" + Math.random(), true);
30
req.send(null);
31
}
32
if(led)
33
{
34
led.open("GET", "/ledstate?id=" + Math.random(), true);
35
led.onreadystatechange = ledComplete;
36
led.send(null);
37
}

in diesem js - toggeln sie die LED

ich verstehe jedoch nicht  worauf sie mit dieser "GET" methode verweisen
1
led.open("GET", "/ledstate?id=" + Math.random(), true);

bzw.
1
req.open("GET", "/cgi-bin/toggle_led?id" + Math.random(), true);

ich verstehe hier nicht, wie auf die werte der LED im Beispiel 
zugegriffen wird und diese von der .htm seite über js function(9) geholt 
werden ?

Merci fürs Lesen & Antworten

Gruss

Daniel

von Bruce (Gast)


Lesenswert?

hallo, ich hoffe es stört nicht wenn ich mal was anderes frage, aber ich 
versuche das gleiche aber nur soll er mir die Temp. auf den Display 
anzeigen aber irgend wie geht es bei mir nicht! Ich bin Anfänger und 
irgend wie komme ich nicht wirklich drauf wie ich das anstellen soll! 
Vielleicht kannst du mir oder jemand helfen?! Danke !!!

von Svenska (Gast)


Lesenswert?

Dein Webserver bekommt vom Browser die Anfrage "gib mir mal, was du 
unter '/ledstate?id=5' stehen hast". Ob er nun eine Datei anzeigt, 
dynamisch irgendeinen HTML-Code erzeugt und anzeigt oder eine Funktion 
aufruft, die den LED-Status ermittelt und dann den HTML-Code erzeugt, 
spielt für den Browser keine Rolle.

Das Javascript wird vom Browser ausgeführt und ersetzt in der Webseite 
gewisse Inhalte, nachdem die Seite schon geladen wurde. Dafür benutzt 
sie eine weitere Verbindung zum Webserver.

Der Webserver wird vermutlich eine Liste mit URIs ('/ledstate', 
'/cgi-bin/$irgendwas' usw.) haben, für die er vorgefertigte Aktionen 
auslöst.

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.