Ethernet-Shield und PHP

Ich habe am letzten Sonntag noch per Netzwerk meine LED Strip angesteuert. Dazu habe ich auf meinem Heimrechner einen kleinen Webserver am laufen:

Bei dem Beispiel muss man beachten das ich kein Ethernet-Shield verwende (zu teuer) sondern einen Ethernet-Seriell Wandler für 15 €

PHP/HTML Code:

<?php
//gültige kombinationen der internetseite
$ary = array("kino=fade_on", "kino=fade_off"); 

//socket verbindung
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 
socket_connect($socket, '192.168.178.50', 20108) or die("connect!");

// get parameter von der internetseite
if(isset($_GET['mode']) && in_array($_GET['mode'], $ary)) 
{
    //parameter an arduino übertragen
    socket_write($socket, $_GET['mode']."\0") or die("write"); 
    //antwort abwarten, (der controller sendet ein 'ack' als bestätigung)
    $data = @socket_read($socket, 1024, PHP_NORMAL_READ); 
}

// antwort aus testzwecken ausgeben
echo $data.'
';
//socket schließen
socket_close($socket);
?>
<html>
<head>

</head>
<body style="background-color: #111;">
<center>
<p style="width:100%; height:400px; border: 1px solid #999; background-color:#555; color: #ccc; font-family: verdana; font-size: 56px;">
<b><u>Home Kontrol Version 0.1</u></b>




<a href="?mode=kino=fade_off">Kino Film start</a>

<a href="?mode=kino=fade_on">Kino Film ende</a>

</p>

</center>

</body>
</html>

Arduino Code zum auslesen der Seriellen schnittstelle

//globals
String netData_input = "";
boolean netData_ready = false;

void net_setSettings(String var, String value)
{  
  if(var == "kino") {
    
    if(value == "fade_on") {
      //mach irgendwas um das licht einzuschalten
    }
    else if(value == "fade_off") {
      // mach irgendwas um das licht auszuschalten
    }
  } 
}
void net_workWithNewData()
{  
  boolean  var_mode = true;
  String   var_name = "";
  String   var_content = "";
  var_name.reserve(50);
  var_content.reserve(50);
    
  for(int i=0; i<netData_input.length();i++) 
  {    
    char charAt = netData_input.charAt(i);
   
    switch(charAt)
    {
      case '&':
        if(var_name.length() > 0) {
          net_setSettings(var_name, var_content);          
        }
        
        var_name = "";
        var_content = "";
        var_mode = true;
        
        break;
      case '=':
        
        var_mode = false;
        
        break;
      default:
        
        if(var_mode == false) {
          var_content += charAt;
        } else {
          var_name += charAt;
        }
        break;
    }
  }
  if(var_name.length() > 0) {
    net_setSettings(var_name, var_content);          
  } 
  
  Serial.println("ack");
  netData_input = "";
  netData_ready = false;   
}



void net_checkNewData()
{
  while(Serial.available()) 
  {    
    char inChar = (char)Serial.read(); 
    if(inChar == '\0') 
    {            
      netData_ready = true;
      break;      
    }
    if(netData_input.length() < 199) {        
      netData_input += inChar;      
    } else {
      break;
    }  
  }

  if (netData_ready == true) {   
    
    
    net_workWithNewData();
  }
}


void loop()
{
    net_checkNewData();
}