<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Controllo remoto Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/controllo-remoto/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/controllo-remoto/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Tue, 11 Sep 2018 07:13:25 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Controllo remoto Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/controllo-remoto/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Come aggiornare l&#8217; host no-ip tramite Arduino ethernet</title>
		<link>https://logicaprogrammabile.it/aggiornare-no-ip-arduino-ethernet/</link>
					<comments>https://logicaprogrammabile.it/aggiornare-no-ip-arduino-ethernet/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 09 Nov 2011 10:37:02 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino ethernet]]></category>
		<category><![CDATA[Base64]]></category>
		<category><![CDATA[Controllo remoto]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2191</guid>

					<description><![CDATA[<p>Creare un update client per sincronizzare l&#8217; host no-ip.com con l&#8217;indirizzo del router L&#8217;articolo precedente illustrava come creare un account no-ip.com con relativo host che tenesse traccia dell&#8217;ip del router &#8220;domestico&#8221;. Questa procedura richiede l&#8217;installazione di un update client sul pc, nella rete domestica, capace...</p>
<p>The post <a href="https://logicaprogrammabile.it/aggiornare-no-ip-arduino-ethernet/">Come aggiornare l&#8217; host no-ip tramite Arduino ethernet</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Creare un update client per sincronizzare l&#8217; host no-ip.com con l&#8217;indirizzo del router</h1>
<p>L&#8217;articolo precedente illustrava come creare un account <strong>no-ip.com</strong> con relativo host che tenesse traccia dell&#8217;ip del router &#8220;domestico&#8221;. Questa procedura richiede l&#8217;installazione di un update client sul pc, nella rete domestica, capace di aggiornare periodicamente l&#8217;host remoto.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/11/update.jpg"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-2202 size-full" title="update" src="https://logicaprogrammabile.it/wp-content/uploads/2011/11/update.jpg" alt="host no ip tutorial Arduino" width="298" height="246" /></a></p>
<p>L&#8217;operazione risulta scomoda poiché il PC deve rimanere acceso per effettuare l&#8217;aggiornamento. Fortunatamente esiste un metodo basato su richiesta <strong>http</strong> che permette di utilizzare direttamente <strong>Arduino</strong> per sincronizzare l&#8217;host con l&#8217;ip del router.</p>
<p><span id="more-2191"></span>La richiesta di aggiornamento va indirizzata a uno di questi URL</p>
<p style="text-align: center;"><strong>http://dynupdate.no-ip.com/nic/update</strong></p>
<p style="text-align: center;"><strong>https://dynupdate.no-ip.com/nic/update</strong></p>
<p>mentre la struttura della richiesta deve seguire questo formato</p>
<pre class="lang:xhtml decode:true ">GET /nic/update?hostname=Nomehost&amp;myip=IndirizzoIP HTTP/1.0
Host: dynupdate.no-ip.com
Authorization: Basic NomeUtentePasswordBase64
User-Agent: NomeClient/Versione IndirizzoMail</pre>
<p>&nbsp;</p>
<p>dove</p>
<p><strong>NomeHost</strong> = Il nome dell&#8217;host come registrato nella procedura <strong>Create Host</strong> del sito <strong>no-ip.com</strong><br />
<strong>IndirizzoIP</strong> = Qui va messo l&#8217;indirizzo ip che vogliamo associare all&#8217;host remoto<br />
<strong>NomeUtentePasswordBase64</strong> = Qui dobbiamo inserire il nome utente e la password del nostro account no-ip in formato <a href="http://it.wikipedia.org/wiki/Base64" target="_blank">Base64</a>. Il nome utente e la password vanno separati da un segno di due punti (<strong>Nomeutente:Password</strong>)<br />
<strong>NomeClient</strong> = Il nome del client che esegue l&#8217;aggiornamento (Nome di libera scelta)<br />
<strong>Versione</strong> = La versione del client che esegue l&#8217;aggiornamento (Nome di libera scelta)<br />
<strong>IndirizzoMail</strong> = il nostro indirizzo mail (Mail di libera scelta)</p>
<p>quindi la richiesta assumerà questa struttura</p>
<pre class="lang:xhtml decode:true ">GET /nic/update?hostname=host.no-ip.com&amp;myip=192.168.1.1 HTTP/1.0
Host: dynupdate.no-ip.com
Authorization: Basic aW86YW1vIGlsIHRhZWt3b25kbw==
User-Agent: arduino_ethernet/1.0 info@gmail.com</pre>
<p>&nbsp;</p>
<p>Il problema principale è che <strong>Arduino</strong> non si riesce a ottenere, direttamente e in modo semplice,  l&#8217;ip dinamico del router per poterlo inserire nella richiesta http. Fortunatamente omettendo totalmente questo parametro, il servizio  <strong>dynupdate.no-ip.com</strong> utilizza l&#8217;ip della connessione che corrisponde proprio all&#8217;indirizzo dinamico del nostro router. La richiesta, per funzionare, va riscritta in questo modo:</p>
<pre class="lang:xhtml decode:true ">GET /nic/update?hostname=host.no-ip.com HTTP/1.0
Host: dynupdate.no-ip.com
Authorization: Basic aW86YW1vIGlsIHRhZWt3b25kbw==
User-Agent: arduino_ethernet/1.0 info@gmail.com</pre>
<p>&nbsp;</p>
<p>Utilizziamo per questo test direttamnete lo scketch di esempio proposto dall&#8217;IDE (File-&gt;Examples-&gt;Ethernet-&gt;WebClient) e modifichiamolo secondo le nostre esigenze.</p>
<p>Per creare la connessione, nello skecth non è possibile immettere direttamente l&#8217;url del servizio (<strong>dynupdate.no-ip.com</strong>) ma il suo relativo indirizzo ip ottenibile tramite il sito<a href="http://www.mostraip.it/LocalizzaSito.aspx" target="_blank"> mostraip.it.</a></p>
<p>Modifichiamo il codice:</p>
<pre class="lang:arduino decode:true ">#include &lt;Dhcp.h&gt;
#include &lt;Dns.h&gt;
#include &lt;Ethernet.h&gt;
#include &lt;EthernetClient.h&gt;
#include &lt;EthernetServer.h&gt;
#include &lt;EthernetUdp.h&gt;
#include &lt;SPI.h&gt;


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac ethernet
byte ip[] = { 192, 168, 1, 190 }; //indirizzo locale dell’Arduino
byte server[] = {8, 23, 224, 120}; //dynupdate.no-ip.com

//creo un client che punta al
//servizio dynupdate.no-ip.com sulla porta 80
EthernetClient client;

void setup() {
  //Avvio la connessione
  Ethernet.begin(mac, ip);
  //inizializzo la seriale
  Serial.begin(9600);
  //aspetto che il chip wiznet sia inizializzato
  delay(1000);

  Serial.println("Connessione in corso…");

  //se la connessione avviene con successo
  //invio la richiesta http
  if (client.connect(server, 80)) {
    Serial.println("Connesso");

    client.println("GET / nic / update ? hostname = host.no - ip.com HTTP / 1.0");
    client.println("Host: dynupdate.no - ip.com");
    client.println("Authorization: Basic aW86YW1vIGlsIHRhZWt3b25kbw == ");
    client.println("User - Agent: arduino_ethernet / 1.0 info@gmail.com");

    client.println();
  }
  else
  {
    //Problemi nella connessione
    Serial.println("connessione fallita!");
  }
}

void loop()
{
  //restituisco il messaggio inviato dal servizio
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  //Quando il server si disconnette fermo il client
  if (!client.connected()) {
    Serial.println();
    Serial.println("Disconessione");
    client.stop();

    //ciclo infinito
    for (;;)
      ;
  }
}</pre>
<p>&nbsp;</p>
<p>Questo procedimento, secondo me, risolve il fastidioso problema di tenere il pc accesso per eseguire la sincronizzazione tra l&#8217;ip del router e l&#8217;host remoto, permettendo quindi di creare soluzioni web-based impiegando Arduino.</p>
<p>In allegato trovate un semplice programma che vi permette di convertire il vostro nome utente e la password in una stringaBase64, per far girare il programma dovete avere installato il .net framework 2.0</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/11/ConvertBase64.zip">ConvertBase64</a></p>
<p>The post <a href="https://logicaprogrammabile.it/aggiornare-no-ip-arduino-ethernet/">Come aggiornare l&#8217; host no-ip tramite Arduino ethernet</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/aggiornare-no-ip-arduino-ethernet/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Come controllare Arduino direttamente da internet</title>
		<link>https://logicaprogrammabile.it/come-controllare-arduino-da-internet/</link>
					<comments>https://logicaprogrammabile.it/come-controllare-arduino-da-internet/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 26 Oct 2011 13:54:51 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino ethernet]]></category>
		<category><![CDATA[Controllo remoto]]></category>
		<category><![CDATA[DDNS]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1960</guid>

					<description><![CDATA[<p>Come accedere da remoto per controllare Arduino Una funzionalità sempre utile è la possibilità di accedere alle risorse della board Arduino tramite un collegamento internet. Questa operazione non è particolarmente difficile anche se i passaggi da eseguire sono diversi, questo tutorial permette di controllare Arduino...</p>
<p>The post <a href="https://logicaprogrammabile.it/come-controllare-arduino-da-internet/">Come controllare Arduino direttamente da internet</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come accedere da remoto per controllare Arduino</h1>
<p>Una funzionalità sempre utile è la possibilità di accedere alle risorse della board Arduino tramite un collegamento internet. Questa operazione non è particolarmente difficile anche se i passaggi da eseguire sono diversi, questo tutorial permette di controllare Arduino da remoto.<br />
La prima cosa da risolvere è rintracciare l&#8217;indirizzo ip del nostro router per accedere alla rete locale dove è collegato l&#8217;Arduino. Solitamente l&#8217;ip dei router è dinamico, quindi può cambiare inavvertitamente rendendo impossibile conoscerlo da una postazione remota. Fortunatamente esistono dei servizi che risolvono questa necessità, permettendo, tramite un piccolo software che gira sul pc (o in alcuni casi direttamente sul router locale) di aggiornare un servizio web che memorizza l&#8217;indirizzo del router locale.</p>
<p>Il servizio che ho scelto per questo articolo è offerto dal sito <a href="http://www.noip.com/" target="_blank"><strong>no-ip.com</strong></a>. Prima di utilizzare le sue funzioni dobbiamo creare un account (free) compilando il relativo form</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/RegNoIP.jpg"><img decoding="async" class="aligncenter size-medium wp-image-2159" title="RegNoIP" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/RegNoIP-172x300.jpg" alt="Registrazione al servizio no ip" width="172" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/RegNoIP-172x300.jpg 172w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/RegNoIP.jpg 447w" sizes="(max-width: 172px) 100vw, 172px" /></a></p>
<p><span id="more-1960"></span>Una volta ottenuto, eseguiamo il login per accedere alla pagina dei servizi. Clicchiamo sul link <strong>Hosts/Redirects</strong> e poi sul link <strong>Add Host</strong></p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/AddHost.jpg"><img decoding="async" class="aligncenter size-medium wp-image-2161" title="AddHost" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/AddHost-300x268.jpg" alt="Aggiungi Host no ip" width="300" height="268" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/AddHost-300x268.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/AddHost.jpg 907w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>compiliamo i relativi campi che permettono di associare un<span style="text-decoration: underline;"> host al nostro indirizzo ip corrente</span>.<br />
Nel campo <strong>Hostname</strong> inseriamo un nome che identificherà il nostro host, la combo box elenca i nomi di dominio disponibili, selezioniamone uno a piacere tra quelli free.<br />
Selezioniamo tramite le checkbox l&#8217;<strong>Host Type</strong>, per la nostra applicazione  va bene quello di default (<strong>DNS Host(A)</strong>).<br />
Nella casella<strong> Ip Address</strong> sarà presente l&#8217;indirizzo attuale del nostro router.<br />
Concludiamo la creazione dell&#8217;host cliccando sul pulsante<strong> Create Host</strong>.</p>
<p>Ora scarichiamo l&#8217;utility che aggiornerà l&#8217;host con l&#8217;indirizzo ip del router locale. Clicchiamo sul link <strong>Download Client</strong>:</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/DownClient.jpg"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2162" title="DownClient" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/DownClient-300x166.jpg" alt="Download Client" width="300" height="166" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/DownClient-300x166.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/DownClient.jpg 505w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>selezioniamo il sistema operativo in uso sul computer, eseguiamo il download e successivamente la semplice installazione.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Download.jpg"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2163" title="Download" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Download-300x238.jpg" alt="" width="300" height="238" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Download-300x238.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/Download.jpg 693w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Una volta installato il client sul pc, eseguiamolo per configurare le prime impostazioni. Inseriamo innanzitutto<strong> l&#8217;indirizzo mail</strong> e la <strong>password</strong> relativi all&#8217;account <strong>no-ip.com</strong> precedentemente creato</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Namepsw.jpg"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2165" title="Namepsw" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Namepsw-300x174.jpg" alt="Nome utente e password" width="300" height="174" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Namepsw-300x174.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/Namepsw.jpg 505w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Una volta effettuato l&#8217;accesso, il client ci invita a selezionare l&#8217;host da aggiornare, spuntiamo la checkbox relativa all&#8217;host creato precedentemente</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/SelHost.jpg"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2166" title="SelHost" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/SelHost-172x300.jpg" alt="" width="172" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/SelHost-172x300.jpg 172w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/SelHost.jpg 281w" sizes="auto, (max-width: 172px) 100vw, 172px" /></a></p>
<p>salviamo per rendere operativo l&#8217;aggiornamento dell&#8217;ip.<br />
Nella sezione preferenze del client spuntiamo la voce per eseguire automaticamente il programma all&#8217;accesso del sistema operativo.</p>
<p>Ritornando nella pagina<strong> Menage Host</strong> sul sito no-ip potremmo conoscere costantemente l&#8217;indirizzo del router locale da qualsiasi posizione della rete Internet.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/IpRouter.jpg"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2167" title="IpRouter" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/IpRouter-300x76.jpg" alt="" width="300" height="76" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/IpRouter-300x76.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/IpRouter.jpg 712w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h3>Configurare Arduino Ethernet per rispondere alle richieste web</h3>
<p>Per semplicità utilizzerò lo scketch di esempio <strong>Webserver</strong> (dall&#8217;IDE arduino <span style="text-decoration: underline;">File-&gt;Examples-&gt;Ethernet-&gt;WebServer</span>), modifichiamo l&#8217;indirizzo ip dell&#8217;Arduino con un indirizzo compatibile con la nostra rete locale. Nel mio caso ho lasciato quello di default 192.168.1.177.</p>
<p>Verifichiamo tramite un pc della rete locale che l&#8217;Arduino risponda alle richieste http, apriamo il browser e nella barra degli indirizzi scriviamo l&#8217;ip della board Arduino (192.168.1.177) e premiamo invio. In assenza di problemi dovremmo ottenere qualcosa del genere</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ArduinoRisp.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2169" title="ArduinoRisp" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ArduinoRisp.jpg" alt="" width="288" height="251" /></a></p>
<h3>Configurare il router per le richieste remote</h3>
<p>Questa è la parte più delicata perchè cambia da router a router ma teoricamente è necessario utilizzare la sezione <strong>virtual server</strong> del router, inserire nell&#8217;apposito campo l&#8217;indirizzo ip della board Arduino e sbloccare la porta 80 per il relativo indirizzo. In questo modo le richieste http remote verranno processate dalla board Arduino.</p>
<h3>Collaudare il sistema</h3>
<p>Ora tutto è pronto per il test finale. Da una postazione remota collegata ad internet apriamo il browser e digitiamo il nome dell&#8217;host come definito nella pagina<strong> Menage Host</strong> del sito no-ip.com, se tutto è stato impostato correttamente otterremo la risposta dell&#8217;Arduino cosi come nella prova locale.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Remoto.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2170" title="Remoto" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Remoto.jpg" alt="" width="416" height="267" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/Remoto.jpg 416w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/Remoto-300x192.jpg 300w" sizes="auto, (max-width: 416px) 100vw, 416px" /></a></p>
<p>In questo modo potremmo accedere alle risorse dell&#8217;Arduino per leggere dati o per pilotare i suoi pin digitali. Vi invito a leggere gli articoli precedenti per approfondire l&#8217;argomento.</p>
<p>The post <a href="https://logicaprogrammabile.it/come-controllare-arduino-da-internet/">Come controllare Arduino direttamente da internet</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/come-controllare-arduino-da-internet/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Ethernet Shield controllo remoto via web con http</title>
		<link>https://logicaprogrammabile.it/arduino-ethernet-shield-controllo-remoto-via-web-con-http/</link>
					<comments>https://logicaprogrammabile.it/arduino-ethernet-shield-controllo-remoto-via-web-con-http/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 31 Aug 2011 14:39:46 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Controllo remoto]]></category>
		<category><![CDATA[Ethernet Shield]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[Web Server]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1883</guid>

					<description><![CDATA[<p>Come realizzare un controllo remoto con Arduino basato su http Il mondo è sempre più connesso, non solo le persone sono presenti su internet ma anche gli oggetti, tramite semplici circuiti, possono collegarsi alla rete, condividendo dati ed interagendo con l&#8217;ambiente, acquisendo grandezze fisiche (tramite...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-ethernet-shield-controllo-remoto-via-web-con-http/">Arduino Ethernet Shield controllo remoto via web con http</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Come realizzare un controllo remoto con Arduino basato su http </h1>


<p>Il mondo è sempre più connesso, non solo le persone sono presenti su internet ma anche gli oggetti, tramite semplici circuiti, possono collegarsi alla rete, condividendo dati ed interagendo con l&#8217;ambiente, acquisendo grandezze fisiche (tramite sensori) o pilotando carichi utilizzando degli attuatori.</p>
<p>Controllare da remoto uno di questi dispositivi è una operazione affascinante sia per l&#8217;utilità di questa tecnica sia, perché no, far stupire i nostri amici accendendo una luce di casa tramite web!</p>
<p>Per chi è alle prime esperienze con <strong>Arduino</strong>, potrebbe pensare che la realizzazione di questo circuito possa essere complicato e costoso.</p>
<p>Fortunatamente il materiale necessario si riduce a una board <strong>Arduino UNO</strong> e all&#8217;Ethernet shield, più qualche componente esterno.</p>
<p>In questo articolo preferisco fare un piccolo accenno nel descrivere il funzionamento del sistema all&#8217;interno della rete lan.</p>
<p>Per il controllo remoto, bisogna eseguire alcune configurazioni aggiuntive che vedremmo successivamente.<br />Lo schema illustra il funzionamento del progetto:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1891 size-full" title="EthernetShield" src="https://logicaprogrammabile.it/wp-content/uploads/2011/08/EthernetShield.gif" alt="Controllo Remoto con Ethernet Shield ed Arduino UNO " width="390" height="525" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/08/EthernetShield.gif 390w, https://logicaprogrammabile.it/wp-content/uploads/2011/08/EthernetShield-222x300.gif 222w" sizes="auto, (max-width: 390px) 100vw, 390px" /></p>
<p><span id="more-1883"></span>I pc della rete e l&#8217;<strong>Arduino UNO</strong> (con ethernet shield) sono collegati tra loro tramite uno switch.</p>
<p>Il pc eseguirà, usando un browser, delle richieste http, per recuperare, ad esempio, il valore di una tensione applicata su un pin analogico, oppure accendere o spegnere un led, applicato su un pin digitale in uscita.</p>
<p>Colleghiamo la shield ethernet al nostro <strong>Arduino UNO</strong>, inseriamo un cavo lan dritto, (che dal connettore rg45 dello shield si collega ad una porta qualsiasi dello switch), inseriamo il cavo USB (che dall&#8217;Arduino UNO si collega alla porta del pc) e diamo alimentazione a tutto il sistema.</p>
<p>Apriamo l&#8217;IDE di Arduino e scriviamo questo codice:</p>
<pre class="lang:arduino decode:true">//Librerie impiegate per il progetto
#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;

//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {10, 192, 1, 251};

//creo una variabile char per memorizzare i byte letti dal client
char Data_RX;

//creao un oggetto server che rimane in ascolto sulla porta
//specificata
Server ArduinoServer(80);

void setup()
{
  //inizializza lo shield con il mac e l'ip
  Ethernet.begin(mac, ip);
  //inizializza l'oggetto server
  ArduinoServer.begin();
}

void loop()
{
  //fai qualcosa!
  delay(10);
}</pre>
<p>I commenti nel codice spiegano a grandi linee il funzionamento dello stesso. Dopo aver inserito le due librerie che permettono di interfacciarsi all&#8217;ethernet shield, definiamo due array di byte, uno che contiene l&#8217;indirizzo fisico della scheda di rete (MAC address) e l&#8217;altro che contiene <a href="http://it.wikipedia.org/wiki/Indirizzo_ip" target="_blank" rel="noopener">l&#8217;indirizzo ip</a>.</p>
<p>Successivamente ho creato un oggetto Server che permette di rimanere in ascolto sulla porta specificata, in questo caso la porta 80, proprio quella utilizzata dal protocollo http.</p>
<p>La variabile Data_RX verrà impiegata successivamente per memorizzare i byte provenienti dal client.</p>
<p>Dentro il blocco<strong> setup()</strong> ci sono due importanti funzioni, la prima (<strong>Ethernet.begin(mac, ip);</strong>) serve per inizializzare il chip <strong>WIZnet</strong> con l&#8217;indirizzo<strong> mac</strong> e l&#8217;indirizzo <strong>IP</strong>, la seconda (<strong>ArduinoServer.begin();</strong>) avvia il server e lo mette in ascolto sulla porta 80 per le avvenutali richieste dei client.</p>
<p>Nel blocco <strong>loop()</strong> ho inserito un ritardo di 10ms, per il momento non eseguiamo altro.</p>
<p>Questo codice è utile per verificare, tramite un semplice <strong>ping</strong>, se l&#8217;ethernet shield è correttamente configurata e se risponde alle interrogazioni dei client.</p>
<p>Apriamo una finestra dei prompt dei comandi (Start-&gt;Esegui-&gt;cmd.exe)</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1898 size-full" title="Prompt dei comandi" src="https://logicaprogrammabile.it/wp-content/uploads/2011/08/cmd.jpg" alt="Arduino prompt dei comandi" width="412" height="223" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/08/cmd.jpg 412w, https://logicaprogrammabile.it/wp-content/uploads/2011/08/cmd-300x162.jpg 300w" sizes="auto, (max-width: 412px) 100vw, 412px" /></p>
<p>Digitiamo il comando <strong>ping</strong> seguito dall&#8217;indirizzo <strong>ip</strong> che abbiamo specificato nel codice dello skecth, nel mio caso:</p>
<p style="text-align: center;"><strong>ping 10.192.1.251</strong></p>
<p>se i collegamenti sono corretti, e il codice viene caricato senza intoppi, otterremo la risposta della scheda come illustrato di seguito:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1901 size-full" title="Test Ping" src="https://logicaprogrammabile.it/wp-content/uploads/2011/08/ping.jpg" alt="Arduino ethernet shield test ping" width="668" height="337" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/08/ping.jpg 668w, https://logicaprogrammabile.it/wp-content/uploads/2011/08/ping-300x151.jpg 300w" sizes="auto, (max-width: 668px) 100vw, 668px" /></p>
<p>Questo semplice test ci permette di escludere problemi di alimentazione della board o errori doviti al cavo di collegamento.</p>
<h5>Informazioni base su come configurare l&#8217;indirizzo ip</h5>
<p>Certamente tutti voi sapete come configurare un indirizzo ip nella rete, ma penso sia necessario, per chi è alle prime armi, scrivere una piccola nota.<br />L&#8217;indirizzo ip identifica univocamente un dispositivo nella rete, probabilmente se utilizzate un router, questo assegnerà in modo automatico un indirizzo ad ogni dispositivo collegato (<a href="http://it.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol" target="_blank" rel="noopener">DHCP</a>).</p>
<p>Per eseguire questi esperimenti dobbiamo disattivare il DHCP (sebbene sia possibile sfruttare questa funzione con Arduino ritengo, per semplicità, di non impiegarla) ed assegnare un indirizzo ip statico univoco ad ogni dispositivo della vostra rete.<br />Per fare ciò dovete andare nelle impostazioni del router e disattivare DHCP, poi per ogni pc della vostra rete, assegnate un indirizzo ip utilizzando le impostazioni della connessione di rete, tramite il pannello di controllo. Potete seguire questo link che mostra un video su come eseguire questa operazione</p>
<p style="text-align: center;">http://www.webip.info/cambiare_ip_windows_xp.php</p>
<p style="text-align: left;">Questo tutorial, invece, è per chi possiede Windows 7</p>
<p style="text-align: center;"><blockquote class="wp-embedded-content" data-secret="mbdeJAXRNN"><a href="https://www.elettroaffari.it/windows/windows-7/4541/come-impostare-indirizzo-ip-statico-windows-7/">Come Impostare un Indirizzo IP Statico su Windows</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Come Impostare un Indirizzo IP Statico su Windows&#8221; &#8212; ElettroAffari.it" src="https://www.elettroaffari.it/windows/windows-7/4541/come-impostare-indirizzo-ip-statico-windows-7/embed/#?secret=VwI2n6DzZl#?secret=mbdeJAXRNN" data-secret="mbdeJAXRNN" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p style="text-align: left;">Ad esempio potremmo impostare il nostro pc con l&#8217;indirizzo 192.168.1.10 e la nostra Ethernet Shield con indirizzo 192.168.1.20</p>
<h4>Come rispondere ai client</h4>
<p>Una volta definiti gli indirizzi ip dei dispositivi della rete, possiamo iniziare a scrivere il codice che effettivamente risponde alle richieste dei client.<br />All&#8217;interno del blocco <strong>loop()</strong> bisogna creare un oggetto dalla classe Client, necessario ad ascoltare (listening) le richieste dei client.</p>
<p><br />L&#8217;idea di base è che il server aspetta la connessione di un client, controlla se ci sono dati da leggere e di conseguenza crea un oggetto Client.</p>
<pre class="lang:arduino decode:true">//Ascolto le richieste dei client controllo se ci sono dati da leggere
//e creo un oggetto relativo a client che sta interrogando l'Ethernet shield
Client pc_client = ArduinoServer.available();</pre>
<p>La funzione <strong>ArduinoServer.available()</strong> non è bloccante quindi viene eseguita ciclicamente all&#8217;interno del blocco <strong>loop()</strong>, di conseguenza il valore restituito dalla funzione in mancanza di una richiesta <strong>client</strong> è <strong>false</strong>.</p>
<p>E&#8217; necessario quindi controllare se l&#8217;oggetto pc_client istanziato sia diverso da <strong>false</strong> prima di poter instaurare la connessione.</p>
<pre class="lang:arduino decode:true">//Ascolto le richieste dei client controllo se ci sono dati da leggere
//e creo un oggetto relativo a client che sta interrogando l'Ethernet shield
Client pc_client = ArduinoServer.available();

//controllo se pc_client è true
if (pc_client != false)
{
  //se pc_client è true continuo ad utilizzarlo...
}</pre>
<p>All&#8217;interno del blocco <strong>if</strong> utilizzo un ciclo <strong>while</strong> per eseguire il codice necessario a scambiare dati tra client e server fintanto che la connessione con il client è attiva</p>
<pre class="lang:arduino decode:true">//Ascolto le richieste dei client controllo se ci sono dati da leggere
//e creo un oggetto relativo a client che sta interrogando l'Ethernet shield
Client pc_client = ArduinoServer.available();

//controllo se pc_client è diverso da false
if (pc_client != false)
{
  //controllo se il client è connesso
  while (pc_client.connected())
  {
    //eseguo questo codice fintanto che il client è connesso...
  }
}</pre>
<p>Riassumendo, quando la connessione è stabilita, <strong>Arduino</strong> esegue il codice all&#8217;interno del blocco <strong>while</strong>, questa è la parte più interessante perchè possiamo leggere e scrivere dati attraverso il protocollo di comunicazione http.</p>
<p>Continuiamo controllando se effettivamente ci sono byte da leggere impiegando la funzione <strong>read()</strong> dell&#8217;oggetto pc_client:</p>
<pre class="lang:arduino decode:true">//Ascolto le richieste dei client controllo se ci sono dati da leggere
//e creo un oggetto relativo a client che sta interrogando l'Ethernet shield
Client pc_client = ArduinoServer.available();

//controllo se pc_client è true
if (pc_client != false)
{
  //controllo continuamente che il client sia connesso
  while (pc_client.connected())
  {
    //Controllo se ci sono byte disponibili per la lettura
    if (pc_client.available())
    {
      //leggo i byte disponibili
      //provenienti dal client
      Data_RX = pc_client.read();
    }
  }
}</pre>
<p> </p>
<p>Ora eseguiamo un semplice test per verificare che il codice sin qui scritto funzioni.</p>
<p>Per avere un riscontro utilizziamo la classe<strong> Serial</strong> per inviare informazioni di debug tramite <strong>Serial Monitor</strong>. Inizializziamo, tramite <strong>Serial.Begin(9600)</strong>, la porta seriale nel blocco <strong>setup()</strong>.</p>
<p>Adesso posso controllare il contenuto della variabile <strong>Data_RX</strong> inviandoli al Serial Monitor.</p>
<pre class="lang:arduino decode:true">//Ascolto le richieste dei client controllo se ci sono dati da leggere
//e creo un oggetto relativo a client che sta interrogando l'Ethernet shield
Client pc_client = ArduinoServer.available();

//controllo se pc_client è true
if (pc_client != false)
{
  //controllo continuamente che il client sia connesso
  while (pc_client.connected())
  {
    //Controllo se ci sono byte disponibili per la lettura
    if (pc_client.available())
    {
      //leggo i byte disponibili
      //provenienti dal client
      Data_RX = pc_client.read();

      //invio i dati letti al Serial Monitor
      Serial.write(Data_RX);
    }
  }
}</pre>
<p> </p>
<p>Apriamo <strong>Serial Monitor</strong> con il relativo pulsante</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1912 size-full" title="SerialMonitor" src="https://logicaprogrammabile.it/wp-content/uploads/2011/08/SerialMonitor.jpg" alt="Serial Monitor" width="338" height="289" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/08/SerialMonitor.jpg 338w, https://logicaprogrammabile.it/wp-content/uploads/2011/08/SerialMonitor-300x256.jpg 300w" sizes="auto, (max-width: 338px) 100vw, 338px" /></p>
<p>Avviamo il nostro browser preferito, su un pc nella rete dove è collegato l&#8217;Arduino con Ethernet shield, e nella barra degli indirizzi digitiamo l&#8217;ip assegnato via codice all&#8217;ethernet shield.</p>
<p>Il browser eseguirà una richiesta <strong>GET</strong> che sarà elaborata dall&#8217;Arduino e visualizzata sul serial monitor.</p>
<p>Ecco il risultato:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1914 size-full" title="indirizzoIP" src="https://logicaprogrammabile.it/wp-content/uploads/2011/08/indirizzoIP.jpg" alt="Inserire indirizzo ip arduino" width="246" height="123" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1913 size-full" title="rispostaGET" src="https://logicaprogrammabile.it/wp-content/uploads/2011/08/rispostaGET.jpg" alt="Dati inviati dal browser all'arduino" width="347" height="231" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/08/rispostaGET.jpg 347w, https://logicaprogrammabile.it/wp-content/uploads/2011/08/rispostaGET-300x199.jpg 300w" sizes="auto, (max-width: 347px) 100vw, 347px" /></p>
<p>Anche in questo caso questo semplice test ci da la conferma che il codice appena scritto funziona egregiamente.</p>
<p>Continuiamo ad aggiungere il codice di risposta che l&#8217;Arduino invierà al browser che ha effettuato la richiesta GET</p>
<pre class="lang:arduino decode:true">//Ascolto le richieste dei client controllo se ci sono dati da leggere
//e creo un oggetto relativo a client che sta interrogando l'Ethernet shield
Client pc_client = ArduinoServer.available();

//controllo se pc_client è true
if (pc_client)
{
  //controllo continuamente che il client sia connesso
  while (pc_client.connected())
  {
    //Controllo se ci sono byte disponibili per la lettura
    if (pc_client.available())
    {
      //leggo i byte disponibili
      //provenienti dal client
      Data_RX = pc_client.read();

      //Attendo che tutti i byte siano letti
      //quando Data_RX contiene il carattere
      //di nuova line capisco tutti i byte sono
      //stati letti
      if (Data_RX == '\n')
      {
        //Invio la risposta al client
        //invio lo status code
        pc_client.println("HTTP/1.1 200 OK");
        //imposto il data type
        pc_client.println("Content-Type: text/html");
        pc_client.println();
        //invio codice html
        pc_client.print("&lt;html&gt;&lt;body&gt;&lt;h1&gt;");
        pc_client.print("Hello world Arduino Web Server&lt;/h1&gt;&lt;/body&gt;   &lt;/html&gt;");
        //aspetto 1 ms affinche la risposta giunga al browser del client
        delay(1);
        //esco dal ciclo while una volta completato l'invio della risposta
        break;
      }
    }
  }
  //chiudo la connessione
  pc_client.stop();
}</pre>
<p> </p>
<p>Verifico il valore di ogni byte letto, tramite l&#8217;istruzione <strong>if</strong>, fino a quando non ricevo un carattere di nuova linea <strong>\n</strong> (<strong>ox0A</strong> in esadecimale). Quando si verifica questa condizione la richiesta del client è stata letta completamente e quindi possiamo iniziare ad inviare la nostra risposta tramite la funzione <strong>println()</strong> dell&#8217;oggetto <strong>pc_client</strong>.</p>
<p>La prima stringa da inviare riguarda lo <strong>status code</strong> del protocollo http, composta dalla versione del protocollo http(<strong>HTTP/1.1</strong>) e dal codice <strong>200 OK</strong> che specifica al client la corretta elaborazione dei dati.<br />La seconda stringa specifica il tipo di dati (http Content types) che stiamo inviando al client con il protocollo http.<br />Queste due stringhe costituiscono l&#8217;header della risposta http.</p>
<p>A questo punto inviamo la stringa con il codice html che compone la pagina che verrà inviata al browser sul client. Terminata anche questa operazione non ci resta che uscire dal blocco <strong>while</strong> con l&#8217;istruzione <strong>break</strong>, e terminare la chiusura della connessione con la funzione<strong> stop()</strong> per predisporci ad elaborare ulteriori richieste.</p>
<p>Nel prossimo articolo vedremmo come sfruttare gli ingressi analogici per acquisire dei segnali e i pin digitali per attivare dei led.</p>
<p> </p><p>The post <a href="https://logicaprogrammabile.it/arduino-ethernet-shield-controllo-remoto-via-web-con-http/">Arduino Ethernet Shield controllo remoto via web con http</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-ethernet-shield-controllo-remoto-via-web-con-http/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
			</item>
	</channel>
</rss>
