Info Get Post da Server

Ciao a tutti mi chiamo Fabrizio e con arduino sto approfondendo il mio percorso scolastico e avrei bisogno di qualche nozione sull’utilizzo del microcontrollore in funzione ai vari comportamenti di richieste GET e POST che non mi sono del tutto chiare!
Inizialmente ho creato un webserver su Arduino, accessibile da cellulare per comandare i vari pin-out relè e letture sensori per la casa ed ora mi chiedo come fare per creare un sito web server esterno che possa comandare Arduino grazie ad interfaccie grafica completamente migliorata sfruttando le integrazioni di vari linguaggi web.
Mi spiego meglio : dovrei semplicemente leggere i dati di temperatura dei miei 2 sensori da web da visualizzare su sito esterno quindi inserirli nella pagina e far rispondere ad arduino ai comandi che gli vengono inviati praticamente appoggiarsi ad un sito web creato utilizzando Arduino solo per eseguire funzioni e leggere valori su altro sito web tipo altervista.
La parte web non è un problema mi servirebbe qualche spunto da sketch per comprendere la comunicazione e il funzionamento visto che non saprei da quale sketch partire.Se qualcuno fosse così gentile da aiutarmi gli sarei davvero grato :slight_smile:
Grazie
Fabry

Sul forum ci sono un sacco di thread aperti sull'argomento, ti consiglio di fare una ricerchina prima di tutto ;)

Ciao grazie della risposta ma ho dato un occhio sul forum e come "get" vedo mille post con scritto di tutto ma non inerente ai miei dubbi cioè non trovo una guida esaustiva ! Hai qualche indicazione?

Che tu ti connetta ad arduino da un browser o da una pagina web su un server in qualche posto del mondo non fa molta differenza questo se la tua eth shield fa da webserver. Quindi da php in un ipotetico request dovrai mettere il "request metod", l'URI, path ecc come fai da client e poi elaborare la risposta lo sketch alla fine è lo stesso, se invece vuoi che sia arduino a spedire ogni tanto i parametri al tuo sito, allora dovrai configurarlo come client

Ciao , quindi ipoteticamente inserisco questo sketch come client arduino, mentre su sito in php per visualizzare i valori letti del sensore e i vari flag degli attuatori cosa dovrei scrivere?
Grazie

      #include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
byte server[] = { 64, 233, 187, 99 }; // Google

Client client(server, 80);

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting...");

  if (client.connect()) {
    Serial.println("connected");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Sono un po’ arrugginito col php lo usavo 5 anni fa quando avevo comprato uno spazio web, il mio php era un server e riceveva dati da un game on-line

per spedire la risposta usavo il curl, un servizio che i server free non ti danno se non paghi una quota extra annuale. Io non so quali parametri attivi hai nel tuo spazio web, tieni presente che il traffico lo paghi, hai delle soglie mensili che non devi superare

se può esserti utile questa è una base di partenza, non la soluzione, googlando qua e la trovi sicuramente quello che cerchi

programma php main in ascolto

$richiesta = htmlspecialchars($_GET['type_request']);
$nome_own = htmlspecialchars($_GET['name_own']);
$object_nome = htmlspecialchars($_GET['name_obj']);
$key_own = htmlspecialchars($_GET['key_own']);
$nome_creat = htmlspecialchars($_GET['name_creator']);
$url_scheda = htmlspecialchars($_GET['url_obj_sl']);
$dtime = date("Y/m/d h:i:s");  

If ($nome_creat == 'pablos' && $richiesta == 'connessione')

 {

      add_database($dtime,$nome_own,$object_nome,$key_own,$nome_creat,$url_scheda);
      $conn_message='CONNESSO AL SERVER - ';
      $send_data=$key_mess_send . $conn_message . $db_message ;
      

      // ******* invia stringa criptata  ******

      $InputString =$send_data;
      XOREncrypt($InputString, $KeyPhrase);
      $send_data=$InputString;
      url_send_info($url_scheda, $object_nome, $send_data);

 }

risposta del server

Function url_send_info($url_scheda, $key_mess_send, $send_data)
{
$posturl= $url_scheda;
$postvars=$send_data ;
    
 // INITIALIZZA TUTTE LE VARS

 $ch = curl_init($posturl);
 curl_setopt($ch, CURLOPT_POST      ,1);
 curl_setopt($ch, CURLOPT_POSTFIELDS    ,$postvars);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
 curl_setopt($ch, CURLOPT_HEADER      ,0);  // DO NOT RETURN HTTP HEADERS
 curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);  // RETURN THE CONTENTS OF THE CALL
 $Rec_Data = curl_exec($ch);
 curl_close($ch);
 
}

cifrature e decifrature dei messaggi in base64 molto elementare, ma sempre meglio che un dito in un occhio :slight_smile:

 function XOREncryption($InputString, $KeyPhrase){

    global $InputString;

    $KeyPhraseLength = strlen($KeyPhrase);

    for ($i = 0; $i < strlen($InputString); $i++){
        $rPos = $i % $KeyPhraseLength;
        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);  
        $InputString[$i] = chr($r);
    }

    return $InputString;

}

function XOREncrypt($InputString, $KeyPhrase){

    global $InputString;
    $InputString = XOREncryption($InputString, $KeyPhrase);
    $InputString = base64_encode($InputString);

    return $InputString;
}

function XORDecrypt($InputString, $KeyPhrase){

    global $InputString;
    $InputString = base64_decode($InputString);
    $InputString = XOREncryption($InputString, $KeyPhrase);
    return $InputString;

}

Salvataggio dati su database Mysql

Function add_database($dtime,$nome_own,$object_nome,$key_own,$nome_creat,$url_scheda){

global $db_message;
global $key_mess_send;
global $numeri_sringa;
global $pos_db_player;

@include 'config_cart.inc'; //contiene i dati del login al Db in file nascosto

     // connessione al database

     $conn = mysql_connect($db_host, $db_user, $db_password);
         //or die("Connessione non riuscita: verificare config.inc.php " . mysql_error()."
");

// Seleziona il  database
mysql_select_db($db_database, $conn) or die("Database inesistente...");

$numeri_A=$numeri_sringa;
$numeri_B=$numeri_sringa;
$numeri_C=$numeri_sringa;

$query = "INSERT INTO $db_tabella (giorno_ora, nome_owner, nome_ogg, id_owner, id_cartella, numeri_cartella_A, numeri_cartella_B, numeri_cartella_C) 

             VALUES ('$dtime','$nome_own', '$object_nome', '$key_own', '$url_scheda', '$numeri_A', '$numeri_B', '$numeri_C')";

$ri = mysql_db_query( $db_database, $query, $conn );


     if (!$ri) {
       $db_message='Errore durante inserimento al database.';
       $key_mess_send='20000000';

       mysql_close();  
     }

      else {

       $db_message='Inserimento database eseguito con successo.';
       $result = mysql_query("SELECT * FROM giocatori WHERE id_cartella='$url_scheda'");

      while($row = mysql_fetch_array($result)){
          $key_mess_send=$row['numero']+10000000;
         }   
            mysql_close();
       }
}

Wow! Ti ringrazio per tutto il materiale che mi hai postato immagino che sia più che sufficiente e probabilmente non ho ben chiaro come funzioni. Dunque per capire: la pagina php la inserisco come home.php .. Mentre per quanto riguarda gli altri codici? Come server utilizzerei altervista e lo sketch utilizzo quello Arduino Client giusto? Grazie

home o index, bisogna vedere come strutturi il sito, ma ha detto di non avere problemi lato html php

Si esatto... Difatti mi sa che dovrei dire base proprio terra terra! Eheh :) Help me!!! ;) Come posso fare?