Laurent () 
KernelChip . 
. 
MajorDoMo, Arduino 
Arduino Mega Server. , , … 
Processing.

?
, . .
, «» . ? , , Processing. Processing? , , . . , .
, Processing Laurent .
Processing. , . , .

, . :
import processing.net.*;
Laurent. . , .
String pass = "$KE,PSW,SET,Laurent";
String rele2on = "$KE,REL,2,1";
String rele2off = "$KE,REL,2,0";
, .
byte CRbyte = 13;
byte LFbyte = 10;
Client myClient;
, :
void sendCommand(String command, Client cl) {
  cl.write(pass);
  cl.write(CRbyte);
  cl.write(LFbyte);
  delay(10);
  cl.write(command);
  cl.write(CRbyte);
  cl.write(LFbyte);
} 
, pass ( , ), 10 . .
setup(). Processing .
void setup() { 
  size(300, 300); 
  background(255);
  myClient = new Client(this, "192.168.2.19", 2424); 
} 
, myClient Laurent. , «192.168.2.19» IP ( ), 2424 Laurent .
, draw(), . . , , , .
void draw() { 
  sendCommand(rele2on, myClient); 
  delay(3000);
  
  sendCommand(rele2off, myClient); 
  delay(3000);
}
rele2on "$KE,REL,2,1", rele2off — "$KE,REL,2,0".
, ? . , , , . , , , , Processing .
.
import processing.net.*;
byte CRbyte = 13; // HEX 0x0D
byte LFbyte = 10; // HEX 0x0A
// Commands
String pass = "$KE,PSW,SET,Laurent";
String rele2on = "$KE,REL,2,1";
String rele2off = "$KE,REL,2,0";
// Client
Client myClient;
void sendCommand(String command, Client cl) {
cl.write(pass);
cl.write(CRbyte);
cl.write(LFbyte);
delay(10);
cl.write(command);
cl.write(CRbyte);
cl.write(LFbyte);
}
void setup() {
size(300, 300);
background(255);
myClient = new Client(this, «192.168.2.19», 2424);
}
void draw() {
sendCommand(rele2on, myClient);
delay(3000);
sendCommand(rele2off, myClient);
delay(3000);
}
, , . , , Processing, .
. . , , . , .
. ? , .
? . , , , , , - , . , .

, , ( ).
int x1 = 100;
int y1 = 100;
int dx = 100;
int dy = 100;
boolean state = false;
.
sendCommand(rele2on, myClient);
«» , .
void on() {
  sendCommand(rele2on, myClient); 
}
void off() {
  sendCommand(rele2off, myClient); 
}
, on() off() , sendCommand(rele2on, myClient). . - .
draw().
void draw() { 
  background(64);
 
  if ((mouseX > x1 && mouseX < x1 + dx) && 
      (mouseY > y1 && mouseY < y1 + dy)) {
    fill(152,161,247, 100);
    background(255);   
    if (!state) {
      on();
    }
    state = true;
  } else {
      fill(204,240,152, 100); 
      if (state) {
        off();
      }
      state = false;
    }
  rect(x1, y1, dx, dy);
}
. , , ,
  if ((mouseX > x1 && mouseX < x1 + dx) && 
      (mouseY > y1 && mouseY < y1 + dy)) {
    fill(152,161,247, 100);
.

, . , . — — . « », .
.
import processing.net.*;
int x1 = 100;
int y1 = 100;
int dx = 100;
int dy = 100;
boolean state = false;
byte CRbyte = 13; // HEX 0x0D
byte LFbyte = 10; // HEX 0x0A
// Commands
String pass = "$KE,PSW,SET,Laurent";
String rele2on = "$KE,REL,2,1";
String rele2off = "$KE,REL,2,0";
// Client
Client myClient;
void sendCommand(String command, Client cl) {
cl.write(pass);
cl.write(CRbyte);
cl.write(LFbyte);
delay(10);
cl.write(command);
cl.write(CRbyte);
cl.write(LFbyte);
}
void on() {
sendCommand(rele2on, myClient);
}
void off() {
sendCommand(rele2off, myClient);
}
void setup() {
size(300, 300);
background(255);
myClient = new Client(this, «192.168.2.19», 2424);
}
void draw() {
background(64);
if ((mouseX > x1 && mouseX < x1 + dx) &&
(mouseY > y1 && mouseY < y1 + dy)) {
fill(152,161,247, 100);
background(255);
if (!state) {on();}
state = true;
} else {
fill(204,240,152, 100);
if (state) {off();}
state = false;
}
rect(x1, y1, dx, dy);
}
Laurent . , . , Processing. ? Laurent.
, Laurent :
, , .