- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 182

Thema: Diskussion zum RP6 M256 WIFI Modul

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    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\">&nbsp;&nbsp;\n");
    
    writeString_P_WIFI("gSL3<input type=\"checkbox\" ");
    if(leds_mask & 4) writeString_P_WIFI("checked ");
    writeString_P_WIFI("name=\"gSL3\" value=\"c\">&nbsp;&nbsp;\n");
    
    writeString_P_WIFI("gSL2<input type=\"checkbox\" ");
    if(leds_mask & 2) writeString_P_WIFI("checked ");
    writeString_P_WIFI("name=\"gSL2\" value=\"b\">&nbsp;&nbsp;\n");
    
    writeString_P_WIFI("gSL1<input type=\"checkbox\" ");
    if(leds_mask & 1) writeString_P_WIFI("checked ");
    writeString_P_WIFI("name=\"gSL1\" value=\"a\">&nbsp;\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\">&nbsp;&nbsp;\n");
    
    writeString_P_WIFI("pSL3<input type=\"checkbox\" ");
    if(leds_mask & 4) writeString_P_WIFI("checked ");
    writeString_P_WIFI("name=\"pSL3\" value=\"c\">&nbsp;&nbsp;\n");
    
    writeString_P_WIFI("pSL2<input type=\"checkbox\" ");
    if(leds_mask & 2) writeString_P_WIFI("checked ");
    writeString_P_WIFI("name=\"pSL2\" value=\"b\">&nbsp;&nbsp;\n");
    
    writeString_P_WIFI("pSL1<input type=\"checkbox\" ");
    if(leds_mask & 1) writeString_P_WIFI("checked ");
    writeString_P_WIFI("name=\"pSL1\" value=\"a\">&nbsp;\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
    Geändert von radbruch (29.07.2012 um 02:33 Uhr) Grund: optisches Update
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hi,
    ich meinte
    Bei mir klappt es bis zur ersten Eingabe, ab der zweiten ist die Verbindung weg?
    zu deinem ersten vorgestellten Webbrowser-Programm.
    Dort konnte ich einmal die LEDs nach Wunsch setzen, beim zweiten mal kam ein Verbindungsabbruch...

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Soso, LabView-Kommunikation steht endlich. Die Datenauswertung der Messwerte funzt seit gestern, das Senden von Befehlen klappt im Allgemeinen auch schon. Jedoch alles momentan nur mit dem Example12.
    Fehlt also nur noch die nette Befehlsstruktur von FabianE.!!!!!

    Mal sehen, ob ich das hinbekomme - ansonsten: FabianE., was macht das Programmieren???

    Grüße!

  4. #4
    Max Web
    Gast
    So, mein Test-Projekt nimmt auch mehr und mehr Form an. Mittlerweile werden fast alle Sensordaten übertragen und grafisch in einer Benutzeroberfläche dargestellt, auch die ersten PC-seitigen Programme habe ich schon getestet.
    Probleme mit dem M256 gab es dabei zu keiner Zeit - lediglich ein paar Verbindungsabbrüche, wenn zu viele Befehle gesendet werden - der PC ist dann doch noch etwas schneller

    So sieht es bisher aus:
    Klicke auf die Grafik für eine größere Ansicht

Name:	RoboBridge.jpg
Hits:	41
Größe:	135,3 KB
ID:	22981

    Der Sourcecode sieht (besonders auf C-Seite) nicht nicht so toll aus, hier ist noch einiges an Refactoring zu tun.
    Der aktuelle Zwischenstand ist hier zu finden: http://code.google.com/p/robobridge/

    - Max

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Wow, nicht schlecht!

    Mal ne frage: Sind mit AVR eigentlich Funktionen wie str_fill oder Str_ReadInt erlaubt?
    Bräuchte das für die Befehlsstrucktu-Aufdröselung von FabianE.'s Remotrol...

    Grüße
    Geändert von fabqu (13.08.2012 um 09:14 Uhr)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Was heist erlaubt? Das sind meines Wissens Funktionen aus der Lib vom M128 bzw. von den älteren CControl Boards und gehören quasi zum "Betriebssystem" der jeweiligen Geräte... die kannst du dir aber natürlich in C nachbauen... schon mal gegoogelt?
    LG Rolf
    Sind Sie auch ambivalent?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Jo klar!
    Ich wollte nur wissen, ob die schon vorhanden sind in den Libs, oder ob man sie sich eben erst zusammenbauen muss.

Ähnliche Themen

  1. [ERLEDIGT] Kostenlose RP6 M256 WIFI Module für Testanwender!
    Von SlyD im Forum Robby RP6
    Antworten: 10
    Letzter Beitrag: 02.07.2012, 15:24
  2. RP6v2 M256 WiFi !?
    Von Dirk im Forum Robby RP6
    Antworten: 20
    Letzter Beitrag: 11.05.2012, 19:27
  3. ARM für WiFi steuerung ?
    Von fat tony im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 5
    Letzter Beitrag: 03.01.2010, 13:57
  4. Wifi Roboter
    Von newName im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 16.01.2008, 13:51
  5. Formate zur Diskussion
    Von sonic im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 24
    Letzter Beitrag: 03.08.2004, 18:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen