INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MAC-Adresse aus Formular
20.12.2014, 16:17
Beitrag #1
MAC-Adresse aus Formular
Hallo,

ich möchte eine eingegebene MAC-Adresse aus einem Formular einlesen und diese in der entsprechenden Variable für die Ethernet-Einstellungen eintagen.

Der eingelesene Wert wird mir im Serial Monitor so angezeigt: DE%3AAD%3ABE%3AEF%3AFE%3AED

Wie kann ich jetzt die MAC-Adresse in das benötigte Format umwandeln?
mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


PHP-Code:
/*
http://forum.arduino.cc/index.php?topic=87656.0
 A simple web server using an Arduino Wiznet Ethernet shield. 
 For Arduino IDE V1.0 only. Previous IDE versions require mods to this code.
 
 Original code created 18 Dec 2009
 by David A. Mellis
 modified 4 Sep 2010
 by Tom Igoe
 modified 18 Jan 2012
 by Tim Dicus 
 */

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

// Enter a MAC address and IP address for your controller below
// The IP address will be dependent on your local network
byte mac[] = { 0xDE0xAD0xBE0xEF0xFE0xED };
IPAddress ip192,168,1,210 );
IPAddress gateway192,168,1,);
IPAddress subnet255,255,255,);

// Initialize the Ethernet server library with the IP address and port you want to use 
// (port 80 is default for HTTP)
EthernetServer server(80);

void setup() {
  
Serial.begin(9600);

  
// set SPI SS pins on w5100 and SD
  
pinMode(10,OUTPUT);
  
digitalWrite(10,HIGH);
  
pinMode(4,OUTPUT);
  
digitalWrite(4,HIGH);

  
// start the Ethernet connection and the server
  
Ethernet.begin(macipgatewaysubnet);
  
server.begin();
  
delay(200);

  
Serial.println("Setup finished\n");
}

void loop() {
  
// listen for incoming clients
  
EthernetClient client server.available();
  if (
client) {
    
Serial.println("Client connected");

    
TextFinder finder(client);

    
// an http request ends with a blank line
    
boolean currentLineIsBlank true;
    while (
client.connected()) {
      while(
client.available()) {
        
char c client.read();
        
// if you've gotten to the end of the line (received a newline character) and the line is blank,
        // the http request has ended, so you can send a reply.
        
if (== '\n' && currentLineIsBlank) {
          
          
boolean ende false;
          
          
char mac_addr[28] = {0};
          
byte ip1 0;
          
byte ip2 0;
          
byte ip3 0;
          
byte ip4 0;
          
unsigned int a 0;
          
unsigned int b 0;
          
boolean c false;
          
          
// Here is where the POST data is
          
while(client.available() && !ende) {
            
finder.getString("m=""&"mac_addr28);
            if ( 
finder.find("i=") ) {
              
ip1 finder.getValue();
              
ip2 finder.getValue();
              
ip3 finder.getValue();
              
ip4 finder.getValue();
            }
            if ( 
finder.find("a=") ) {
              
finder.getValue();
            }
            if ( 
finder.find("b=") ) {
              
finder.getValue();
            }
            if ( 
finder.find("c=") ) {
              
true;
            }
            
ende true// Beendet auslesen
          
}
          
          
// Ausgelesene Werte anzeigen
          
Serial.print("MAC: ");
          
Serial.println(mac_addr);
          
Serial.print("IPv4: ");
          
Serial.print(ip1);
          
Serial.print(".");
          
Serial.print(ip2);
          
Serial.print(".");
          
Serial.print(ip3);
          
Serial.print(".");
          
Serial.println(ip4);
          
Serial.print("a: ");
          
Serial.println(a);
          
Serial.print("b: ");
          
Serial.println(b);
          
Serial.print("c: ");
          
Serial.println(c);
    
          
          
Serial.println("Sending response");
          
          
// send a standard http response header
          
client.println("HTTP/1.0 200 OK");
          
client.println("Content-Type: text/html");
          
client.println();
          
client.println("<HTML><BODY>");
          
// form added to send data from browser          
          
client.println("<FORM ACTION=\"\" METHOD=\"post\">");
          
client.println("mac: <INPUT TYPE=\"TEXT\" NAME=\"m\" VALUE=\"DE:AD:BE:EF:FE:ED\" SIZE=\"21\" MAXLENGTH=\"17\"><BR>");
          
client.println("ipv4: <INPUT TYPE=\"TEXT\" NAME=\"i\" VALUE=\"192.168.1.210\" SIZE=\"21\" MAXLENGTH=\"15\"><BR>");
          
client.println("a: <INPUT TYPE=\"TEXT\" NAME=\"a\" VALUE=\"0\" SIZE=\"10\" MAXLENGTH=\"5\"> (Nur Zahlen 0-65535)<BR>");
          
client.println("b: <INPUT TYPE=\"TEXT\" NAME=\"b\" VALUE=\"0\" SIZE=\"10\" MAXLENGTH=\"5\"> (Nur Zahlen 0-65535)<BR>");
          
client.println("c: <INPUT TYPE=\"CHECKBOX\" NAME=\"c\" VALUE=\"0\"><BR><BR>");
          
client.println("<INPUT TYPE=\"SUBMIT\" NAME=\"submit\" VALUE=\"Submit\">");
          
client.println("</FORM>");
          
client.println("</BODY></HTML>");
          
          
delay(20);
          
client.stop();
        } 
        else if (
== '\n') {
          
// you're starting a new line
          
currentLineIsBlank true;
        } 
        else if (
!= '\r') {
          
// you've gotten a character on the current line
          
currentLineIsBlank false;
        }
      }
    }
    
Serial.println("Client disconnected\n");
  }

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2014, 11:12 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2014 14:39 von rkuehle.)
Beitrag #2
RE: MAC-Adresse aus Formular
Hallo Marco,

da wirst du wohl das Char Array über eine Schleife, in ein String - Object umwandeln müssen. Mit den Funktionen der String-Klasse kannst du dann zB "%3A" (das ist der Doppelpunk) mit nix ersetzen und aus dem String dann die Bytes für die Mac-Anteile rausziehen.
String Klasse: http://arduino.cc/en/pmwiki.php?n=Refere...ringObject
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2014, 17:44
Beitrag #3
RE: MAC-Adresse aus Formular
Hallo Ricardo, danke für den Tip!

Ich habe es jetzt so gelöst und soweit ich es testen konnte, scheint es auch fehlerfrei zu funktionieren:

PHP-Code:
/*
http://forum.arduino.cc/index.php?topic=87656.0
 A simple web server using an Arduino Wiznet Ethernet shield. 
 For Arduino IDE V1.0 only. Previous IDE versions require mods to this code.
 
 Original code created 18 Dec 2009
 by David A. Mellis
 modified 4 Sep 2010
 by Tom Igoe
 modified 18 Jan 2012
 by Tim Dicus 
 */

#include <SPI.h>
#include <Ethernet.h>

// Ethernet-Konfiguration
byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };
byte ip[] = { 192,168,1,210 };
byte gateway[] = { 192,168,1,};
byte subnet[] = { 255,255,255,};
EthernetServer server(80);

#define REQ_BUF_SZ   128          // size of buffer used to capture POST data (max. 128)
char POST_data[REQ_BUF_SZ] = {0}; // buffered POST data stored as null terminated string
char data_index 0;              // index into POST_data buffer

char a[8] = "";
unsigned int b;
boolean d false;

void setup() {
  
Serial.begin(9600);

  
// set SPI SS pins on w5100 and SD
  
pinMode(10,OUTPUT);
  
digitalWrite(10,HIGH);
  
pinMode(4,OUTPUT);
  
digitalWrite(4,HIGH);

  
// start the Ethernet connection and the server
  
Ethernet.begin(macipgatewaysubnet);
  
server.begin();
  
  
Serial.println("Setup finished\n");
}

void loop() {
  
// listen for incoming clients
  
EthernetClient client server.available();
  if (
client) {
    
Serial.println("Client connected");
    
// an http request ends with a blank line
    
boolean currentLineIsBlank true;
    while (
client.connected()) {
      if (
client.available()) {
        
char c client.read();
        
// if you've gotten to the end of the line (received a newline character) and the line is blank,
        // the http request has ended, so you can send a reply.
        
if (== '\n' && currentLineIsBlank) {
          
// Here is where the POST data is
          
while (client.available()) {
            
char c2 client.read();
            if (
data_index < (REQ_BUF_SZ 1)) {
              
POST_data[data_index] = c2// save POST data character
              
data_index++;
            }
          }
          
          
Serial.print("POST_data: ");
          
Serial.println(POST_data);
          
Serial.println();
          
          
// MAC-Adresse auslesen und wenn gültig übernehmen
          
if (String(POST_data).indexOf('m') > -1) {
            
String mac_data POST_data;
            
mac_data.remove(02);
            
int mac_data_ende mac_data.indexOf('&');
            
mac_data.remove(mac_data_ende);
            
mac_data.replace("%3A"""); // Doppelpunkt entfernen
            
mac_data.replace("-"""); // Bindestrich entfernen
            
            
if (mac_data.length() == 12) {
              
String mac0 mac_data;
              
mac0.remove(2);
              
byte mac_0 = (byte)strtol(&mac0[0], NULL16); // Converting HEX String to Int
              
              
String mac1 mac_data;
              
mac1.remove(0,2);
              
mac1.remove(2);
              
byte mac_1 = (int)strtol(&mac1[0], NULL16);
              
              
String mac2 mac_data;
              
mac2.remove(0,4);
              
mac2.remove(2);
              
byte mac_2 = (int)strtol(&mac2[0], NULL16);
              
              
String mac3 mac_data;
              
mac3.remove(0,6);
              
mac3.remove(2);
              
byte mac_3 = (int)strtol(&mac3[0], NULL16);
              
              
String mac4 mac_data;
              
mac4.remove(0,8);
              
mac4.remove(2);
              
byte mac_4 = (int)strtol(&mac4[0], NULL16);
              
              
String mac5 mac_data;
              
mac5.remove(0,10);
              
byte mac_5 = (int)strtol(&mac5[0], NULL16);
              
              if ((
mac_0 && mac_0 256) && (mac_1 && mac_1 256) && (mac_2 && mac_2 256) && 
                  (
mac_3 && mac_3 256) && (mac_4 && mac_4 256) && (mac_5 && mac_5 256)) {
                
mac[0] = mac_0;
                
mac[1] = mac_1;
                
mac[2] = mac_2;
                
mac[3] = mac_3;
                
mac[4] = mac_4;
                
mac[5] = mac_5;
                
Serial.println("## mac_data OK");
              }
              else {
                
Serial.println("## mac_data UNGUELTIG");
              }
            }
            else {
              
Serial.println("## mac_data UNGUELTIG");
            }
            
            
// Ausgelesene Werte anzeigen
            
Serial.print("mac_data: ");
            
Serial.println(mac_data);
            
Serial.print("mac[]: ");
            
Serial.print(mac[0],HEX);
            
Serial.print(":");
            
Serial.print(mac[1],HEX);
            
Serial.print(":");
            
Serial.print(mac[2],HEX);
            
Serial.print(":");
            
Serial.print(mac[3],HEX);
            
Serial.print(":");
            
Serial.print(mac[4],HEX);
            
Serial.print(":");
            
Serial.println(mac[5],HEX);
          }
          
          
// IP-Adresse auslesen und wenn gültig übernehmen
          
if (String(POST_data).indexOf('i') > -1) {
            
String ip_data POST_data;
            
int ip_data_anfang ip_data.indexOf('i');
            
ip_data.remove(0ip_data_anfang+2);
            
int ip_data_ende ip_data.indexOf('&');
            
ip_data.remove(ip_data_ende);
            
            if (
ip_data.length() > && ip_data.length() < 16) {
              
String ip0 ip_data;
              
int ip0_ende ip0.indexOf(".");
              
ip0.remove(ip0_ende);
              
byte ip_0 ip0.toInt(); // Converting String to Int
              
              
String ip1 ip_data;
              
ip1.remove(0ip0.length()+1);
              
int ip1_ende ip1.indexOf(".");
              
ip1.remove(ip1_ende);
              
byte ip_1 ip1.toInt(); // Converting String to Int
              
              
String ip2 ip_data;
              
ip2.remove(0ip0.length()+ip1.length()+2);
              
int ip2_ende ip2.indexOf(".");
              
ip2.remove(ip2_ende);
              
byte ip_2 ip2.toInt(); // Converting String to Int
              
              
String ip3 ip_data;
              
ip3.remove(0ip0.length()+ip1.length()+ip2.length()+3);
              
byte ip_3 ip3.toInt(); // Converting String to Int
              
              
if ((ip_0 && ip_0 256) && (ip_1 >= && ip_1 256) && (ip_2 >= && ip_2 256) && (ip_3 && ip_3 255)) {
                
ip[0] = ip_0;
                
ip[1] = ip_1;
                
ip[2] = ip_2;
                
ip[3] = ip_3;
                
Serial.println("## ip_data OK");
              }
              else {
                
Serial.println("## ip_data UNGUELTIG");
              }
            }
            else {
              
Serial.println("## ip_data UNGUELTIG");
            }
            
            
// Ausgelesene Werte anzeigen
            
Serial.print("ip_data: ");
            
Serial.println(ip_data);
            
Serial.print("ip[]: ");
            
Serial.print(ip[0]);
            
Serial.print(".");
            
Serial.print(ip[1]);
            
Serial.print(".");
            
Serial.print(ip[2]);
            
Serial.print(".");
            
Serial.println(ip[3]);
          }
          
          
// Wenn aktiviert char-Wert auslesen und wenn gültig übernehmen
          
if (String(POST_data).indexOf('x') > -1) {
            
Serial.println("## code JA");
            if (
String(POST_data).indexOf('a') > -1) {
              
String char_data POST_data;
              
int char_data_anfang char_data.indexOf('a');
              
char_data.remove(0char_data_anfang+2);
              
int char_data_ende char_data.indexOf('&');
              
char_data.remove(char_data_ende);
              
              if (
char_data.length() > && char_data.length() < 9) {
                
char_data.toCharArray(achar_data.length()+1);
                
Serial.println("## code_data OK");
              }
              else {
                
Serial.println("## code_data UNGUELTIG");
              }
              
              
// Ausgelesene Werte anzeigen
              
Serial.print("char_data: ");
              
Serial.println(char_data);
              
Serial.print("a: ");
              
Serial.println(a);
            }
          } else {
            
Serial.println("## code NEIN");
            
memset(a0sizeof(a)); // Array leeren
            
            
Serial.print("a: ");
            
Serial.println(a);
          }
          
          
// Int-Wert auslesen und wenn gültig übernehmen
          
if (String(POST_data).indexOf('b') > -1) {
            
String int_data POST_data;
            
int int_data_anfang int_data.indexOf('b');
            
int_data.remove(0int_data_anfang+2);
            
int int_data_ende int_data.indexOf('&');
            
int_data.remove(int_data_ende);
            
            if (
int_data.length() > && int_data.length() < 6) {
              
unsigned int int_0 int_data.toInt(); // Converting String to Int
              
              
if (int_0 >= && int_0 <= 65535) {
                
int_0;
                
Serial.println("## int_data OK");
              }
              else {
                
Serial.println("## int_data UNGUELTIG");
              }
            }
            else {
              
Serial.println("## int_data UNGUELTIG");
            }
            
            
// Ausgelesene Werte anzeigen
            
Serial.print("int_data: ");
            
Serial.println(int_data);
            
Serial.print("b: ");
            
Serial.println(b);
          }
          
          
// Boolean-Wert auslesen und wenn gültig übernehmen
          
if (String(POST_data).indexOf('d') > -1) {
            
true;
            
Serial.println("## boolean_data TRUE");
          }
          else {
            
false;
            
Serial.println("## boolean_data FALSE");
          }
          
// Ausgelesene Werte anzeigen
          
Serial.print("d: ");
          
Serial.println(d);
          
          
Serial.println("Sending response");
          
          
// send a standard http response header
          
client.println("HTTP/1.0 200 OK");
          
client.println("Content-Type: text/html");
          
client.println();
          
client.println("<HTML><BODY>");
          
// form added to send data from browser          
          
client.println("<FORM ACTION=\"\" METHOD=\"post\">");
          
client.println("MAC: <INPUT TYPE=\"TEXT\" NAME=\"m\" VALUE=\"DE:AD:BE:EF:FE:ED\" SIZE=\"21\" MAXLENGTH=\"17\"><BR>");
          
client.println("IPv4: <INPUT TYPE=\"TEXT\" NAME=\"i\" VALUE=\"192.168.1.210\" SIZE=\"21\" MAXLENGTH=\"15\"><BR>");
          
client.println("Code: <INPUT TYPE=\"CHECKBOX\" NAME=\"x\" VALUE=\"1\"> <INPUT TYPE=\"TEXT\" NAME=\"a\" VALUE=\"\" SIZE=\"10\" MAXLENGTH=\"8\"><BR>");
          
client.println("ZahlenWert: <INPUT TYPE=\"TEXT\" NAME=\"b\" VALUE=\"\" SIZE=\"10\" MAXLENGTH=\"5\"> (Nur Zahlen 0-65535)<BR>");
          
client.println("Funktion#1: <INPUT TYPE=\"CHECKBOX\" NAME=\"d\" VALUE=\"1\"><BR><BR>");
          
client.println("<INPUT TYPE=\"SUBMIT\" NAME=\"submit\" VALUE=\"Submit\">");
          
client.println("</FORM>");
          
client.println("</BODY></HTML>");
          
          
delay(20);
          
client.stop();
          
          
data_index 0// reset buffer index
          
memset(POST_data0sizeof(POST_data)); // Array leeren
        

        else if (
== '\n') {
          
// you're starting a new line
          
currentLineIsBlank true;
        } 
        else if (
!= '\r') {
          
// you've gotten a character on the current line
          
currentLineIsBlank false;
        }
      }
    }
    
Serial.println("Client disconnected\n");
  }

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Dynamische DNS / IP Adresse im WAN Bitklopfer 11 977 04.11.2015 16:53
Letzter Beitrag: Scherheinz

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste