Inviare un dato e ricevere una risposta da un server con Yun

Salve a tutti. Sono un totale neofita della programmazione intento a voler esplorare questo mondo iniziando da Arduino. Dopo aver giocherellato con la Uno, tra libri vari e guide, ho deciso di prendere una Yun per cominciare anche ad espandere all’Iot le mie minimali conoscenze (non è una scelta saggia, lo so… ma mi piace apprendere sul campo!).
Long story short sono alcuni giorni che sono impntanato su di un problema (parte di un progetto più ampio): inviare una richiesta ad un server (un codice di un lettore Rfid, nello specifico) ed attendere una risposta dal medesimo (risposta ovviamente “personalizzata”, per poi utilizzarla (non sto qui a scendere nei dettagli, perché il mio problema è proprio elementare al momento).
Il tutto per ora (e questa è la parte che farà ridere molti di voi) senza scoperchiare il vaso di Pandora relativi a Linino e company, che mi sono preposto di iniziare a studiare più in là, al fine, ovviamente, di sfruttare sempre di più le possibilità offerte dalla Yun.
Per ora vorrei rimanere nell’Ide di Arduino.
Da quello che ho trovato sul Web e (ovviamente) sulla Reference di questo sito, sembra possibile ai miei occhi profani; al principio avevo optato per HttpClient di Bridge, ma da quello che mi sembra non posso inviare una richiesta “personalizzata” (ossia contenente un codice che “attiva” una risposta. Sembra possibile solo Get “nomeSito.est”, ma non ad esempio un Get simile a quello nell’esempio dell’EthernetClient, ossia con parametri eventuali (tra i quali andrebbe anche il codice in questione) - (ovviamente sono apertissimo a qualsiasi tipo di smentita, il mio obiettivo fondamentale è apprendere).
Sicché, leggendo, mi è parso di capire che YunClient è l’equivalente per Yun di EthernetClient per Ethernet Shield, ho pensato di “adattare” un codice di prova concepito per quest’ultimo alle funzioni concepite per Yun.
Nemmeno a dirlo, ovviamente non funziona.
Nello specifico mi sono riferito a questo sito

ma ho anche provato ad adattare l’esempio contenuto nell’Ide di arduino relativa ad Ethernet Client.
Il codice “realizzato da me” è contenuto nel tag

#include <Bridge.h>
#include <YunClient.h>

//----------------------------------------------------------------------------------
// INIZIALIZZAZIONE
//----------------------------------------------------------------------------------

char sourceServer = “macrosolution.it”;
String dataLocation = “/arduino-test.json”;

String currentLine = “”; // Stinga per dati in ingresso
String currentRates = “”; // Stringa per i valori correnti
boolean readingRates = false; // Condizionale di lettura valori
const int requestInterval = 15000; // Intervallo di lettura dei dati (ms)
boolean requested; // Condizionale di lettura avvenuta dalla avvenuta connessione
long lastAttemptTime = 0; // Tempo trascorso dall’ultima connessione (ms)
String codice=“A456B978AA”;
//----------------------------------------------------------------------------------
// SETUP
//----------------------------------------------------------------------------------

void setup()
{ // { GRAFFA APERTURA SETUP

Serial.begin(9600); // Inizializzazione monitor seriale
digitalWrite(13, LOW);
delay(500);
Bridge.begin();
digitalWrite(13, HIGH);

YunClient client; // Inizializza lo YunCient
Serial.println(“Connessione al server…”);
if (client.connect(sourceServer, 80))
{ // { #1
Serial.println(“Effettuo la richiesta al server…”);
client.println(“GET /arduino-test.json?”+codice);
} // } #1
} // } GRAFFA CHIUSURA SETUP

//----------------------------------------------------------------------------------
// LOOP
//----------------------------------------------------------------------------------

void loop()
{ // { GRAFFA APERTURA LOOP
YunClient client; // Inizializza lo YunCient
if (client.connected())
{ // { #1
Serial.println(“Effettuo la richiesta al server…”);
client.println(“GET /arduino-test.json?/”+codice);
delay(1000);
if (client.available()) // Se ci sono byte in arrivo dal client
{ // { #2
char inChar = client.read(); // Legge i byte in arrivo dal server
currentLine += inChar; // Aggiunge i byte in ingresso alla fine della stringa -currentLine-
Serial.println(currentLine);
} // } #2
} // } #1

/*
else if(millis() - lastAttemptTime > requestInterval)
{ // { #3
connectToServer();
} // } #3
*/
delay(1000);
} // { GRAFFA CHIUSURA LOOP

//----------------------------------------------------------------------------------
// FUNZIONI DEFINITE
//----------------------------------------------------------------------------------

/*
void connectToServer ()
{ // { GRAFFA APERTURA connectToServer()
YunClient client; // Inizializza lo YunCient
Serial.println(“Connessione al server…”);
if (client.connect(sourceServer, 80))
{ // { #1
Serial.println(“Effettuo la richiesta al server…”);
client.println(“GET /arduino-test.json?”+codice);
} // } #1
lastAttemptTime = millis();
} // } GRAFFA CHIUSURA connectToServer()
*/

Il server che uso per questo “test” mi è stato gentilmente messo a disposizione da un amico programmatore, il quale tuttvia non possiede alcuna conoscenza relativa ad arduino né, purtroppo, molto tempo per dedicarsi ad alfabetizzarmi a dovere. Mi ha spiegato a grandi linee quello che devo fare. Devo inviare dei byte al server e quello risponderà, in maniera molto semplice.
Al momento, tuttavia, dal monitor seriale non arriva assolutamente nulla. Quindi non stabilisce nemmeno la connessione col server, suppongo.

Il codice possiede alcuni buchi (tipo variabili definite e non utilizzate), ma per ora mi interessa far funzionare questa comunicazione tra yun e questo server…

Qualche anima pia diposta ad illuminare un povero cieco?

Magari se mi dite anche le enormi mancanze a livello teorico che trapelano da questo codice, provvederò a studiare pian piano, per riuscire ad essere sempre più autonomo.

Grazie a tutti in anticipo e scusate per il Wall-of-text.

Non preoccupano tanto le carenze rivelate dal codice ma più quelle ammesse da te stesso. Come puoi pensare di instaurare una comunicazione remota con un server essendo alle primissime armi con Arduino. Vero che il sistema Wiring di Arduino mette a disposizione metodi di alto livello, ma come minimo per instaurare una comunicazione tra due dispositivi bisogna avere idea della pila di protocolli che si snoda tra i due, almeno localmente alle due macchine. Capisci che come la mette giù te è come chiedere ad un italiano di entrare in una stanza ed intrattenere un discorso con uno svedese senza sapere effettivamente che lingua parla. Copiare codici in giro e sperare che funzionino non ti porterà un passo in avanti nell'apprendimento. Hai all'attivo un po' di ore ad accendere LED su Arduino? :P Non conviene magari partire da qualcosa di più elementare per conoscere la piattaforma? Prima di instaurare una connessione con un server senza un protocollo fissato hai provato ad instaurare una connessione con un web server? Quelli che offrono le pagine web, il classico protocollo http, capito? Hai idea a grandi linee come funzionino i protocolli TCP, UDP e IP? Questi sono punti fondamentali in quello che vuoi fare tu. Una bella domanda che dovresti fare al tuo amico sarebbe "Che protocollo di comunicazione accetta in ingresso il server, TCP o UDP?", poi "A livello applicativo che specifiche ha il protocollo di comunicazione con il quale mi devo interfacciare?". Queste domande di solito si pongono a se stessi, infatti in fase di test è comodo installare un applicativo server di prova sulla propria macchina, cosi da aver effettivo controllo completo sul sistema. Sono stato anche un minimo di aiuto?

Si. Ti ringrazio. Già sapere quali domande pormi è un passo in avanti :)