chipKIT® Development Platform

Inspired by Arduino™

How to create a WebClient with XAMPP

Created Fri, 15 Mar 2013 20:37:22 +0000 by dnviti1994


dnviti1994

Fri, 15 Mar 2013 20:37:22 +0000

hi all, i have a problem: i am not able to connect chipkit ethernet shield through my home network to my home server. i need to do this because i have to read an analog temperature and sent it to my server so i can read it on my browser through a webpage made in PHP. Please can you explain me how to do this? i paste my starting code here (i'm italian, so everything is written in italian, sorry):

/*

  AUTORI: Viti Daniele, Pietro Broccolo, Ugolini Riccardo
  
  NOME PROGETTO: WebClient
  
  DESCRIZIONE PROGETTO:
  Il progetto consiste nel misurare la temperatura dell'aria
  tramite un sensore analogico LM35DZ ed inviare il dato ad un WebServer Apache
  attraverso un ChipKit Ethernet Shield ed un cavo Ethernet.
  
  ULTIMO AGGIORNAMENTO: 0.1.4 , IN DATA: 22/03/2013
  
  VERSIONE: 0.1.4
  
  CARATTERISTICHE DEGLI AGGIORNAMENTI:
  0.1.1
  1) Invio del valore tramite un potenziometro lineare 10Kohm
  2) Presentazione sul display presente, ma parziale
  ;
  0.1.2
  1) Inseriti metodi di notifica visiva (LED rosso)
  2) Stampa di display migliorata ed ordinata
  3) Inserite variabili di connessione
  4) Inserita stampa delle variabili di connessione su display e seriale
  ;
  0.1.3
  1) Sostituito potenziometro lineare 10Kohm con sensore LM35DZ
  2) Inserita formula per conversione valore analogico a grado centigrado
  ;
  0.1.4
  1) Aggiunti 2 LEDs RGB per le notifiche visive (STATUS e SERIALE)
  2) Inserito il codice associato ai led (dettagli in "NOTIFICHE VISIVE (0.1.4)")
  
  NOTIFICHE VISIVE (0.1.3):
  - Connessione in corso: Il LED lampeggia velocemente mentre il client tenta la connessione (10msec)
  - Connesso Acceso: Il LED rosso rimane in stato di ON, ma presenta un leggerissimo stato di OFF ad inzio ciclo (100msec)
  - Disconnesso Acceso: Il LED rosso rimane in stato di OFF, ma presenta un leggerissimo stato di ON ad inzio ciclo (100msec)
  - Connesso Spento: Il LED rosso rimane in stato di OFF permanente
  - Disconnesso Spento: Il LED rosso rimane in stato di OFF permanente
  
  NOTIFICHE VISIVE (0.1.4):
  - Connessione in corso: Il LED RGB STATUS alterna TUTTI I COLORI velocemente (10sec)
  - Connesso Acceso: Il LED RGB rimane acceso sul colore VERDE
  - Disconnesso Acceso: Il LED RGB rimane acceso sul colore ROSSO
  - Connesso Spento: Il LED RGB rimane acceso sul colore BLU
  - Disconnesso Spento: Il LED RGB diventa di colore BIANCO
  
  COMPONENTI:
  ;------------------------------------------------------------------------
  ;LCD Module Hitachi HD44780 4 righe * 20 colonne
  ;ARD.Pin  Simbolo Livello  Funzione
  ;=== ===  ======= =======  ========
  ; Gnd 1     Vss     -         0V
  ; +5V 2     Vdd     -         +5V
  ;     3     Vo      -         0..5V 20Kohm trimmer
  ; 8   4     RS     H/L        H: Input Dati
  ; 6   6     E      H,H->L     Attiva il segnale
  ; 5   11    DB4    H/L        D <--->	Bus a 4 fili
  ; 4   12    DB5    H/L        A <--->
  ; 3   13    DB6    H/L        T <--->
  ; 2   14    DB7    H/L        A <--->
  ; +5V 15    -      -          + Retroilluminazione LED
  ; Gnd 16    -      -          - Retroilluminazione LED
  
  ;------------------------------------------------------------------------
  ;Temperature Centigrade Sensor LM35DZ
  ____________________
  \       LM35       /
   |      DZ        |
    \  ___ __ ___  /
     | Gnd Vo Vdd |
      \__________/
      
  ;------------------------------------------------------------------------
  ;LED Rosso Standard e Resistore 10 Kohm
  
  Gnd -[10Kohm]- Gnd -D- Vss
  
*/

const int analogInPin = A0;  // Input analogico dove è collegato il sensore/potenziometro

float sensorValue = 0; // Valore letto dal sensore/potenziometro
float outputValue = 0;        // Valore di output analogico

#include <LiquidCrystal.h>
#include <chipKITEthernet.h>

//  LCD
#define rs  8
#define enable 6

#define d4  5
#define d5  4
#define d6  3
#define d7  2

#define  ROW 4
#define  COL 20

int i = 0;
int red = 78;
int green = 79;
int blue = 80;
int red2 = 81;
int green2 = 82;
int blue2 = 83;
int buzzer = 84;
byte mac[] = { 0x00,0x18,0x3E,0x00,0xFB,0x43 }; // inserire l'indirizzo di mac
byte ip[] = { 192,168,1,4 }; // Inserire l'indirizzo IP
byte gateway[] = { 192,168,1,1 }; // Inserire l'indirizzo IP del Gateway
byte subnet[] = { 255,255,255,0 }; // Inserire la subnet relativa alla classe di rete utilizzata
/*byte server[] = { 192,168,1,2 }; // Inserire l'IP del server al quale inviare i dati*/
byte dns1[] = {8,8,8,8};
byte dns2[] = {8,8,4,4};

const char * server = "www.google.com";
Client client(server, 80);
/*Client client(server, 80); // Inserire la porta attraverso la quale ci si vuole connettere*/

LiquidCrystal lcd(rs, enable, d4, d5, d6, d7);     // Imposta i pins dello schermo LCD 20x4

void setup() {
  
    analogWrite(buzzer, 255);
    delay(150);
    analogWrite(buzzer, 0);
  
  Serial.begin(115200);
  lcd.begin(COL, ROW);                       // LCD 20 colonne 4 righe
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);  
  pinMode(red2, OUTPUT);  
  pinMode(blue2, OUTPUT);  
  pinMode(green2, OUTPUT);
  lcd.clear();
  lcd.setCursor(0,0);
  
  Serial.println("Connessione in corso");
  
  for(int i = 5; i > 0; i--) { // Cicla per far blinkare il led velocemente mentre l'arduino tenta la connessione
  lcd.clear();
  lcd.print("Connessione in corso");
  analogWrite(red, 255);
  delay(150);
  analogWrite(red, 0);
  analogWrite(green, 255);
  delay(150);
  analogWrite(green, 0);
  analogWrite(blue, 255);
  delay(150);
  analogWrite(blue, 0);
  analogWrite(red, 255);
  Serial.println(i);
  lcd.setCursor(0,2);
  lcd.print(i);
  }
  
  Ethernet.begin(mac,ip,gateway,subnet,dns1,dns2);
  client.connect();
  
  // se la connessione è disponibile scrive "connesso"
  if (client.connected()) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Connesso!");
    Serial.println("Connesso!");
    // Esegue la richiesta HTTP
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
    analogWrite(red, 0);
         analogWrite(blue, 0);
    analogWrite(green, 255);
    
      analogWrite(buzzer, 255);
    delay(100);
    analogWrite(buzzer, 0);
    delay(50);
      analogWrite(buzzer, 255);
    delay(100);
    analogWrite(buzzer, 0);
    
    delay(1000);
  }
  
  else {
    // se la connessione non è disponibile scrive "Connessione Fallita"
    lcd.clear(); // Pulisce il display
    lcd.setCursor(0,0); //Setta il cursore del display a Colonna=0 e Riga=0
    lcd.print("Connessione Fallita");
    Serial.println("Connessione Fallita");
    analogWrite(green, 0);
         analogWrite(blue, 0);
    analogWrite(red, 255);
    
      analogWrite(buzzer, 255);
    delay(1000);
    analogWrite(buzzer, 0);
    
    delay(2000);
  }
  
}

void loop() {
  
  Serial.read();
  if(Serial.available() > 0)
  {
    analogWrite(red2, 0);
    analogWrite(blue2, 0);
    analogWrite(green2, 255);
  }
  else
  {
    analogWrite(green2, 0);
    analogWrite(blue2, 0);
    analogWrite(red2, 255);
  }
  
    
  // Se il server invia dati li cattura e li scrive sullo schermo in via sepeciale
  if (client.available()) {
    char c = client.read();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(c);
  }
  
  if(client.available()){
    
  sensorValue = analogRead(analogInPin);  // Legge il valore analogico da "A0"
  sensorValue = ((5.0 * sensorValue * 100.0)/1024.0)-7.6; // Converte il valore analogico in gradi celsius
  

if(sensorValue>0 && sensorValue<50){  
  lcd.setCursor(0,0);
  lcd.clear();
         lcd.print("Temp = ");     
         lcd.print(sensorValue);
         lcd.print(" ");
         lcd.print((char)223);
         lcd.print("C");
         Serial.println(sensorValue);
         
 // ------------------------------------------ CONNESSIONE -------------------------------------- //  
     
    
  if (client.connected()) {
    lcd.setCursor(0,2);
    lcd.print("Connesso al server!");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
         analogWrite(red, 0);
         analogWrite(blue, 0);
    analogWrite(green, 255);
  }

  if (!client.connected()) {
    lcd.setCursor(0,2);
    lcd.print("Disconnesso");
    client.stop();
         analogWrite(green, 0);
         analogWrite(blue, 0);
    analogWrite(red, 255);
  }
       
  // --------------------------------------------------------------------------------------------- //

}
else{
  
      analogWrite(buzzer, 255);
    delay(100);
    analogWrite(buzzer, 0);
    
         analogWrite(red, 0);
         analogWrite(green, 0);
         analogWrite(blue, 255);
         delay(5);
  
  lcd.setCursor(0,0);
  lcd.clear();
    lcd.setCursor(0,0);
         lcd.print("Spento" );
         
     if (client.connected()) {
    lcd.setCursor(0,2);
    lcd.print("Connesso al server!");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
         analogWrite(red, 0);
         analogWrite(blue, 0);
    analogWrite(green, 255);
  }

  if (!client.connected()) {
    lcd.setCursor(0,2);
    lcd.print("Disconnesso");
         analogWrite(green, 0);
         analogWrite(blue, 0);
    analogWrite(red, 255);
  }
  
}
analogWrite(red2, 0);
analogWrite(blue2, 0);
analogWrite(green2, 0);
delay(1000);
}


else{
  Serial.println("Riconnessione in corso");
  
  for(int i = 5; i > 0; i--) { // Cicla per far blinkare il led velocemente mentre l'arduino tenta la connessione
  lcd.clear();
  lcd.print("Riconnessione in corso");
  analogWrite(red, 255);
  delay(150);
  analogWrite(red, 0);
  analogWrite(green, 255);
  delay(150);
  analogWrite(green, 0);
  analogWrite(blue, 255);
  delay(150);
  analogWrite(blue, 0);
  analogWrite(red, 255);
  Serial.println(i);
  lcd.setCursor(0,2);
  lcd.print(i);
  }
  
  client.connect();
}
}

dnviti1994

Mon, 25 Mar 2013 13:36:18 +0000

UP PLEASE!!