Minggu, 02 November 2014

How Arduino Receive Data From URL Website

Simple code:
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); }
      }
    }
//=====================================================   
   
   
   

1 komentar:

  1. met siang master andy.......
    kayak komputer kecil ya......
    kira kira modul di atas bisa gak ya untuk membuat aplikasi seperti ini :

    suatu misal saya ingin menampilkan nilai 2counter di vb (GUI yang lain juga gak apa apa).
    masing masing counter menggunakan mikrokontroler.

    comunikasi antara mikrokontroler dengan GUI menggunakan internet (LAN).
    selain dapat di accses melalui PC nilai counter tersebut juga dapat di accses via android.
    nilai counter tersebut juga dapat di simpan diexel.

    untuk membuat aplikasi seperti tersebut di atas kira kira total biayanya berapa ya master????

    saya tunggu kabar baik dari master andy.....

    salam.
    joko.

    BalasHapus