Hallo
Bei mir klappt es bis zur ersten Eingabe, ab der zweiten ist die Verbindung weg?
Das Beispiel für die SD-Card erwartet keine Parameter. Hast du die Text-Datei aus dem Beispielordner in das Root-Verzeichniss der SD-Card kopiert? SD-Card ist mit FAT32 formatiert?
Jetzt fehlt eigentlich nur noch die GUI und vielleicht ein etwas effizienteres Protokoll
Ein WIFI-Board braucht doch keine GUI, eine Browserschnittstelle ist viel knuffiger:
Code:
// LEDs setzen und Daten der Browseranforderung anzeigen mic 28.7.2012
// https://www.roboternetz.de/community/threads/58162-Diskussion-zum-RP6-M256-WIFI-Modul?p=555651&viewfull=1#post555651
#include "RP6M256Lib.h"
uint8_t c, header_html_request[20][100], hhr_zeile=0, hhr_zeile_max=0, hhr_pos=0, hhr_params;
uint8_t leds_mask=0;
void leds_setzen(void);
void send_html_page(void);
int main(void)
{
initRP6M256();
writeString_P("\n\rBrowserdaten anzeigen mic 28.7.2012\n\r");
// Make sure WLAN Module Packet size / buffer size and flush timer is OK
enter_cmd_mode_WIFI();
issueCMD_WIFI("set comm size 1024","AOK");
issueCMD_WIFI("set comm time 10","AOK");
leave_cmd_mode_WIFI();
while(true)
{
if(getBufferLength_WIFI()) // Daten vom Browser empfangen?
{
c=readChar_WIFI(); // Zeichen einlesen...
if(hhr_pos<98) header_html_request[hhr_zeile][hhr_pos++]=c; // ...und speichern
if(c==13) // Zeilenende?
{
header_html_request[hhr_zeile][hhr_pos++]=0; // String Endekennung anfügen
hhr_zeile++; // nächste Zeile einlesen
hhr_pos=0; // Zeile startet bei Position null
stopStopwatch1();
setStopwatch1(0);
startStopwatch1(); // Timeout starten
}
}
if(getStopwatch1() > 50) // Timeout beim Empfang bedeutet Headerende
{
header_html_request[hhr_zeile][hhr_pos++]=0; // String Endekennung anfügen
hhr_zeile_max=hhr_zeile+1; // Anzahl der Zeilen speichern...
leds_setzen();
send_html_page(); // ... und antworten
hhr_zeile=0; // vorbereiten für nächsten Request-Header
hhr_pos=0;
hhr_zeile_max=0;
stopStopwatch1(); // ab jetzt kein Timeout mehr überprüfen
setStopwatch1(0);
}
}
return 0;
}
void leds_setzen(void)
{
hhr_pos=0;
do
c=header_html_request[0][hhr_pos++];
while(c && (c != 'G'));
if(c) // GET oder POST im Request gefunden?
hhr_params=0; // GET
else
hhr_params=hhr_zeile_max-1; // kein GET
hhr_pos=0;
leds_mask=0;
do
{
c=header_html_request[hhr_params][hhr_pos++];
if(c) switch(c)
{
case 'a': leds_mask |= 1; break;
case 'b': leds_mask |= 2; break;
case 'c': leds_mask |= 4; break;
case 'd': leds_mask |= 8; break;
}
}while(c);
setLEDs(leds_mask & 0Xf);
}
void send_html_page(void)
{
// Erhalt der Anforderung quittieren:
writeString_P_WIFI("HTTP/1.1 200 OK\r\n");
writeString_P_WIFI("Content-type: text/html\r\n");
writeString_P_WIFI("\r\n");
stopStopwatch1();
setStopwatch1(0);
startStopwatch1();
// Send HTML Content:
writeString_P_WIFI("<html>\n<head>\n<title>RP6-WIFI: HTTP-Requestdaten anzeigen</title>\n</head>\n<body>\n");
writeString_P_WIFI("<h1>RP6-WIFI: LED setzen mit GET und POST</h1>\n");
writeString_P_WIFI("<form action=\"\" name\"get\" method=\"get\">\n");
writeString_P_WIFI("gSL4<input type=\"checkbox\" ");
if(leds_mask & 8) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL4\" value=\"d\"> \n");
writeString_P_WIFI("gSL3<input type=\"checkbox\" ");
if(leds_mask & 4) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL3\" value=\"c\"> \n");
writeString_P_WIFI("gSL2<input type=\"checkbox\" ");
if(leds_mask & 2) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL2\" value=\"b\"> \n");
writeString_P_WIFI("gSL1<input type=\"checkbox\" ");
if(leds_mask & 1) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL1\" value=\"a\"> \n");
writeString_P_WIFI("<input type=\"submit\" value=\"GET\">\n");
writeString_P_WIFI("</form>\n");
writeString_P_WIFI("<form action=\"\" name\"post\" method=\"post\">\n");
writeString_P_WIFI("pSL4<input type=\"checkbox\" ");
if(leds_mask & 8) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL4\" value=\"d\"> \n");
writeString_P_WIFI("pSL3<input type=\"checkbox\" ");
if(leds_mask & 4) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL3\" value=\"c\"> \n");
writeString_P_WIFI("pSL2<input type=\"checkbox\" ");
if(leds_mask & 2) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL2\" value=\"b\"> \n");
writeString_P_WIFI("pSL1<input type=\"checkbox\" ");
if(leds_mask & 1) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL1\" value=\"a\"> \n");
writeString_P_WIFI("<input type=\"submit\" value=\"POST\">\n");
writeString_P_WIFI("</form>\n");
for(hhr_zeile=0; hhr_zeile < hhr_zeile_max; hhr_zeile++)
{
hhr_pos=0;
writeString_P_WIFI("Request Zeile ");
writeInteger_WIFI(hhr_zeile, 10);
writeString_P_WIFI(": ");
do
{
c=header_html_request[hhr_zeile][hhr_pos++];
if(c) writeChar_WIFI(c);
}while(c);
writeString_P_WIFI("\n<br>\n");
}
writeString_P_WIFI("\n<br>\nDie Parameter befinden sich in Zeile ");
writeInteger_WIFI(hhr_params, 10);
writeString_P_WIFI(":\n<br>\n");
hhr_pos=0;
do
{
c=header_html_request[hhr_params][hhr_pos++];
if(c) writeChar_WIFI(c);
}while(c);
writeString_P_WIFI("<br>\nleds_mask ist ");
writeInteger_WIFI(leds_mask, 2);
writeString_P_WIFI("\n<br><br>\n<small>\n[Ladezeit der Seite: ");
writeInteger_WIFI(getStopwatch1()+1, 10);
writeString_P_WIFI("ms]\n<br><br>\nmic 29.7.2012\n</small>\n");
writeString_P_WIFI("</body>\n");
writeString_P_WIFI("</html>\n");
stopStopwatch1();
setStopwatch1(0);
// Wait a bit and then close connection:
mSleep(50); // Depending on the content you may have to wait longer.
enter_cmd_mode_WIFI();
writeCommand_WIFI("close\r");
leave_cmd_mode_WIFI();
}
Zwar noch etwas holperig und viel "zu Fuss" programmiert, weil ich mit HTML nicht wirklich geübt bin, aber immerhin zeigt es den Ansatz. Leider funktioniert es nicht mit meinem 9er IE, aber mit dem FF klappts wie erwartet. Es ist natürlich noch nicht perfekt.
Das hier stört mich noch sehr dabei, weil es massig Speicherplatz verschwendet:
header_html_request[20][100]
Aber der m256 hat ja reichlich davon. ;)
Gruß
mic
Lesezeichen