Jomelo:
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);
?>
Home Kontrol Version 0.1
Kino Film start
Kino Film ende
> ```
>
>
>
> 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();
}
Hi. Ich habe mal den Sketch getestet, irgendwie funkt da nix.
#include <SPI.h>
#include <Ethernet.h>
#define led6 6
#define led5 5
// MAC und IP Konfiguration
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xEE, 0xF3 };
IPAddress ip(192,168,178,177);
IPAddress gateway(192,168,178,1);
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(23); // port 23
void setup() {
pinMode(led6, OUTPUT);
pinMode(led5, OUTPUT);
//Ethernet initialisieren
Ethernet.begin(mac, ip, gateway, subnet);
// Server starten
server.begin();
}
//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
digitalWrite(led5, HIGH);
Serial.println("an");
}
else if(value == "fade_off") {
// mach irgendwas um das licht auszuschalten
digitalWrite(led5, LOW);
Serial.println("aus");
}
}
}
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()
{EthernetClient client = server.available(); // auf eine eingehende Verbindung warten
net_checkNewData();
client.flush();
//damit daten sicher gesendet werden.
delay(10);
//client verbindung beenden
client.stop();
}
In test.php datei habe ich den Port auf 23 auch gesetzt. Verbindung ist zwar da aber die LED auf Pin 5 schaltet nicht. Warum?