Forum: Mikrocontroller und Digitale Elektronik LWIP Webserver


von conny (Gast)


Lesenswert?

Hallo,
ich nutze das Beispiel von St den lwip webserver ,ich wollte gerne wenn 
die led an ist ein kleines gif bild auf der Webseite anzeigen ledoff 
oder ledan.

kann mir da einer behilflich sein
MFG.


const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char 
*pcParam[], char *pcValue[])
{
  uint32_t i=0;

  /* We have only one SSI handler iIndex = 0 */
  if (iIndex==0)
  {
    /* All leds off */
    BSP_LED_Off(LED1);
    BSP_LED_Off(LED2);
    BSP_LED_Off(LED3);
    BSP_LED_Off(LED4);

    /* Check cgi parameter : example GET /leds.cgi?led=2&led=4 */
    for (i=0; i<iNumParams; i++)
    {
      /* check parameter "led" */
      if (strcmp(pcParam[i] , "led")==0)
      {
        /* switch led1 ON if 1 */
        if(strcmp(pcValue[i], "1") ==0)
          BSP_LED_On(LED1);

        /* switch led2 ON if 2 */
        else if(strcmp(pcValue[i], "2") ==0)
          BSP_LED_On(LED2);

        /* switch led3 ON if 3 */
        else if(strcmp(pcValue[i], "3") ==0)
          BSP_LED_On(LED3);

        /* switch led4 ON if 4 */
        else if(strcmp(pcValue[i], "4") ==0)
          BSP_LED_On(LED4);
      }
    }
  }
  /* uri to send after cgi call*/
  return "/STM32F4xxLED.html";
}

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

conny schrieb:
> /* uri to send after cgi call*/
>   return "/STM32F4xxLED.html";

Schicke eben jeweils eine andere Seite zurück wo dann im HTML Code das 
gif verlinkt ist.
http://www.w3schools.com/

von conny (Gast)


Lesenswert?

Mw E. schrieb:
> conny schrieb:
> /* uri to send after cgi call*/
>   return "/STM32F4xxLED.html";
>
> Schicke eben jeweils eine andere Seite zurück wo dann im HTML Code das
> gif verlinkt ist.
> http://www.w3schools.com/

ich kann doch nicht jedesmal eine andere Seite zurück schicken wenn sich 
der led status ändert.

beim uip ist das ganze einfach
UIP_APPDATA_SIZE,
      "%s ",  (port_stat ? "<img  id=\"myimage\" 
onclick=\"changeImage()\" src=\"pic_bulbon.gif\" width=\"100\" 
height=\"180\" alt=\"Bildtext\"> <br> Lampen-Status: Ein":
      "<img  id=\"myimage\" onclick=\"changeImage()\" 
src=\"pic_bulboff.gif\" width=\"100\" height=\"180\" alt=\"Bildtext\"> 
<br> Lampen-Status: Aus"));

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Wieso denn nicht?

Ansonsten mal gucken was AJAX und JSON sind ;)

von conny (Gast)


Lesenswert?

es nutzen doch bestimmt viele den LWIP, ich das beispiel vom adc 
genommen aber ich bekomme kein bild angezeigt im browser.

Ich finde auch kein Beispiel.
Könnte denn mir wer helfen
1
u16_t ADC_Handler(int iIndex, char *pcInsert, int iInsertLen)
2
{
3
  /* We have only one SSI handler iIndex = 0 */
4
  if (iIndex ==0)
5
  {  
6
    char Digit1=0, Digit2=0, Digit3=0, Digit4=0; 
7
    uint32_t ADCVal = 0;        
8
9
     /* configure ADC if not yet configured */
10
     //if (ADC_not_configured ==1)       
11
     //{
12
     //   ADC_Configuration();
13
     //   ADC_not_configured=0;
14
    // }
15
     
16
     /* get ADC conversion value */
17
     //ADCVal = ADC_GetConversionValue(ADC3);
18
     
19
     /* convert to Voltage,  step = 0.8 mV */
20
     //ADCVal = (uint32_t)(ADCVal * 0.8);  
21
     // ADCVal = 8500;  
22
     /* get digits to display */
23
     
24
     //Digit1= ADCVal/1000;
25
     //Digit2= (ADCVal-(Digit1*1000))/100 ;
26
     //Digit3= (ADCVal-((Digit1*1000)+(Digit2*100)))/10;
27
     //Digit4= ADCVal -((Digit1*1000)+(Digit2*100)+ (Digit3*10));
28
        
29
     /* prepare data to be inserted in html */
30
     //*pcInsert       = (char)(Digit1+0x30);
31
     //*(pcInsert + 1) = (char)(Digit2+0x30);
32
     //*(pcInsert + 2) = (char)(Digit3+0x30);
33
     //*(pcInsert + 3) = (char)(Digit4+0x30);
34
    
35
    /* 4 characters need to be inserted in html*/
36
    //return 4;
37
  //} //else if (iIndex == 1) { // Test tag "u" value
38
      /* prepare data to be inserted in html */
39
       //*pcInsert       = (char)('1');
40
       //*(pcInsert + 1) = (char)('2');
41
       //*(pcInsert + 2) = (char)('3');
42
       //*(pcInsert + 3) = (char)('4');
43
44
      /* 4 characters need to be inserted in html*/
45
      //return 4;
46
      
47
      sprintf((char *)pcInsert, 
48
      "%s ",  ( "<img   src=\"black.gif\" width=\"64\" height=\"64\" alt=\"Bildtext\" color=\"#00FF00\"> <br> 25"));
49
      return strlen(pcInsert);
50
  }
51
  return 0;
52
}

von conny (Gast)


Lesenswert?

das funktioniert auch nich
strcat((char *)(data_response_buf),"/img/black.gif");

kann mir denn hier keiner helfen??

von Daniel A. (daniel-a)


Lesenswert?

Bekommst du denn damit irgendetwas angezeigt?

: Bearbeitet durch User
von Artur (Gast)


Lesenswert?

Was it jetzt genau das Problem?
Ich habe auf dem STM32F407 einen Webserver laufen gehabt, wobei ich den 
selbst implementiert habe.
> return "/STM32F107LED.html";
Das kenne ich nicht. Habe damals FSData Tool gehabt, um die Webseite in 
Chararrays umzuwandeln.

Mw E. schrieb:
> Schicke eben jeweils eine andere Seite zurück wo dann im HTML Code das
> gif verlinkt ist.

Das ist echt Blödsinn....

Ich kann dir jetzt keine koplette Lösung coden, aber wass du brauchst 
ist tatsächlich z.B. AJAX.

In deinem hlml header musst du start eines JS Scriptes erzwingen, 
ungefährt so:
<head>
...
...
<script type="text/javascript">
function LEDWatch(){

} </script>
</head>
<body onload="LEDWatch()">

Die Funktion LedWatch, soll einen ajax http request an deine led.cgi 
schicken. Der Webserver gibt als Antwort nicht die ganze Seite zurück 
sondern nur die Rohdaten in Form z.B.: "ON;OFF;OFF;ON". Diese kannst du 
mit JS splitten und in den mit "id" vorgesehenen Stellen im HTML code 
weitergeben. So werden die Daten im Hintergrung aktuallisiert. Ich habe 
sowas ähnliches realisiert. Das war ein BBQ WiFi Meter mit drei Probes, 
der die Daten am OLED angezeigt hat, aber auch gleichzeitig via 
http-Server serviert hat :) Ganze HTML Seite war ein string mit ca. 1500 
Zeichen.

von Artur (Gast)


Lesenswert?

PS: damit AJAX im Hintergrund z.B. alle 1,5 Sekunden aktuallisiert wird, 
musst du in dem AJAX Java Script Selbsaufruf machen:
setTimeout(function(){$self();}, 1000); }

von conny (Gast)


Lesenswert?

beim uip hatte ich das so und das funktionierte einwandfrei
UIP_APPDATA_SIZE,
"%s ", (port_stat ? "<img id=\"myimage\" onclick=\"changeImage()\" 
src=\"pic_bulbon.gif\" width=\"100\" height=\"180\" alt=\"Bildtext\"> 
<br> Lampen-Status: Ein":
"<img id=\"myimage\" onclick=\"changeImage()\" src=\"pic_bulboff.gif\" 
width=\"100\" height=\"180\" alt=\"Bildtext\"> <br> Lampen-Status: 
Aus"));

von conny (Gast)


Lesenswert?

Daniel A. schrieb:
> Bekommst du denn damit irgendetwas angezeigt?

wird nichts angezeigt also das Bild wird nicht angezeigt

von conny (Gast)


Angehängte Dateien:

Lesenswert?

mit diesen geht es doch auch ohne Ajax.
dafür hab ich kein tool um die Webseiten zu übersetzen

von conny (Gast)


Lesenswert?

ist vielleicht doch nicht das richtige forum hier um Hilfe zu bekommen.

von Stefan F. (Gast)


Lesenswert?

> ich wollte gerne ... ein kleines gif bild auf der Webseite anzeigen
> kann mir da einer behilflich sein

Naja, wir können weder in Deinen Computer noch in Deinen Kopf schauen. 
Du hast das Problem immer noch nicht klar beschrieben.

> ich bekomme kein bild angezeigt im browser.

Hast du den Quelltext der Webseite kontrolliert, die der Browser 
empfangen hat?
Kennst du dich mit HTML aus? Auch mit HTTP?
Hast du im Debugger des Browsers kontrolliert, ob er die Bilder 
angefordert hat und wie der Webserver darauf geantwortet hat?

> das funktioniert auch nich ...
> kann mir denn hier keiner helfen??

Was funktioniert denn nicht? Siehst du eventuell kein Bild im Browser, 
weil du Stromausfall hast? Oder ist dein Monitor kaputt?

Du magst jetzt denken "was sollen die blöden Fragen", aber so blöd sind 
die gar nicht. Du hast uns nämlich absolut keinen Anhaltspunkt 
geliefert. Also müssen wir bei Null anfangen. Dazu hat allerdings kaum 
jemand wirklich Lust. Solche Glaskugel-Threads enden selten erfolgreich.

> beim uip hatte ich das so und das funktionierte einwandfrei

uIP ist aber nicht lwIP. Diese Info ist nutzlos.

von conny (Gast)


Angehängte Dateien:

Lesenswert?

ich wollte gern wenn ich ein butto drücke die lef1 geht an das mir das 
auchbobtisch auf der Webseite durch ein kleines Bild angezeigt wird.

green.GIF  led an
red.GIF. led aus
ich habe circa 12leds.

im Anhang ein Beispiel mit 2leds.

ich bekomme das nicht umgesetzt.
deshalb Frage ich ja hier auch.

kann mir denn jemand helfen

das ist aus einem Altären lwip Beispiel läuft aber nicht mit dem 
lwip1.4.0

geht das denn mit dem aktuellen lwipp

ich bitte um Hilfe.
1
static char *LED_GREEN_CGIHandler( int iIndex, int iNumParams, char *pcParam[], char *pcValue[] )
2
{
3
    int  index;
4
    index = FindCGIParameter ( "green", pcParam, iNumParams );
5
    if(index != -1)
6
    {  
7
      
8
       clear_response_bufer(data_response_buf);      //清除缓冲区的内容
9
       LED1 = !LED1;
10
       if(!LED1)
11
       {
12
          strcat((char *)(data_response_buf),"/img/green.gif");
13
       }
14
     else
15
     {
16
          strcat((char *)(data_response_buf),"/img/black.gif");
17
       }
18
        
19
    }
20
    return RESPONSE_PAGE_SET_CGI_RSP_URL;
21
}

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

also wenn ich das so sehe löschst du zuerst den Puffer für die Antwort 
und fügst dann abhängig vom Zustand der LED die URL zum Bild ein. Was 
landet denn sonst noch in dem Puffer? Mit der URL allein in der Antwort 
brauchst du dich nicht zu wundern das du nichts siehst, da gehört ja 
wohl noch etwas HTML drumherum.

Sascha

von conny (Gast)


Lesenswert?

Sascha W. schrieb:
> Hallo,
>
> also wenn ich das so sehe löschst du zuerst den Puffer für die Antwort
> und fügst dann abhängig vom Zustand der LED die URL zum Bild ein. Was
> landet denn sonst noch in dem Puffer? Mit der URL allein in der Antwort
> brauchst du dich nicht zu wundern das du nichts siehst, da gehört ja
> wohl noch etwas HTML drumherum.
>
> Sascha

Ich hatte doch geschrieben das das ein altes Beispiel war was auch 
funktioniert hat!!.

Mit den Beispielen lwip1.4.0 weis ich nicht wie ich das hingenommen das 
mir das GIF angezeigt wird.


wie kann ich das auf diese Beispiel.hier unten umsetzen.
1
#include "lwip/debug.h"
2
#include "httpd.h"
3
#include "lwip/tcp.h"
4
#include "fs.h"
5
#include "main.h"
6
7
#include <string.h>
8
#include <stdlib.h>
9
10
tSSIHandler ADC_Page_SSI_Handler;
11
uint32_t ADC_not_configured=1;
12
13
/* we will use character "t" as tag for CGI */
14
char const* TAGCHAR="t";
15
char const* TAGCHAR2="u";
16
char const** TAGS= { &TAGCHAR, &TAGCHAR2 };
17
18
/* CGI handler for LED control */ 
19
const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[]);
20
21
/* Html request for "/leds.cgi" will start LEDS_CGI_Handler */
22
const tCGI LEDS_CGI={"/leds.cgi", LEDS_CGI_Handler};
23
24
/* Cgi call table, only one CGI used */
25
tCGI CGI_TAB[1];
26
27
28
/**
29
  * @brief  Configures the ADC.
30
  * @param  None
31
  * @retval None
32
  */
33
static void ADC_Configuration(void)
34
{
35
  ADC_InitTypeDef ADC_InitStructure;
36
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
37
  GPIO_InitTypeDef GPIO_InitStructure;
38
39
  /* Enable ADC3 clock */
40
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
41
42
  /* Configure ADC Channel 12 as analog input */
43
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
44
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
45
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
46
  GPIO_Init(GPIOC, &GPIO_InitStructure);
47
48
  /* ADC Common Init */
49
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
50
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div6;
51
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
52
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; 
53
  ADC_CommonInit(&ADC_CommonInitStructure); 
54
55
  /* ADC3 Configuration ------------------------------------------------------*/
56
  ADC_StructInit(&ADC_InitStructure);
57
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
58
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
59
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
60
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; 
61
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
62
  ADC_InitStructure.ADC_NbrOfConversion = 1;
63
  ADC_Init(ADC3, &ADC_InitStructure);
64
65
  /* ADC3 Regular Channel Config */
66
  ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 1, ADC_SampleTime_56Cycles);
67
68
  /* Enable ADC3 */
69
  ADC_Cmd(ADC3, ENABLE);
70
71
  /* ADC3 regular Software Start Conv */ 
72
  ADC_SoftwareStartConv(ADC3);
73
}
74
75
/**
76
  * @brief  ADC_Handler : SSI handler for ADC page 
77
  */
78
u16_t ADC_Handler(int iIndex, char *pcInsert, int iInsertLen)
79
{
80
  /* We have only one SSI handler iIndex = 0 */
81
  if (iIndex ==0)
82
  {  
83
    char Digit1=0, Digit2=0, Digit3=0, Digit4=0; 
84
    uint32_t ADCVal = 0;        
85
86
     /* configure ADC if not yet configured */
87
     if (ADC_not_configured ==1)       
88
     {
89
        ADC_Configuration();
90
        ADC_not_configured=0;
91
     }
92
     
93
     /* get ADC conversion value */
94
     ADCVal = ADC_GetConversionValue(ADC3);
95
     
96
     /* convert to Voltage,  step = 0.8 mV */
97
     ADCVal = (uint32_t)(ADCVal * 0.8);  
98
     
99
     /* get digits to display */
100
     
101
     Digit1= ADCVal/1000;
102
     Digit2= (ADCVal-(Digit1*1000))/100 ;
103
     Digit3= (ADCVal-((Digit1*1000)+(Digit2*100)))/10;
104
     Digit4= ADCVal -((Digit1*1000)+(Digit2*100)+ (Digit3*10));
105
        
106
     /* prepare data to be inserted in html */
107
     *pcInsert       = (char)(Digit1+0x30);
108
     *(pcInsert + 1) = (char)(Digit2+0x30);
109
     *(pcInsert + 2) = (char)(Digit3+0x30);
110
     *(pcInsert + 3) = (char)(Digit4+0x30);
111
    
112
    /* 4 characters need to be inserted in html*/
113
    return 4;
114
  } else if (iIndex == 1) { // Test tag "u" value
115
      /* prepare data to be inserted in html */
116
       *pcInsert       = (char)('1');
117
       *(pcInsert + 1) = (char)('2');
118
       *(pcInsert + 2) = (char)('3');
119
       *(pcInsert + 3) = (char)('4');
120
121
      /* 4 characters need to be inserted in html*/
122
      return 4;
123
  }
124
  return 0;
125
}
126
127
/**
128
  * @brief  CGI handler for LEDs control 
129
  */
130
const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
131
{
132
  uint32_t i=0;
133
  
134
  /* We have only one SSI handler iIndex = 0 */
135
  if (iIndex==0)
136
  {
137
    /* All leds off */
138
    STM_EVAL_LEDOff(LED5);
139
    STM_EVAL_LEDOff(LED6);
140
    STM_EVAL_LEDOff(LED3);
141
    STM_EVAL_LEDOff(LED4);
142
    
143
    /* Check cgi parameter : example GET /leds.cgi?led=2&led=4 */
144
    for (i=0; i<iNumParams; i++)
145
    {
146
      /* check parameter "led" */
147
      if (strcmp(pcParam[i] , "led")==0)   
148
      {
149
        /* switch led1 ON if 1 */
150
        if(strcmp(pcValue[i], "1") ==0) 
151
          STM_EVAL_LEDOn(LED3);
152
          
153
        /* switch led2 ON if 2 */
154
        else if(strcmp(pcValue[i], "2") ==0) 
155
          STM_EVAL_LEDOn(LED5);
156
        
157
        /* switch led3 ON if 3 */
158
        else if(strcmp(pcValue[i], "3") ==0) 
159
          STM_EVAL_LEDOn(LED6);
160
        
161
        /* switch led4 ON if 4 */
162
        else if(strcmp(pcValue[i], "4") ==0) 
163
          STM_EVAL_LEDOn(LED4);
164
      }
165
    }
166
  }
167
  /* uri to send after cgi call*/
168
  return "/STM32F4x7LED.html";  
169
}
170
171
/**
172
 * Initialize SSI handlers
173
 */
174
void httpd_ssi_init(void)
175
{  
176
  /* configure SSI handlers (ADC page SSI) */
177
  http_set_ssi_handler(ADC_Handler, (char const **)TAGS, 2);
178
}
179
180
/**
181
 * Initialize CGI handlers
182
 */
183
void httpd_cgi_init(void)
184
{ 
185
  /* configure CGI handlers (LEDs control CGI) */
186
  CGI_TAB[0] = LEDS_CGI;
187
  http_set_cgi_handlers(CGI_TAB, 1);
188
}
189
190
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

von Daniel A. (daniel-a)


Angehängte Dateien:

Lesenswert?

Ich verwende lwip zwar nicht, ich gehe mal davon aus, das das der 
dazugehörige header ist?:

https://github.com/goertzenator/lwip/blob/master/contrib-1.4.0/apps/httpserver_raw/httpd.h

Nun zu dem, was bei den Headern und deinem Beispiel nicht zusammenpasst, 
angenommen ich habe den richtigen Header gefunden:

Im header steht:
1
void httpd_init(void);

Natürlich ohne Kommentar. Entweder die Funktion ist irgendwo Definiert, 
und ich sehe das nicht, oder du musst httpd_ssi_init und httpd_cgi_init 
in eine Funktion httpd_init packen. Die Arrays sind werden auch zu 
kompliziert befüllt, gibt denn der Compiler bei
1
char const** TAGS= { &TAGCHAR, &TAGCHAR2 };
Keinen fehler aus?

Und dann passt die Index Datei natürlich nicht-mehr mit der neuen 
zusammen, und die API ist zur alten wohl auch inkompatibel, und auch 
nicht besonders gut...

Versuche mal die Dateien im Anhang, die ich mir ausgedacht habe (alles 
ungetestet). Unter /leds.cgi?led=1 müsste LED3 eingeschalten werden. 
Unter / müsste "Led: Aus" angezeigt werden. Wenn das geht, sehen wir 
weiter, ansonsten die Fehlermeldungen posten, ich übersehe immer 
irgendwas...

Edit:
Grad noch etwas bemerkt, in der von mir Hochgeladenen Datei die Zeilen:
1
      ssi_handler_ ## NAME(pcInsert,iInsertLen); \
2
    break;
ersetzen durch:
1
      return ssi_handler_ ## NAME(pcInsert,iInsertLen);

: Bearbeitet durch User
von conny (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habs genauso gemacht,
aber es wird auf der seite garnichts angezeigt.
Arbeitet denn wirklich keiner mit dem LWIP.
gibt es denn kein beispiel wo eine led eingeschaltet wird und das 
obtisch auf der seite Dargestellt wird.

von conny (Gast)


Lesenswert?

Nutzt denn hier wirklich keiner den Lwip als Webserver?

Im Netz finde ich kein einziges Beispiel für den Status der Led die mir 
auf der Webseite angezeigt wird.

Ich wollte das mir der Status der Led auf der Webseite angezeigt wird, 
leider finde ich kein Beispiel wo ich mich ei bischen einarbeiten kann.

von temp (Gast)


Lesenswert?

conny schrieb:
> Nutzt denn hier wirklich keiner den Lwip als Webserver?

Zum Fehlersuchen gibts Debugger. Wo klemmt's denn genau? Wenn du von dem 
gesamten Code nichts verstehst inclusive dem html und Browserteil, wird 
das wohl die falsche Spielwiese für dich sein. Erwarte hier bitte keine 
Grundlagenschulung.

von conny (Gast)


Lesenswert?

temp schrieb:
> conny schrieb:
>> Nutzt denn hier wirklich keiner den Lwip als Webserver?
>
> Zum Fehlersuchen gibts Debugger. Wo klemmt's denn genau? Wenn du von dem
> gesamten Code nichts verstehst inclusive dem html und Browserteil, wird
> das wohl die falsche Spielwiese für dich sein. Erwarte hier bitte keine
> Grundlagenschulung.

Das erwarte ich auch gar nicht.
Mir Fehlt nur der Ansatz wie ich das im Browser angezeigt bekomme das 
zB. led1 ist an , Led2 ist aus.

von Marco H. (damarco)


Lesenswert?

Auf dem Client muss ein Javascript laufen das per HttpRequest z.Bsp 
alle 1sec das led.cgi anfordert.

Vom Webserver wird durch den CGI Handler die entsprechende Funktion 
aufgerufen die den Request generiert und dann zum Client sendet. Die 
Daten werden im Header als Json String verpackt.

Diesen Request kann man über das Json ganz einfach am Client per 
Javascript auswerten und prüfen. Weitere Javascript Code zeigt dann das 
entsprechende Bild.

Ein Patentrezept kann dir niemand so wirklich liefern du musst dich 
einfach mit den Dingen beschäftigen.

von Daniel A. (daniel-a)


Lesenswert?

conny schrieb:
> Mir Fehlt nur der Ansatz wie ich das im Browser angezeigt bekomme das
> zB. led1 ist an , Led2 ist aus.

Ich kann dir da nicht gross weiterhelfen, aber ich würde mich im moment 
noch nicht so auf die LEDs fokussieren. Wichtig ist im moment, dass du 
in einer Funktion einen beliebigen Text ausgeben können musst. Ohne das 
ist es nicht möglich, aber sobald dir das gelingt ist der Rest eine 
Kleinigkeit.

von Marco H. (damarco)


Lesenswert?

Anders gesagt das hier produzierst:
1
ADCStatusCallback({"ain":[{"v":"4095"}, {"v":"4092"}, {"v":"1620"}, {"v":"4000"}], "aout":[{"v":"100"}, {"v":"200"}]});

Das ist ein Json String in dem sich Werte für 4 Analog In und 2 Outs 
befinden. Dieser wird von der aufgerufen CGI Funktion per String 
Funktionen zusammengebastelt.

Wie das zu deuten ist steht hier http://www.json.org/json-de.html

http://openbook.rheinwerk-verlag.de/javascript_ajax/

Per JavaSrcipt kann man auf diesen String dann sehr einfach zugreifen 
und somit auch Bedingungen prüfen.

Das Problem an der Sache ist ja im Allgemeinen das du die Seite neu 
laden musst, immer immer wieder. Das würde aber auch Trafic erzeugen. 
Es würden immer wieder erneut Inhalte übertragen die sich gar nicht 
geändert haben.

Ohne JavaScript geht es kaum, es sei denn du drückst immer auf den 
Realod Button ;)


HttpRequest ist eine Methode die es erlaubt solche anfragen im 
Hintergrund laufen zu lassen. Kommt die Antwort vom Server löst diese 
ein Event aus und der Request lässt sich auswerten.

Per timeout wird der HttpRequest immer wieder vom Browser ausgelöst und 
somit die Daten aktualisiert.

Das schlaue daran ist das man nur das Anfordert was sich verändert also 
hier die ADC Werte.  Per JavaScript wird dann die Webseite dynamisch 
verändert.

Diese Grundlagen findest du in den links... Oder das Buch kaufen ;)

von Stefan F. (Gast)


Lesenswert?

Hatten wir das Thema nicht vor kurzen - allerdings mit µIP?
Ist das jetzt das selbe Projekt nur mit anderem Framework?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Hatte ja zuallererst schon eine Lösung vorgeschlagen die erstmal das 
Einfachste vom einfachsten wäre.
Bei seinem CGI Handler je nach LED Status ersteinmal eine andere html 
Seite zurückgeben. Auch Relaod der Seite im 1s Takt geht mit HTML4.
Aber er war ja zu stur das erstmal zu testen.
Wenn das funzt kann man das verfeinern u nicht immer alles nachladen zu 
müssen.

AJAX mit JSOn kam auch schon auf, der Fred dreht sich hier lagsam im 
Kreis ;)
Der TE will keine Vorschläge oder verstehen was er macht, sondern 
Lösungen auf dem Silbertablett.

von conny (Gast)


Lesenswert?

Marco H. schrieb:
> Auf dem Client muss ein Javascript laufen das per HttpRequest
> z.Bsp  alle 1sec das led.cgi anfordert.
> Vom Webserver wird durch den CGI Handler die entsprechende Funktion
> aufgerufen die den Request generiert und dann zum Client sendet. Die
> Daten werden im Header als Json String verpackt.
> Diesen Request kann man über das Json ganz einfach am Client per
> Javascript auswerten und prüfen. Weitere Javascript Code zeigt dann das
> entsprechende Bild.
> Ein Patentrezept kann dir niemand so wirklich liefern du musst dich
> einfach mit den Dingen beschäftigen.

Ich finde aber nirgents ein Beispiel wie das gemacht wird.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Das passende Beispiel ist bereits der Code aus dem Eingangspost.
Kannst ja 2 verschiedene Dateien zurückgeben in denne einfach ein 
passender (kurzer) JSON String steht.
Danach gucken wie dieser Handler statt html Dateien villeicht direkt 
Strings zurückgeben kann.

AJAX Requests gehen hiermit:
http://prototypejs.org/learn/introduction-to-ajax.html
http://prototypejs.org/learn/json.html
oder hiermit:
http://api.jquery.com/

von conny (Gast)


Lesenswert?

Ich hab das nun versucht,aber bekomme das nun nicht zum laufen.

Schade das es solch ein Beispiel für den Lwip nicht gibt.

Beim UIP ist das äusserst einfach, und läuft auch sofort.

Alle sagen so und so musst du das machen aber nirgents gibs ein Beispiel 
wo Mann sich das anschauen kann wie es gemacht wird.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Was ist denn jetzt bitteschön so schwer daran den Returnwert des CGI 
Handlers zu ändern ?!?!
1
  /* uri to send after cgi call*/
2
  return "/STM32F4x7LED.html";

von Markus F. (mfro)


Lesenswert?

conny schrieb:
> Alle sagen so und so musst du das machen aber nirgents gibs ein Beispiel
> wo Mann sich das anschauen kann wie es gemacht wird.

Jammer, jammer.

Also dann mal im Klartext: wenn Du zu blöde (oder zu faul) bist, bei den 
heutigen Möglichkeiten (Google & Co) mit den hier gelieferten Hinweisen 
und Stichworten wenigstens irgendwas auf die Reihe zu bekommen (das man 
dann auch gerne hier diskutieren und gemeinsam verbessern könnte, weil 
eben immer noch kein Meister vom Himmel gefallen ist), solltest Du dich 
vielleicht einfach damit abfinden, daß es Dinge gibt, die über deinen 
intellektuellen Horizont gehen.

So leid's mir tut. Punkt.

von Stefan F. (Gast)


Lesenswert?

> Beim UIP ist das äusserst einfach, und läuft auch sofort.

Dass stimmt doch gar nicht! In Zusammenhang mit µIP hatten wir auch 
schon eine endlose Diskussion die ohne Erfolg endete.

von conny (Gast)


Lesenswert?

Markus F. schrieb:
> Jammer, jammer.
>
> Also dann mal im Klartext: wenn Du zu blöde (oder zu faul) bist, bei den
> heutigen Möglichkeiten (Google & Co) mit den hier gelieferten Hinweisen
> und Stichworten wenigstens irgendwas auf die Reihe zu bekommen (das man
> dann auch gerne hier diskutieren und gemeinsam verbessern könnte, weil
> eben immer noch kein Meister vom Himmel gefallen ist), solltest Du dich
> vielleicht einfach damit abfinden, daß es Dinge gibt, die über deinen
> intellektuellen Horizont gehen.
>
> So leid's mir tut. Punkt.

Ich habe Höflich gefragt!!

Dann zeigen sie mir doch ein Beispiel bei Google WENN SIE SO ALL WISSEND 
SIND

von temp (Gast)


Lesenswert?

conny schrieb:
> Dann zeigen sie mir doch ein Beispiel bei Google WENN SIE SO ALL WISSEND
> SIND

lieber conny, so kommst du nicht ans Ziel. Was du willst ist nicht ein 
Beispiel sondern die Lösung. Und du hast keine Ahnung von html. Deshalb 
ist der Rat von oben richtig. Zieh dir erst mal ein paar Grundlagen zu 
html und/oder ajax und javascript rein, dann kann man weiter reden. Wenn 
dann der Groschen gefallen ist wie das funtioniert, dann wirst du merken 
dass es zwischen uIp und lwip in dieser Beziehung keinen Unterschied 
gibt. Hast du schon jemals mit einen Webserver auf dem PC gespielt? 
Damit lernt man die Grundlagen und danach geht es auf die embedded 
Hardware.

von Stefan F. (Gast)


Lesenswert?

Ja, du hast höflich gefragt, zweifellos.

Ich kenne kein Beispiel und erwarte nicht, ein mit Google zu finden. Das 
ist eben ein spezielle Thema, mit dem sich nur wenige Menschen 
beschäftigen.

Im Internet findest du hauptsächlich Webseiten, die durch Werbung 
finanziert werden oder wo Produkte/Dienste verkauft werden.

Diese Library ist kostenlos und so speziell, dass man mit Werbung auf 
einer entsprechenden Webseite praktisch kein Geld verdienen kann. Also 
hat niemand Interesse, großartige Infos dazu zu veröffentlichen. Außer 
vielleicht der Autor selbst.

Also bleibt Dir nichts anderes übrig, als Dir die Informationen und 
Beispielprogramm von Adam Dunkels anzuschauen. Viel mehr kostenlose 
Infos wird es dazu nicht geben.

Manche Leute haben sich Monatelang damit beschäftigt (so wie ich mit 
µIP). Die meisten davon aber beruflich, also mit dem Ziel, ihr KnowHow 
zu verkaufen.

Ich bin einer der ganz wenigen, die zu µIP eine Beispiel-Anwendung 
veröffentlicht haben. Insgesamt wirst du mit Sicherheit höchstens die 
Quelltexte von 10 sinnvollen vollständige Anwendungen im Internet 
finden. Davon wiederum dürften nur wenige umfangreich dokumentiert sein.

Und bei LwIp ist es noch schwieriger, weil LwIp ein paar Jahr jünger ist 
und auf noch weniger Mikrocontrollern lauffähig ist.

von Marco H. (damarco)


Lesenswert?

Die stehen in den Links die ich dir gesendet habe oder kaufe dir das 
Buch! Es dauert eben bis du die zusammenhänge verstehst. So ist das nun 
einmal..

Die Lösung des Problems ist technisch völlig unabhängig vom Webserver. 
Du hast zwei Baustellen Client und Server, das auch noch mit zwei 
Unterschiedlichen Programmiersprachen. JavaScript ist aber gar nicht so 
schwer und in dem Buch wirst du an die Dinge langsam heran geführt die 
du genau hierfür brauchst.

von Stefan F. (Gast)


Lesenswert?

Ich habe ihm auch schon jede Menge Links gegeben - in dem älteren Thread 
wo er es noch mit µIP versuchen wollte.

> Die Lösung des Problems ist technisch völlig unabhängig vom Webserver.

Ja genau, sehe ich auch so. Ich hatte ihm damals auch schon 
vorgeschlagen, erstmal mit einem Webserver auf dem PC (z.B. Apache mit 
PHP) zu üben.

von Forist (Gast)


Lesenswert?

conny schrieb:
> ... das obtisch ...

Tip: Wenn du suchst verwende den Begriff "optisch". Das dürfte deine 
Chancen steigern, auch wenn Google gegen Rechtschreibmüll ziemlich 
tolerant ist.

von conny (Gast)


Lesenswert?

bei mir läuft der uip webserver wunderbar,
ich Regel damit die Helligkeit der Lampen über rfm12b , die IP vom 
Webserver kann ich alles über den Webbrowser einstellen das geht 
wunderbar.

Aber beim lwip komme ich nicht weiter , ich kann die LEDs ein und 
Ausschalten aber optisch auf der Webseite angezeigt bekomme ich das 
nicht hin.

Ich suche keine Vollwertige Lösung sondern ein Beispiel wo ich das 
selber Stück für Stück probieren kann.

von conny (Gast)


Angehängte Dateien:

Lesenswert?

Wie setzt man nun den Aufruf von dem Script um , das bekomme ich nicht 
hin.
Ein Ansatz finde ich auch nirgendwo.

1
const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
2
{
3
  uint32_t i=0;
4
  
5
  /* We have only one SSI handler iIndex = 0 */
6
  if (iIndex==0)
7
  {
8
    /* All leds off */
9
    STM_EVAL_LEDOff(LED5);
10
    STM_EVAL_LEDOff(LED6);
11
    STM_EVAL_LEDOff(LED3);
12
    STM_EVAL_LEDOff(LED4);
13
    
14
    /* Check cgi parameter : example GET /leds.cgi?led=2&led=4 */
15
    for (i=0; i<iNumParams; i++)
16
    {
17
      /* check parameter "led" */
18
      if (strcmp(pcParam[i] , "led")==0)   
19
      {
20
        /* switch led1 ON if 1 */
21
        if(strcmp(pcValue[i], "1") ==0) 
22
          STM_EVAL_LEDOn(LED3);
23
          
24
        /* switch led2 ON if 2 */
25
        else if(strcmp(pcValue[i], "2") ==0) 
26
          STM_EVAL_LEDOn(LED5);
27
        
28
        /* switch led3 ON if 3 */
29
        else if(strcmp(pcValue[i], "3") ==0) 
30
          STM_EVAL_LEDOn(LED6);
31
        
32
        /* switch led4 ON if 4 */
33
        else if(strcmp(pcValue[i], "4") ==0) 
34
          STM_EVAL_LEDOn(LED4);
35
      }
36
    }
37
  }
38
  /* uri to send after cgi call*/
39
  return "/STM32F4x7LED.html";  
40
}

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Mal ne ernst gemeinte Frage: Blind?
Habe dazu jetzt schon mehrfach was geschrieben.

von Markus F. (mfro)


Lesenswert?

Es MUSS doch in diesem Riesen-Internet irgendwo einen geben, der mir 
das selber Denken abnimmt. Stampf.

von conny (Gast)


Lesenswert?

Mw E. schrieb:
> Was ist denn jetzt bitteschön so schwer daran den Returnwert des
> CGI
> Handlers zu ändern ?!?!
>   /* uri to send after cgi call*/
>   return "/STM32F4x7LED.html";

Das ist doch völlig sinfrei jedesmal eine mal eine
komplette seite neu laden.

Mw E. schrieb:
> Mal ne ernst gemeinte Frage: Blind?
> Habe dazu jetzt schon mehrfach was geschrieben.

Ich frage höflich aber irgendwie reden wir hier aneinander vorbei.

ich Fragte wie das geht wenn die Led an ist soll das optisch dargestellt 
werden.

von conny (Gast)


Lesenswert?

Markus F. schrieb:
> Es MUSS doch in diesem Riesen-Internet irgendwo einen geben, der
> mir
> das selber Denken abnimmt. Stampf.

 NULL KONSTRUKTIV !!!!

von conny (Gast)


Lesenswert?

Dies ist aus einem Beispiel von Alientek das läuft aber nicht zusammen 
mit dem Beispiel von ST
1
static char *LED_GREEN_CGIHandler( int iIndex, int iNumParams, char *pcParam[], char *pcValue[] )
2
{
3
    int  index;
4
    index = FindCGIParameter ( "green", pcParam, iNumParams );
5
    if(index != -1)
6
    {
7
      // num++;
8
       //snprintf((char *)(data_response_buf),4,"%d",num);
9
      // printf("data_response_buf:%s\r\n",data_response_buf);
10
       //printf("green:%s\r\n",pcValue[index]);  
11
      
12
       clear_response_bufer(data_response_buf);      //Çå³ý»º³åÇøµÄÄÚÈÝ
13
       LED1 = !LED1;
14
       if(!LED1){
15
          strcat((char *)(data_response_buf),"/img/green.gif");
16
       }else{
17
          strcat((char *)(data_response_buf),"/img/black.gif");
18
       }
19
        
20
    }
21
    return RESPONSE_PAGE_SET_CGI_RSP_URL;
22
}

1
//example von st
2
const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
3
{
4
  uint32_t i=0;
5
  
6
  /* We have only one SSI handler iIndex = 0 */
7
  if (iIndex==0)
8
  {
9
    /* All leds off */
10
    STM_EVAL_LEDOff(LED5);
11
    STM_EVAL_LEDOff(LED6);
12
    STM_EVAL_LEDOff(LED3);
13
    STM_EVAL_LEDOff(LED4);
14
    
15
    /* Check cgi parameter : example GET /leds.cgi?led=2&led=4 */
16
    for (i=0; i<iNumParams; i++)
17
    {
18
      /* check parameter "led" */
19
      if (strcmp(pcParam[i] , "led")==0)   
20
      {
21
        /* switch led1 ON if 1 */
22
        if(strcmp(pcValue[i], "1") ==0) 
23
          STM_EVAL_LEDOn(LED3);
24
          
25
        /* switch led2 ON if 2 */
26
        else if(strcmp(pcValue[i], "2") ==0) 
27
          STM_EVAL_LEDOn(LED5);
28
        
29
        /* switch led3 ON if 3 */
30
        else if(strcmp(pcValue[i], "3") ==0) 
31
          STM_EVAL_LEDOn(LED6);
32
        
33
        /* switch led4 ON if 4 */
34
        else if(strcmp(pcValue[i], "4") ==0) 
35
          STM_EVAL_LEDOn(LED4);
36
      }
37
    }
38
  }
39
  /* uri to send after cgi call*/
40
  return "/STM32F4x7LED.html";  
41
}

von Marco H. (damarco)


Lesenswert?

Also ich habe mir mal deine index.html angeschaut, genauer das 
Javascript.

Grundsätzlich ist die Richtung schon gar nicht mal verkehrt und ist 
nicht auf deinen Mist gewachsen, es sei denn die Chinesischen Kommentare 
sind von dir?
1
function update(){
2
   loadXMLDoc("/orther.cgi?t="+ Math.random(),function()
3
  {
4
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
5
    {
6
    text = xmlhttp.responseText;
7
    text = text.split(";");
8
    document.getElementById("temperature").innerHTML=text[0]+"锟斤拷";
9
    document.getElementById("time").innerHTML=text[1];
10
11
    }
12
  });
13
14
}

Die update Funktion sieht so aus,  Das Element "temperature" bzw. "time" 
gibt es in deinen Dokument nicht wie soll das per DOM erreicht werden ?
Das einschalten funktioniert weil der Eventhandler die Funktion function 
led0() bzw led1() ausführt beim klicken.
Du müsstest per DOM src="/img/green.gif" tauschen. Keine schöne Lösung 
aber dürfte funktionieren.

Für mich schaut die Sache so aus "ich habe mal was geändert und keine 
Ahnung davon was es bewirkt.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Machs mit den JS Libs aus einem meiner Links.
AJAX auf Fußpilzebene ist nichts für Anfänger, da muss man schon genau 
wissen wie die Kommunikation im Hintergrund abläuft.
Und jemand, der nichtmal eine returnzeile ändern kann wird das eher 
nicht wissen.

conny schrieb:
> Dies ist aus einem Beispiel von Alientek das läuft aber nicht zusammen
> mit dem Beispiel von ST

NEIN! DOCH! OHHH!

von Marco H. (damarco)


Lesenswert?

Eigentlich ganz einfach. Er muss nur einen response generieren der 
src="/img/green.gif";src="/img/green.gif" zurück liefert.

und tauscht so oder so ähnlich den Code aus....
1
text = text.split(";");
2
    document.getElementById("red").innerHTML=text[0];
3
    document.getElementById("green").innerHTML=text[1];


Das Problem ist folgendes
1
function led0()
2
{
3
  loadXMLDoc("/led_red.cgi?red=1&t="+ Math.random(),function()
4
  {
5
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
6
    {
7
    document.getElementById("red").src=xmlhttp.responseText;
8
    }
9
  });
10
}

Das Problem nur durch das Klicken auf den Button wird diese Funktion 
ausgeführt. Es löst zwar die Funktion aus die zum Anschalten führt 
greift aber dann auf das HTTPRequest Objekt zu das möglicherweise schon 
ungültig ist.

Der Chinese hat es richtig gemacht, wenn sich der Status ändert prüfen 
ob es fertig ist und dann den Code ausführen.
1
Math.random()
 verstehe ich auch nicht so wirklich, es sei denn sie soll zufällig an 
oder aus gehen, dann sollte man aber das Random auch mit einen 
Wertebereich Eingrenzen.  Sonst kommt in 99,9% der fälle irgend etwas >1 
raus.

edit: möglicherweise werden damit IDs generiert so das der Server die 
Anfragen sortieren kann. Also von welchen Client sie kommen oder ob 
einer sehr schnell drauf klickt.

Ich bin kein völliger Javascript Experte "noch nicht ;)" aber ich musste 
mich auch zwangsläufig damit beschäftigen. Es hat auch gar nicht weh 
getan.

: Bearbeitet durch User
von conny (Gast)


Lesenswert?

Marco H. schrieb:
> Eigentlich ganz einfach. Er muss nur einen response generieren der
> src="/img/green.gif";src="/img/green.gif" zurück liefert.
>
> und tauscht so oder so ähnlich den Code aus....
> text = text.split(";");
>     document.getElementById("red").innerHTML=text[0];
>     document.getElementById("green").innerHTML=text[1];
>
> Das Problem ist folgendes
> function led0()
> {
>   loadXMLDoc("/led_red.cgi?red=1&t="+ Math.random(),function()
>   {
>     if (xmlhttp.readyState==4 && xmlhttp.status==200)
>     {
>     document.getElementById("red").src=xmlhttp.responseText;
>     }
>   });
> }
>
> Das Problem nur durch das Klicken auf den Button wird diese Funktion
> ausgeführt. Es löst zwar die Funktion aus die zum Anschalten führt
> greift aber dann auf das HTTPRequest Objekt zu das möglicherweise schon
> ungültig ist.
>
> Der Chinese hat es richtig gemacht, wenn sich der Status ändert prüfen
> ob es fertig ist und dann den Code ausführen.
> Math.random() verstehe ich auch nicht so wirklich, es sei denn sie soll
> zufällig an
> oder aus gehen, dann sollte man aber das Random auch mit einen
> Wertebereich Eingrenzen.  Sonst kommt in 99,9% der fälle irgend etwas >1
> raus.
>
> edit: möglicherweise werden damit IDs generiert so das der Server die
> Anfragen sortieren kann. Also von welchen Client sie kommen oder ob
> einer sehr schnell drauf klickt.
>
> Ich bin kein völliger Javascript Experte "noch nicht ;)" aber ich musste
> mich auch zwangsläufig damit beschäftigen. Es hat auch gar nicht weh
> getan.

Für mich ist das Problem wie ich das in umsetzen muss daran scheitere 
ich .




1
const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
2
{
3
  uint32_t i=0;
4
  
5
  /* We have only one SSI handler iIndex = 0 */
6
  if (iIndex==0)
7
  {
8
    /* All leds off 
9
    STM_EVAL_LEDOff(LED1);
10
    STM_EVAL_LEDOff(LED2);
11
    STM_EVAL_LEDOff(LED3);
12
    STM_EVAL_LEDOff(LED4);*/
13
    
14
    /* Check cgi parameter : example GET /leds.cgi?led=2&led=4 */
15
    for (i=0; i<iNumParams; i++)
16
    {
17
      /* check parameter "led" */
18
      if (strcmp(pcParam[i] , "led")==0)   
19
      {
20
        /* switch led1 ON if 1 */
21
        if(strcmp(pcValue[i], "1") ==0) 
22
        {          //STM_EVAL_LEDOn(LED1);
23
          //return snprintf( pcInsert, iInsertLen, "Led: %s", status ? "An" : "Aus" );
24
        }         
25
        /* switch led2 ON if 2 */
26
        else if(strcmp(pcValue[i], "2") ==0) 
27
        {          //STM_EVAL_LEDOn(LED1);
28
        }
29
        /* switch led3 ON if 3 */
30
        else if(strcmp(pcValue[i], "3") ==0) 
31
        {          LED3 = 1;;
32
        }
33
        /* switch led4 ON if 4 */
34
        else if(strcmp(pcValue[i], "4") ==0) 
35
        {          //STM_EVAL_LEDOn(LED1);
36
        }
37
      }
38
    }
39
  }
40
  /* uri to send after cgi call*/
41
  return "/STM32F4x7LED.html";  
42
}

von Marco H. (damarco)


Lesenswert?

Der Brüller ist das die Lösung auskommentiert wurde .
1
return snprintf( pcInsert, iInsertLen, "Led: %s", status ? "An" : "Aus" );

Das ist Vorlage wie man das zusammenbastelt. Eigentlich ist alles 
zusammen getragen worden um das Problem zu lösen.


In der Tat geht man hier davon aus den Request beim drücken auszulösen.

Das ist aber nicht schön. Ich würde ein eignendes cgi für das lesen des 
Status anhängen
1
if (strcmp(pcParam[i] , "led")==0){}
2
   else if(strcmp(pcParam[i] , "ledstatus")==0){}

und dieses cgi alle 1sec anfordern. So ändert sich das Bild auch wenn 
vom anderen Client der Status geändert wird oder beides kombinieren.

: Bearbeitet durch User
von conny (Gast)


Lesenswert?

Beim ADC Handler hab ich versucht das mir das bild angezeigt wird es 
wird mir nur 25 angezeigt.

Wie ich das nun umsetze das mir das bild auf der seite angezeigt das 
kann ichg nicht umsetzen ohne ihre Hilfe.
1
/**
2
  ******************************************************************************
3
  * @file    httpd_cg_ssi.c
4
  * @author  MCD Application Team
5
  * @version V1.1.0
6
  * @date    31-July-2013
7
  * @brief   Webserver SSI and CGI handlers
8
  ******************************************************************************
9
  * @attention
10
  *
11
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
12
  *
13
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
14
  * You may not use this file except in compliance with the License.
15
  * You may obtain a copy of the License at:
16
  *
17
  *        http://www.st.com/software_license_agreement_liberty_v2
18
  *
19
  * Unless required by applicable law or agreed to in writing, software 
20
  * distributed under the License is distributed on an "AS IS" BASIS, 
21
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22
  * See the License for the specific language governing permissions and
23
  * limitations under the License.
24
  *
25
  ******************************************************************************
26
  */
27
28
/* Includes ------------------------------------------------------------------*/
29
30
#include "stm32f10x.h"
31
#include "lwip/debug.h"
32
#include "httpd.h"
33
#include "lwip/tcp.h"
34
#include "fs.h"
35
///#include "main.h"
36
37
#include <stdio.h>
38
#include <string.h>
39
#include <stdlib.h>
40
41
u8 LED1 = 0;
42
u8 LED2 = 0;
43
u8 LED3 = 0;
44
u8 LED4 = 0;
45
46
tSSIHandler ADC_Page_SSI_Handler;
47
u32 ADC_not_configured=1;
48
49
/* we will use character "t" as tag for CGI */
50
char const* TAGCHAR="t";
51
char const** TAGS=&TAGCHAR;
52
53
/* CGI handler for LED control */ 
54
const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[]);
55
56
/* Html request for "/leds.cgi" will start LEDS_CGI_Handler */
57
const tCGI LEDS_CGI={"/leds.cgi", LEDS_CGI_Handler};
58
59
60
61
62
/* Cgi call table, only one CGI used */
63
tCGI CGI_TAB[1];
64
static char *LED_GREEN_CGIHandler( int iIndex, int iNumParams, char *pcParam[], char *pcValue[] );
65
66
void  clear_response_bufer(unsigned char *buffer){
67
  memset(buffer,0,strlen((const char*)buffer));
68
}
69
70
//*****************************************************************************
71
//
72
// This CGI handler is called whenever the web browser requests iocontrol.cgi.
73
//
74
//*****************************************************************************
75
static int FindCGIParameter(const char *pcToFind, char *pcParam[], int iNumParams)
76
{
77
    int iLoop;
78
79
    for(iLoop = 0; iLoop < iNumParams; iLoop++)
80
    {
81
        if(strcmp(pcToFind, pcParam[iLoop]) == 0)
82
        {
83
            return(iLoop);
84
        }
85
    }
86
87
    return(-1);
88
}
89
90
91
92
93
/**
94
  * @brief  Configures the ADC.
95
  * @param  None
96
  * @retval None
97
  */
98
static void ADC_Configuration(void)
99
{
100
101
}
102
103
/**
104
  * @brief  ADC_Handler : SSI handler for ADC page 
105
  */
106
u16_t ADC_Handler(int iIndex, char *pcInsert, int iInsertLen)
107
{
108
  uint32_t ADCVal = 0;
109
110
  
111
  /* We have only one SSI handler iIndex = 0 */
112
  if (iIndex ==0)
113
  {  
114
    //char Digit1=0, Digit2=0, Digit3=0, Digit4=0; 
115
   // uint32_t ADCVal = 0;        
116
117
     /* configure ADC if not yet configured */
118
     if (ADC_not_configured ==1)       
119
     {
120
        //ADC_Configuration();
121
        //ADC_not_configured=0;
122
     }
123
     
124
     /* get ADC conversion value */
125
     //ADCVal = ADC_GetConversionValue(ADC3);
126
     
127
     /* convert to Voltage,  step = 0.8 mV */
128
     ADCVal = (uint32_t)(ADCVal * 0.8);  
129
     
130
     /* get digits to display */
131
     
132
     //Digit1= ADCVal/1000;
133
     //Digit2= (ADCVal-(Digit1*1000))/100 ;
134
     //Digit3= (ADCVal-((Digit1*1000)+(Digit2*100)))/10;
135
     //Digit4= ADCVal -((Digit1*1000)+(Digit2*100)+ (Digit3*10));
136
        
137
     /* prepare data to be inserted in html */
138
     //*pcInsert       = (char)(Digit1+0x30);
139
     //*(pcInsert + 1) = (char)(Digit2+0x30);
140
     //*(pcInsert + 2) = (char)(Digit3+0x30);
141
     //*(pcInsert + 3) = (char)(Digit4+0x30);
142
sprintf((char *)pcInsert, 
143
      "%s ",  ( "<img   src=\"red.gif\" width=\"64\" height=\"64\" > <br> 25"));
144
      return strlen(pcInsert);
145
146
  }
147
  return 0;
148
}
149
150
/**
151
  * @brief  CGI handler for LEDs control 
152
  */
153
const char * LEDS_CGI_Handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
154
{
155
  uint32_t i=0;
156
  
157
  /* We have only one SSI handler iIndex = 0 */
158
  if (iIndex==0)
159
  {
160
    /* All leds off 
161
    STM_EVAL_LEDOff(LED1);
162
    STM_EVAL_LEDOff(LED2);
163
    STM_EVAL_LEDOff(LED3);
164
    STM_EVAL_LEDOff(LED4);*/
165
    
166
    /* Check cgi parameter : example GET /leds.cgi?led=2&led=4 */
167
    for (i=0; i<iNumParams; i++)
168
    {
169
      /* check parameter "led" */
170
      if (strcmp(pcParam[i] , "led")==0)   
171
      {
172
        /* switch led1 ON if 1 */
173
        if(strcmp(pcValue[i], "1") ==0) 
174
        {          //STM_EVAL_LEDOn(LED1);
175
          //return snprintf( pcInsert, iInsertLen, "Led: %s", status ? "An" : "Aus" );
176
        }         
177
        /* switch led2 ON if 2 */
178
        else if(strcmp(pcValue[i], "2") ==0) 
179
        {          //STM_EVAL_LEDOn(LED1);
180
        }
181
        /* switch led3 ON if 3 */
182
        else if(strcmp(pcValue[i], "3") ==0) 
183
        {          LED3 = 1;;
184
        }
185
        /* switch led4 ON if 4 */
186
        else if(strcmp(pcValue[i], "4") ==0) 
187
        {          //STM_EVAL_LEDOn(LED1);
188
        }
189
      }
190
    }
191
  }
192
  /* uri to send after cgi call*/
193
  return "/STM32F4x7LED.html";  
194
}
195
196
/*
197
static char *LED_GREEN_CGIHandler( int iIndex, int iNumParams, char *pcParam[], char *pcValue[] )
198
{
199
    int  index;
200
    index = FindCGIParameter ( "green", pcParam, iNumParams );
201
    if(index != -1)
202
    {
203
      // num++;
204
       //snprintf((char *)(data_response_buf),4,"%d",num);
205
      // printf("data_response_buf:%s\r\n",data_response_buf);
206
       //printf("green:%s\r\n",pcValue[index]);  
207
      
208
       clear_response_bufer(data_response_buf);      //Çå³ý»º³åÇøµÄÄÚÈÝ
209
       LED1 = !LED1;
210
       if(!LED1){
211
          strcat((char *)(data_response_buf),"/img/green.gif");
212
       }else{
213
          strcat((char *)(data_response_buf),"/img/black.gif");
214
       }
215
        
216
    }
217
    return RESPONSE_PAGE_SET_CGI_RSP_URL;
218
}
219
220
221
222
*/
223
/**
224
 * Initialize SSI handlers
225
 */
226
void httpd_ssi_init(void)
227
{  
228
  /* configure SSI handlers (ADC page SSI) */
229
  http_set_ssi_handler(ADC_Handler, (char const **)TAGS, 1);
230
}
231
232
/**
233
 * Initialize CGI handlers
234
 */
235
void httpd_cgi_init(void)
236
{ 
237
  /* configure CGI handlers (LEDs control CGI) */
238
  CGI_TAB[0] = LEDS_CGI;
239
  http_set_cgi_handlers(CGI_TAB, 1);
240
 }
241
242
243
244
245
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

@Marco H
das
1
return snprintf( pcInsert, iInsertLen, "Led: %s", status ? "An" : "Aus" );
Funktioniert nur im ADC_Handler, nur dieser kann Strings returnen wärend 
der LEDS_CGI_Handler nur Dateipfade aus fsdata .c/.h zurückgeben kann.

@conny
es wurde schon alles gesagt wie es geht.
Jezt bist du gefragt den Bio Prozessor zwischen den Ohren einzusetzen.
Zudem unterlass es doch mal bitte imemr so riesen Codeblöcke zu pasten, 
dafür gibts den Dateianhang.
Mein Mausrad brennt bald, vor allem ist es fast immer derselbe Code...

von Marco H. (damarco)


Lesenswert?

Nun so weit habe ich den Code nicht untersucht ;) Aber das könnte man ja 
ändern bzw. verbessern.

von conny (Gast)


Lesenswert?

Mw E. schrieb:
> @Marco H
> dasreturn snprintf( pcInsert, iInsertLen, "Led: %s", status ? "An" :
> "Aus" );Funktioniert nur im ADC_Handler, nur dieser kann Strings
> returnen wärend
> der LEDS_CGI_Handler nur Dateipfade aus fsdata .c/.h zurückgeben kann.
>


> @conny
> es wurde schon alles gesagt wie es geht.
> Jezt bist du gefragt den Bio Prozessor zwischen den Ohren einzusetzen.
> Zudem unterlass es doch mal bitte imemr so riesen Codeblöcke zu pasten,
> dafür gibts den Dateianhang.
> Mein Mausrad brennt bald, vor allem ist es fast immer derselbe Code...

Ja aber ich bekomme das nicht umgesetzt das mein Problem deshalb frage 
ich ja hie rauch

von hust (Gast)


Lesenswert?

beim ADC hast es ja gemacht ...
1
sprintf((char *)pcInsert, 
2
      "%s ",  ( "<img   src=\"red.gif\" width=\"64\" height=\"64\" > <br> 25"));
3
      return strlen(pcInsert);


warum sendest du bei der anderen seite immer den selben rotz?
da KANN sich nichts auf der seite ändern ..
1
  return "/STM32F4x7LED.html";

das war die erste aussage oben ...
der RETURN wert muss sich ändern.


dann wird zwar die seite neu geladen und so .. aber es ändert sich was 
auf der seite.
schön ist anders und genial ist das nicht...

von Daniel A. (daniel-a)


Lesenswert?

Mw E. schrieb:
> @conny
> es wurde schon alles gesagt wie es geht.
> Jezt bist du gefragt den Bio Prozessor zwischen den Ohren einzusetzen.

Wir wissen aber noch nicht genau, ob die Dateien oder der Text überhaupt 
ausgegeben werden, oder ob er noch ein weiteres Problem hat. Ich habe 
Ihn deshalb weiter oben gefragt, ob irgendetwas angezeigt wird aber die 
Antwort von ihm darauf war nicht ganz eindeutig, ich weiss weiterhin 
nicht sicher, ob er nur das Bild nicht angezeigt bekommt, oder ob die 
Seite die den image Tag enthält nicht ankommt...

@conny
Kannst du auf der Seite mal Nachsehen z.B. mit "firefox->rechte 
Maustaste->view page source", ob unter der jeweiligen URL der erwartete 
Code ausgegeben wird?

von Stefan F. (Gast)


Lesenswert?

>> loadXMLDoc("/led_red.cgi?red=1&t="+ Math.random(),function()

> Math.random() verstehe ich auch nicht so wirklich

Durch das Anhängen einer Zufallszahl an einen Dateinamen umgeht man den 
eventuell unerwünschten Cache des Web Browsers.

von conny (Gast)


Lesenswert?

.
hust schrieb:
> beim ADC hast es ja gemacht ... sprintf((char *)pcInsert,
>       "%s ",  ( "<img   src=\"red.gif\" width=\"64\" height=\"64\" >
> <br> 25"));
>       return strlen(pcInsert);
>
> warum sendest du bei der anderen seite immer den selben rotz? da KANN
> sich nichts auf der seite ändern ..   return "/STM32F4x7LED.html";
>
> das war die erste aussage oben ... der RETURN wert muss sich ändern.
>
> dann wird zwar die seite neu geladen und so .. aber es ändert sich was
> auf der seite. schön ist anders und genial ist das nicht...

Bei mir wird nur die 25 Ausgegeben und kein Bild.

Ich kann ja nicht für jede Led eine neue Seite Ausgeben wenn sich der 
Status ändert das ist ja völlig daneben

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

conny schrieb:
> Ich kann ja nicht für jede Led eine neue Seite Ausgeben wenn sich der
> Status ändert das ist ja völlig daneben

Mach es jetzt einfach!
Schöne Lösungen können nach "es funktioniert nun erstmal" angegangen 
werden.

Ist schon interessant wie durch Lösungen abwinken und sonst nichts tun 
es innerhalb von 43 Tagen zu keiner Lösung kommt.
Diese verbohrtheit ist echt rekordverdächtig.

von conny (Gast)


Lesenswert?

Wie gesagt ich nutze das Beispiel von ST den LWIP Webserver ,

Nun wollte ich gerne wenn sich der status der vier LEDs ändert mir 
optisch auf der Seite angezeigt wird.

Mein Problem ist wie ich das umsetzen damits mit dem Beispiel von ST 
funktioniert
Beitrag "Re: LWIP Webserver"

Wie der Red und Green LED Handler geändert werden muss.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Okay, der TE ist zu blöd für alles, ich bin raus...
ragequit

von Rekursion (Gast)


Lesenswert?


von conny (Gast)


Lesenswert?

Mw E. schrieb:
> Okay, der TE ist zu blöd für alles, ich bin raus...
> ragequit

Warum bin ich zu blöd?????

ich hab mehrfach gefragt wie ich im led handler ein Bild zurück geben 
kann das mir im Browser angezeigt wird.

Zu dem fragte ich hier HÖFLICH!

von Marco H. (damarco)


Lesenswert?

Stefan U. schrieb:
>>> loadXMLDoc("/led_red.cgi?red=1&t="+ Math.random(),function()
>
>> Math.random() verstehe ich auch nicht so wirklich
>
> Durch das Anhängen einer Zufallszahl an einen Dateinamen umgeht man den
> eventuell unerwünschten Cache des Web Browsers.

Oh Danke, nach 43 Seiten trotzdem was gelernt ;) Aber ist das denn nötig 
beim HTTP-Request ? Das passiert doch nur wenn man ohne diese Methode 
ganze Seiten anfordert.

Nochmals du bist zu faul die entsprechende Literatur zu bemühen und wenn 
du diese nicht versteht dessen Grundlagen.

Ohne dieses Wissen drehen wir uns hier im Kreis.

von Stefan F. (Gast)


Lesenswert?

Soweit ich weiss stört der Cache nur bei HTTP Get Requests. Wenn der 
Server passende HTTP Header in der Response setzt, braucht man diesen 
Workaround nicht.

von Stefan F. (Gast)


Lesenswert?

> Nun wollte ich gerne wenn sich der status der vier LEDs ändert
> mir optisch auf der Seite angezeigt wird.

Ja, das wissen wir seit Monaten. Und du weisst nicht, wie man das macht.

Wir können unser Wissen nicht direkt in dein Gehirn übertragen. Den 
Lernvorgang dazu musst du selbst vornehmen. Ich sehe da allerdings null 
Bereitschaft von dir.

Manchmal liegt das Scheitern auch einfach daran, dass man sich 
übernommen hat. Ich bekomme auch nicht alles hin, was ich machen will.

Probier was einfacheres. Ich hatte Dir schon vor Monaten geraten, so 
eine Webanwendung zuerst ohne Mikrocontroller z.B. mit PHP zu 
entwickeln. Aber du willst ja gleich dreistöckige Hochzeitstorten 
backen, anstatt mit Keksen zu beginnen.

von conny (Gast)


Lesenswert?

Stefan U. schrieb:
>> Nun wollte ich gerne wenn sich der status der vier LEDs ändert
>> mir optisch auf der Seite angezeigt wird.
>
> Ja, das wissen wir seit Monaten. Und du weisst nicht, wie man das macht.

Ja deshalb fragte ich
>
> Wir können unser Wissen nicht direkt in dein Gehirn übertragen. Den
> Lernvorgang dazu musst du selbst vornehmen. Ich sehe da allerdings null
> Bereitschaft von dir.

Natürlich bin ich bereit zu lernen.

Ich fragte wie ich das Bild anzeigen kann, weil ich im web kein einziges 
Beispiel gefunden habe wie man das macht, speziell beim 
LEDS_CGI_Handler.

>
> Manchmal liegt das Scheitern auch einfach daran, dass man sich
> übernommen hat. Ich bekomme auch nicht alles hin, was ich machen will.
>
> Probier was einfacheres. Ich hatte Dir schon vor Monaten geraten, so
> eine Webanwendung zuerst ohne Mikrocontroller z.B. mit PHP zu
> entwickeln. Aber du willst ja gleich dreistöckige Hochzeitstorten
> backen, anstatt mit Keksen zu beginnen.

Ich hatte doch schon mehrfach gesagt das meine Anwendung mit dem UIP 
alles Funktioniert.

von Markus F. (mfro)


Lesenswert?

conny schrieb:
> Natürlich bin ich bereit zu lernen.
>
...
> Ich hatte doch schon mehrfach gesagt das meine Anwendung mit dem UIP
> alles Funktioniert.

Wenn das so ist, dann nur deswegen, weil Du dort etwas zum Kopieren 
gefunden hast. Verstanden hast Du wohl nichts davon, sonst könntest Du 
die funktionierende Lösung ja auf LWIP übertragen.

Lernen funktioniert ganz anders (deswegen kriegt man in der Schule 
schlechte Noten, wenn man beim Abschreiben erwischt wird).

von conny (Gast)


Lesenswert?

Markus F. schrieb:
> conny schrieb:
>> Natürlich bin ich bereit zu lernen.
>>
> ...
>> Ich hatte doch schon mehrfach gesagt das meine Anwendung mit dem UIP
>> alles Funktioniert.
>
> Wenn das so ist, dann nur deswegen, weil Du dort etwas zum Kopieren
> gefunden hast. Verstanden hast Du wohl nichts davon, sonst könntest Du
> die funktionierende Lösung ja auf LWIP übertragen.
>
> Lernen funktioniert ganz anders (deswegen kriegt man in der Schule
> schlechte Noten, wenn man beim Abschreiben erwischt wird).

Wie soll ich beim LWIP den das Lernen wenn ich nicht mal ein Beispiel 
habe um das zu lernen.

von Stefan F. (Gast)


Lesenswert?

>> Wie soll ich beim LWIP den das Lernen wenn ich nicht mal ein
>> Beispiel habe um das zu lernen.

Man braucht nicht immer Beispiele. Man muss die Protokolle und die 
Library verstehen, dann kann man sie anwenden.

von conny (Gast)


Lesenswert?

Stefan U. schrieb:
> Wie soll ich beim LWIP den das Lernen wenn ich nicht mal ein
> Beispiel habe um das zu lernen.
>
> Man braucht nicht immer Beispiele. Man muss die Protokolle und die
> Library verstehen, dann kann man sie anwenden.

Ich hab das bisher immer anders gemacht , mir ein Beispiel angeschaut 
wie wird das gemacht und  was wird gemacht in diesen Beispiel.

von Wolfgang H. (drahtverhau)


Lesenswert?

Evtl. liegt ier das problem...

conny schrieb:
> Ich hab das bisher immer anders gemacht , mir ein Beispiel angeschaut
> wie wird das gemacht und  was wird gemacht in diesen Beispiel.

von Daniel A. (daniel-a)


Lesenswert?

conny schrieb:
> Bei mir wird nur die 25 Ausgegeben und kein Bild.

Na also, der Code wird somit ausgegeben, das ist doch schonmal ein 
Anfang, darauf kann man aufbauen.

Welche url gibst du ein, bei welcher diese Ausgabe kommt?
Gibt es eine Datei, in der soetwas drinsteht?: <!--#t-->

Beim HTML Image Tag "<img src=\"red.gif\" />" gibt das src attribut die 
URL an, von welcher das Bild geladen werden kann. Hier ist es ein 
relativer Pfad, das bedeutet bei einer url wie http://x.x.x.x:y/a/ oder 
http://x.x.x.x:y/a/b wird das Bild unter http://x.x.x.x:y/a/red.gif 
gesucht. Wäre es im src attribut /red.gif statt red.gif, wäre es eine 
Absoluter Pfad und würde unter http://x.x.x.x:y/red.gif gesucht. Wenn 
man diese URL im Browser Aufruft sollte man das Bild, oder Datensalat 
sehen.

Um das Bild anzeigen zu können musst du es erst wie die index.html auf 
den Controller laden, oder worauf auch immer du die index.html lädst. 
Dann musst du es schaffen das Bild vom Server abzurufen, dafür musst du 
die URL des Bildes herausfinden, versuche einfach diverse URLs im 
Browser bis du das Bild oder Datensalat siehst, dann hast du es 
gefunden. Achte dabei auf die gross/klein schreibung der dateinamen. 
Sobald du die URL kennst, kannst du diese im img tag als src attribut 
verwenden (aber ohne den URL Origin).

von hust (Gast)


Lesenswert?

die "25"  ist doch im html rückgabeparameter drin
1
( "<img   src=\"red.gif\" width=\"64\" height=\"64\" > <br> 25"));

da hinter dem <br>

da die 25 dort stehen ...
der broswer ist an dieser stelle auch doof und setzt die daten nur 
zusammen.

solange du nicht das richtige sendest ... wird auch nie das richtige 
angezeigt werden

also mach dich erstmal schlau was html und so angeht

firefox und so haben einen brauchbaren debugger wo man gut sehen kann 
was gesendet und empfangen wird.

alternativ wireshark



aber in der zeit wirklich so wenig dazuzulernen ist schon eine kunst!
und copy&paste auf gut glück funktioniert leider bei dieser thematik 
selten

von Stefan F. (Gast)


Lesenswert?

Ich kann da eigentlich nur wiederholen, was ich Dir damals zu µIP 
geraten hatte. Das gilt hier nämlich immer noch:

Lerne folgende Technologien in dieser Reihenfolge (zunächst ohne 
Mikrocontroller!):

- HTML
- CSS
- Javascript
- HTTP Protokoll (insbesondere GET, PUT, Header, Umgang mit Cache)
- AJAX
- PHP (oder irgendeine Alternative)

Dann programmiere Dir erstmal eine interaktive Webseite, wo man ein 
Formular ausfüllen kann und die Seite dynamisch upgedated wird. Zum 
Beispiel ein simples Kalenderblatt  für einen Monat, wo man Termine 
eintragen kann.

Programmiere es so, dass mehrere User gleichzeitig damit arbeiten 
können. Also wenn einer was neues einträgt, sollen die anderen User die 
Änderung automatisch sehen können.

Und wenn dieses Kalenderblatt zufriedenstellend funktioniert, dann wage 
dich an den Mikrocontroller.

Dazu musst du zuerst die ganze Doku von LwIP lesen und verstehen. Dann 
die Beispielsprogramme lesen und verstehen. Und erst dann fängt man an, 
eigenen Code zu schreiben.

Du versuchst gerade schon wieder rückwärts vorzugehen. Das geht nicht, 
solange keine Meister vom Himmel fallen.

von hust (Gast)


Lesenswert?

wenn du durch copy&past weiterkommen willst ..

schau dir doch direkt an was passiert

was passiert nach einem POST / GET von der seite aus
was wird gesendet und was empfangen

speziell warum du eine seite als returnwert hast ...
1
  return "/STM32F4xxLED.html";


das ist die weite die angezeit wird nach dem aufruf

also musst du HIER etwas ändern ...
also die Daten im HTML ändern

oder du must die seite so aufbauen das du nur teile an daten sendest und 
auch nur teile wieder verwertest



im prinzip ist es aber immer das selbe ... dein browser zeit daten an 
...
die kommen von deinem mikrokontroller

je nach dem ob die farbe anders sein soll ... ein bild usw ... all das 
musst du  auf deinem mikrokontroller  je nach status ändern und dem 
browser mitteilen


und hier ist der knackpunkt ....
DAS kann man nur durch verstehen der funktionsweise von browser , HTML 
und dem lwip

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.