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();
}