bagaimana agar Arduino bisa menerima data dari web / remote jarak jauh menggunakan surel Http atau Https.
Sebagai berikut adalah source code yang digunakan. Adapun contoh penggunaanya bisa dilihat pada video sebagai berikut :
#define WEBDUINO_FAIL_MESSAGE "<h1>Request Failed</h1>"
#include "SPI.h" // new include
#include "avr/pgmspace.h" // new include
#include "Ethernet.h"
#include "WebServer.h"
#define VERSION_STRING "0.1"
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
static uint8_t ip[] = { 192, 168, 1, 210 };
P(Page_start) = "<html><body>\n";//<head><title>Web_Parms Version " VERSION_STRING "</title></head>
P(Page_end) = "</body></html>";
P(Get_head) = "<h1>";
P(Post_head) = "<h1>";
P(Unknown_head) = "<h1>";//LP2M-ARAY request for ";
P(Default_head) ="</h1>";// "Http://www.lp2maray.com URL requested.</h1><br>\n";
P(Raw_head) = "raw.html requested.</h1><br>\n";
P(Parsed_head) = "parsed.html requested.</h1><br>\n";
P(Good_tail_begin) ="";
P(Bad_tail_begin) ="";
P(Tail_end) = "";
P(Parsed_tail_begin) = """URL parameters:<br>\n";
P(Parsed_item_separator) = " = '";
P(Params_end) = "<br>\n";
P(Post_params_begin) = "<br>\n";
P(Line_break) = "<br>\n";
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
const int ledPinA = 24; // the number of the LED pin
const int ledPinB = 26; // the number of the LED pin
const int ledPinC = 28; // the number of the LED pin
const int ledPinD = 30; // the number of the LED pin
const int buttonPin1 = 32;
const int buttonPin2 = 34;
const int buttonPin3 = 36;
const int buttonPin4 = 38;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int K1 = 0 ;
int K2 = 0 ;
int K3 = 0 ;
int K4 = 0 ;
#define PREFIX ""
WebServer webserver(PREFIX, 80);
void helloCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete){
server.httpSuccess();
if (type == WebServer::HEAD)
return;
server.printP(Page_start);
switch (type){
case WebServer::GET:
server.printP(Get_head);
break;
case WebServer::POST:
server.printP(Post_head);
break;
default:
server.printP(Unknown_head);
}
server.printP(Default_head);
server.printP(tail_complete ? Good_tail_begin : Bad_tail_begin);
server.print("GetData:");
server.print(url_tail);//BRAVO
server.printP(Tail_end);
server.printP(Page_end);
char *inChar= url_tail;//DATA DARI HTTP
if (strstr(inChar,"A")){ digitalWrite(ledPinA, LOW); }
else if (strstr(inChar,"a")) { digitalWrite(ledPinA, HIGH); }
if (strstr(inChar,"B")) { digitalWrite(ledPinB, LOW); }
else if (strstr(inChar,"b")) { digitalWrite(ledPinB, HIGH); }
if (strstr(inChar,"C")) { digitalWrite(ledPinC, LOW); }
else if (strstr(inChar,"c")) { digitalWrite(ledPinC, HIGH); }
if (strstr(inChar,"D")) { digitalWrite(ledPinD, LOW); }
else if (strstr(inChar,"d")) { digitalWrite(ledPinD, HIGH); }
if (strstr(inChar,"E")) {
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW); }
else if (strstr(inChar,"e")) {
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
}
}
void rawCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete){
server.httpSuccess();
if (type == WebServer::HEAD)
return;
server.printP(Page_start);
switch (type){
case WebServer::GET:
server.printP(Get_head);
break;
case WebServer::POST:
server.printP(Post_head);
break;
default:
server.printP(Unknown_head);
}
server.printP(Raw_head);
server.printP(tail_complete ? Good_tail_begin : Bad_tail_begin);
server.print(url_tail);
server.printP(Tail_end);
server.printP(Page_end);
}
#define NAMELEN 32
#define VALUELEN 32
void parsedCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete){
URLPARAM_RESULT rc;
char name[NAMELEN];
char value[VALUELEN];
server.httpSuccess();
if (type == WebServer::HEAD)
return;
server.printP(Page_start);
switch (type){
case WebServer::GET:
server.printP(Get_head);
break;
case WebServer::POST:
server.printP(Post_head);
break;
default:
server.printP(Unknown_head);
}
server.printP(Parsed_head);
server.printP(tail_complete ? Good_tail_begin : Bad_tail_begin);
server.print(url_tail);
server.printP(Tail_end);
if (strlen(url_tail)){
server.printP(Parsed_tail_begin);
while (strlen(url_tail)){
rc = server.nextURLparam(&url_tail, name, NAMELEN, value, VALUELEN);
if (rc == URLPARAM_EOS)
server.printP(Params_end);
else{
server.print(name);
server.printP(Parsed_item_separator);
server.print(value);
server.printP(Tail_end);
}
}
}
if (type == WebServer::POST){
server.printP(Post_params_begin);
while (server.readPOSTparam(name, NAMELEN, value, VALUELEN)){
server.print(name);
server.printP(Parsed_item_separator);
server.print(value);
server.printP(Tail_end);
}
}
server.printP(Page_end);
}
void my_failCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete){
server.httpFail();
if (type == WebServer::HEAD)
return;
server.printP(Page_start);
switch (type){
case WebServer::GET:
server.printP(Get_head);
break;
case WebServer::POST:
server.printP(Post_head);
break;
default:
server.printP(Unknown_head);
}
server.printP(Default_head);
server.printP(tail_complete ? Good_tail_begin : Bad_tail_begin);
server.print(url_tail);
server.printP(Tail_end);
server.printP(Page_end);
}
void setup(){
Ethernet.begin(mac, ip);
webserver.setDefaultCommand(&helloCmd);
webserver.setFailureCommand(&my_failCmd);
webserver.addCommand("index.html", &helloCmd);
webserver.addCommand("raw.html", &rawCmd);
webserver.addCommand("parsed.html", &parsedCmd);
//INIT TOMBOL MANUAL
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(ledPinA, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinC, OUTPUT);
pinMode(ledPinD, OUTPUT);
Serial.begin(9600);
inputString.reserve(200);
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
webserver.begin();
}
void loop(){
char buff[64];
int len = 64;
webserver.processConnection(buff, &len);
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
if (buttonState1 == HIGH) {
if(K1 == 0){
digitalWrite(ledPinA, LOW);
K1=1; }
else{
digitalWrite(ledPinA, HIGH);
K1=0; }
delay (500) ; }
//------------------------
if (buttonState2 == HIGH) {
if(K2 == 0){
digitalWrite(ledPinB, LOW);
K2=1; }
else{
digitalWrite(ledPinB, HIGH);
K2=0; }
delay (500) ; }
//------------------------
if (buttonState3 == HIGH) {
if(K3 == 0){
digitalWrite(ledPinC, LOW);
K3=1; }
else{
digitalWrite(ledPinC, HIGH);
K3=0; }
delay (500) ; }
//------------------------
if (buttonState4 == HIGH) {
if(K4 == 0){
digitalWrite(ledPinD, LOW);
K4=1; }
else{
digitalWrite(ledPinD, HIGH);
K4=0; }
delay (500) ; }
//------------------------
if (stringComplete) {
Serial.println(inputString);
inputString = "";
stringComplete = false; }}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
stringComplete = true;
//GET DATA FROM DATA SERIAL PVC EX:SMS / VB.NET / MATLAB/JAVA/DELPHI etc
if (inChar == 'A') { digitalWrite(ledPinA, LOW); }
else if (inChar == 'a') { digitalWrite(ledPinA, HIGH); }
if (inChar == 'B') { digitalWrite(ledPinB, LOW); }
else if (inChar == 'b') { digitalWrite(ledPinB, HIGH); }
if (inChar == 'C') { digitalWrite(ledPinC, LOW); }
else if (inChar == 'c') { digitalWrite(ledPinC, HIGH); }
if (inChar == 'D') { digitalWrite(ledPinD, LOW); }
else if (inChar == 'd') { digitalWrite(ledPinD, HIGH); }
if (inChar == 'E') {
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW); }
else if (inChar == 'e') {
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH); }
}
}
//=====================================================