<?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>http Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/http/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/http/</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>http Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/http/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Webduino scheda relè evitare blocco Arduino UNO</title>
		<link>https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/</link>
					<comments>https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 03 Mar 2014 13:49:37 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=4079</guid>

					<description><![CDATA[<p>Come aggiungere relè al progetto senza bloccare la scheda Molti utenti che hanno realizzato il tutorial Scheda relè remota con Arduino e Webduino, dopo aver constatato il funzionamento del codice hanno poi implementato il codice per la gestione di ulteriori relè. A questo punto si...</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/">Webduino scheda relè evitare blocco Arduino UNO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come aggiungere relè al progetto senza bloccare la scheda</h3>
<p>Molti utenti che hanno realizzato il tutorial <a href="https://logicaprogrammabile.it/2012/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a>, dopo aver constatato il funzionamento del codice hanno poi implementato il codice per la <strong>gestione di ulteriori relè</strong>. A questo punto si sono accorti che il codice smette di funzionare e <strong>Arduino UNO</strong> sembra <strong>bloccata</strong>.<br />
Tutto ciò avviene perché aggiungendo istruzioni contenenti stringhe ad un certo punto si arriva a <strong>saturare</strong> la memoria <strong>SRAM</strong>, questo è il motivo per cui la scheda va in blocco. La <strong>mancanza</strong> di memoria <strong>SRAM</strong> di fatto non permette di eseguire le istruzioni del nostro sketch.</p>
<p>Come è possibile <strong>risolvere</strong> il problema senza aumentare la memoria <strong>SRAM</strong>?</p>
<p>Sapiamo che la scheda possiede anche una <strong>memoria EEPROM</strong> da <strong>1KB</strong>, e che tramite la funzione <strong>PROGMEM</strong> possiamo memorizzarci delle stringhe.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2014/03/SchedaRele.jpg"><img decoding="async" class="aligncenter size-full wp-image-4869" src="https://logicaprogrammabile.it/wp-content/uploads/2014/03/SchedaRele.jpg" alt="Scheda relè con Arduino UNO e webduino" width="240" height="176" /></a></p>
<p>Anche la libreria <strong>Webduino</strong> permette di <strong>salvare</strong> e richiamare le stringhe dalla memoria <strong>EEPROM</strong>, quindi possiamo usare questa funzionalità per <strong>liberare SRAM</strong> e permettere la normale esecuzione del codice.</p>
<p>Vediamo come modificare una porzione del codice del precedente articolo:</p>
<p>[c]<br />
if(Rele1 == true)<br />
server.print(&#8220;&lt;tr&gt;&lt;td style=\&#8221;color: red;\&#8221;&gt;RELE 1 ON&lt;/td&gt;&lt;td&gt;&#8221;);<br />
else<br />
server.print(&#8220;&lt;tr&gt;&lt;td style=\&#8221;color: black;\&#8221;&gt;RELE 1 OFF&lt;/td&gt;&lt;td&gt;&#8221;);<br />
[/c]</p>
<p>utilizzando le funzioni della libreria <a href="https://code.google.com/p/webduino/" target="_blank"><strong>Webduino</strong></a>, per memorizzare le stringhe nella <strong>EEPROM</strong></p>
<p>[c]<br />
//memorizza le stringhe sulla EEPROM<br />
P(str_rele1ON) = &#8220;&lt;tr&gt;&lt;td style=\&#8221;color: red;\&#8221;&gt;RELE 1 ON&lt;/td&gt;&lt;td&gt;&#8221;;<br />
P(str_rele1OFF) = &#8220;&lt;tr&gt;&lt;td style=\&#8221;color: black;\&#8221;&gt;RELE 1 OFF&lt;/td&gt;&lt;td&gt;&#8221;;</p>
<p>if(Rele1 == true)<br />
//richiama la stringa dalla eeprom<br />
server.printP(str_rele1ON);<br />
else<br />
//richiama la stringa dalla eeprom<br />
server.printP(str_rele1OFF);<br />
[/c]</p>
<p>il codice precedente fa uso dell&#8217;<strong>istruzione P()</strong> e del <strong>metodo printP()</strong>.</p>
<p><strong>P()</strong> ha il compito di <strong>memorizzare</strong> la <strong>stringa</strong> nella EEPROM proprio come accade con l&#8217;istruzione PROGMEM. per richiamare la stringa è sufficiente <strong>richiamarla</strong> utilizzando il metodo <strong>printP()</strong> dell&#8217;oggetto server.</p>
<p>In definitiva se volete aggiungere più relè è sufficiente modificare il codice del tutorial come nell&#8217;esempio precedente.</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/">Webduino scheda relè evitare blocco Arduino UNO</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/webduino-scheda-rele-blocco-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Scheda relè remota con Arduino e Webduino</title>
		<link>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/</link>
					<comments>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 07 Nov 2012 16:43:39 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3117</guid>

					<description><![CDATA[<p>Come costruirsi una scheda relè e comandarla tramite Arduino ethernet e Webduino Tra le applicazioni che trovo molto richieste è la scheda relè da gestire tramite smartphone. Utilizzando la libreria Webduino riusciamo a realizzare un dispositivo semplice e funzionale basato su pochi componenti quali Arduino...</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come costruirsi una scheda relè e comandarla tramite Arduino ethernet e Webduino</h3>
<p>Tra le applicazioni che trovo molto richieste è la scheda relè da gestire tramite smartphone. Utilizzando la libreria Webduino riusciamo a realizzare un dispositivo semplice e funzionale basato su pochi componenti quali <a href="http://arduino.cc/en/Main/ArduinoBoardEthernet" target="_blank">Arduino Ethernet</a>, dei classici relè, un router wifi (presente ormai nelle nostre abitazioni) e uno smartphone.</p>
<p>La figura seguente illustra il progetto di questo articolo:</p>
<p style="text-align: center;"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-3123" title="LogicaSchedaRele" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele.png" alt="Webduino ed Arduino Ethernet Gestione scheda rele" width="620" height="445" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele.png 620w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/LogicaSchedaRele-300x215.png 300w" sizes="(max-width: 620px) 100vw, 620px" /></p>
<p><span id="more-3117"></span></p>
<p><strong>Arduino Ethernet</strong> è collegato tramite cavo lan al router e permette di gestire i relè collegati ai pin digitali tramite una applicazione web basata sulla libreria <strong>Webduino</strong>. Tramite lo smarthphone o un pc collegato alla rete locale possiamo gestire i relè semplicemente usando un browser web.</p>
<p>Per la parte software ho deciso di usare la libreria <strong>webduino</strong> perché fornisce tutto il necessario per la gestione delle richieste http.</p>
<p>Lo schema elettrico del prototipo che ho realizzato è il seguente:</p>
<p><img decoding="async" class="aligncenter size-full wp-image-3124" title="SchedaRele" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele.png" alt="Arduino ethernet scheda rele" width="694" height="342" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele.png 694w, https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaRele-300x147.png 300w" sizes="(max-width: 694px) 100vw, 694px" /></p>
<p>Il codice caricato sul dispositivo è disponibile nel seguente listato:</p>
<p>[c]</p>
<p>#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino</p>
<p>//variabili statiche per il mac address e lìip address<br />
static byte mac_Add[] = {<br />
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
//cambiare l&#8217;ip in funzione della propria rete<br />
static byte ip_Add[] = {<br />
  192, 168, 0, 220 };<br />
//creazione oggetto Webduino<br />
WebServer webserver(&quot;&quot;, 80);</p>
<p>//Variabili booleane che memorizzano<br />
//lo stato delle uscite collegate ai relè<br />
boolean Rele1 = false;<br />
boolean Rele2 = false;<br />
boolean Rele3 = false;</p>
<p>//=============================================================================<br />
//funzione pagina Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type,<br />
           char *url_param, bool param_complete)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    String s = &quot;&quot;;</p>
<p>     if (param_complete == true)<br />
    {<br />
      s = url_param;</p>
<p>      if ( s == &quot;R1=ON&quot;)<br />
      {<br />
        Rele1 = true;<br />
        digitalWrite(2, HIGH);<br />
      }<br />
      else if ( s == &quot;R1=OFF&quot;)<br />
      {<br />
        Rele1 = false;<br />
        digitalWrite(2, LOW);<br />
      }</p>
<p>      if ( s == &quot;R2=ON&quot;)<br />
      {<br />
        Rele2 = true;<br />
        digitalWrite(3, HIGH);<br />
      }<br />
      else if ( s == &quot;R2=OFF&quot;)<br />
      {<br />
        Rele2 = false;<br />
        digitalWrite(3, LOW);<br />
      }</p>
<p>      if ( s == &quot;R3=ON&quot;)<br />
      {<br />
        Rele3 = true;<br />
        digitalWrite(4, HIGH);<br />
      }<br />
      else if ( s == &quot;R3=OFF&quot;)<br />
      {<br />
        Rele3 = false;<br />
        digitalWrite(4, LOW);<br />
      }<br />
    }</p>
<p>    //gestisco la pagina html in base allo stato delle uscite di Arduino<br />
    P(htmlHead) =<br />
    &quot;&lt;html&gt;&quot;<br />
    &quot;&lt;head&gt;&quot;<br />
    &quot;&lt;title&gt;Arduino Scheda Rele&lt;/title&gt;&quot;<br />
    &quot;&lt;/head&gt;&quot;<br />
    &quot;&lt;body&gt;&quot;;</p>
<p>    server.printP(htmlHead);</p>
<p>    server.print(&quot;&lt;table border=\&quot;1\&quot;&gt;&quot;);<br />
    server.print(&quot;&lt;tr&gt;&lt;td&gt;Stato Rele&lt;/td&gt;&lt;td&gt;Comandi&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele1 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 1 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 1 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele1 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R1=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R1=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele2 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 2 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 2 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele2 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R2=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R2=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    if(Rele3 == true)<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: red;\&quot;&gt;RELE 3 ON&lt;/td&gt;&lt;td&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;tr&gt;&lt;td style=\&quot;color: black;\&quot;&gt;RELE 3 OFF&lt;/td&gt;&lt;td&gt;&quot;);</p>
<p>    if(Rele3 == false)<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R3=ON&#8217;\&quot;&gt;&quot;);<br />
    else<br />
      server.print(&quot;&lt;input type=\&quot;button\&quot; value=\&quot;clicca qui\&quot;<br />
                    onclick=\&quot;location.href=&#8217;index.htm?R3=OFF&#8217;\&quot;&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/td&gt;&lt;/tr&gt;&quot;);</p>
<p>    server.print(&quot;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;);</p>
<p>  }<br />
}<br />
//=============================================================================</p>
<p>void setup()<br />
{<br />
  //inizializzo l&#8217;ethernet shield con il mac e il address<br />
  Ethernet.begin(mac_Add, ip_Add);</p>
<p>  //definisci l&#8217;azione di default che verrà eseguita quando l&#8217;utente<br />
  //naviga nella root del sito<br />
  webserver.setDefaultCommand(&amp;Start);<br />
  webserver.addCommand(&quot;index.htm&quot;, &amp;Start);</p>
<p>  //avvia il web server<br />
  webserver.begin();</p>
<p>  delay(100);</p>
<p>  //definisci i pin 2 3 4 in uscita<br />
  pinMode(2, OUTPUT);<br />
  pinMode(3, OUTPUT);<br />
  pinMode(4, OUTPUT);</p>
<p>  //inizializza i le uscite<br />
  digitalWrite(2, LOW);<br />
  digitalWrite(3, LOW);<br />
  digitalWrite(4, LOW);</p>
<p>}</p>
<p>void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}</p>
<p>[/c]</p>
<p>Nonostante le numerose righe di codice potete capirne il funzionamento semplicemente leggendo i commenti che lo accompagnano.<br />
L&#8217;interfaccia web per gestire i relè è la seguente:</p>
<p>Cliccando il bottone con la label &#8220;clicca qui&#8221; si ottiene una commutazione dello stato dei pin di uscita di Arduino e l&#8217;aggiornamento della label Stato Rele.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-3127" title="SchedaReleWeb" src="https://logicaprogrammabile.it/wp-content/uploads/2012/11/SchedaReleWeb.png" alt="Interfaccia scheda rele web" width="190" height="131" /></p>
<p>Anche in questo caso con poco si ottengono dispositivi interessanti e utili.</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/">Scheda relè remota con Arduino e Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/webduino-scheda-rele-arduino-ethernet/feed/</wfw:commentRss>
			<slash:comments>41</slash:comments>
		
		
			</item>
		<item>
		<title>Webduino recuperare parametri da un URL</title>
		<link>https://logicaprogrammabile.it/webduino-recuperare-parametri-da-url/</link>
					<comments>https://logicaprogrammabile.it/webduino-recuperare-parametri-da-url/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 31 Aug 2012 10:02:29 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3020</guid>

					<description><![CDATA[<p>Come recuperare parametri contenuti in un indirizzo URL usando Webduino Continuiamo a esplorare la libreria Webduino imparando a recuperare i parametri passati ad una pagina tramite l&#8217;indirizzo url. Questa possibilità ci permette di impartire comandi alla scheda Arduino usando appunto un indirizzo url. Ad esempio...</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-recuperare-parametri-da-url/">Webduino recuperare parametri da un URL</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come recuperare parametri contenuti in un indirizzo URL usando Webduino</h3>
<p>Continuiamo a esplorare la libreria <strong>Webduino</strong> imparando a recuperare i parametri passati ad una pagina tramite l&#8217;indirizzo url. Questa possibilità ci permette di impartire comandi alla scheda <strong>Arduino</strong> usando appunto un indirizzo url. Ad esempio se colleghiamo due led, uno sul pin5 e uno sul pin6 potremmo scrivere qualcosa del genere per accendere o spegnere i led</p>
<p style="text-align: center;"><strong>http://192.168.1.100/index.html?LED5=ON (Accende il led collegato al pin5)</strong></p>
<p style="text-align: center;"><strong>http://192.168.1.100/index.html?LED5=OFF (Spegne il led collegato al pin5)</strong></p>
<p style="text-align: center;"><strong>http://192.168.1.100/index.html?LED6=ON (Accende il led collegato al pin6)</strong></p>
<p style="text-align: center;"><strong>http://192.168.1.100/index.html?LED6=OFF (Spegne il led collegato al pin6)</strong></p>
<p>dove 192.168.1.100 è l&#8217;indirizzo della Arduino Ethernet</p>
<p>Il codice seguente inizializza la libreria, crea la pagina di default e la pagina <strong>index.htm</strong><strong>.</strong></p>
<p><span id="more-3020"></span></p>
<p>[c]<br />
#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino&amp;lt;/code&amp;gt;</p>
<p>//variabili statiche per il mac address e l&#8217;ip address<br />
static byte mac_Add[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
//cambiare l&#8217;ip in funzione della propria rete<br />
static byte ip_Add[] = { 192, 168, 1, 220 };<br />
//creazione oggetto Webduino<br />
WebServer webserver(&quot;&quot;, 80);<br />
//funzione Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();<br />
  //gestisco il tipo di richiesta GET<br />
  if (type == WebServer::GET)<br />
  {<br />
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg<br />
    P(strMsg) = &quot;&lt;h1&gt;Logicaprogrammabile&lt;/h1&gt;&quot;;<br />
    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg<br />
    //e la invio come output al browser<br />
    server.printP(strMsg);<br />
  }<br />
}</p>
<p>void setup()<br />
{<br />
  //inizializzo l&#8217;ethernet shield con il mac e il address<br />
  Ethernet.begin(mac_Add, ip_Add);<br />
  //definisci l&#8217;azione di default che verrà eseguita quando l&#8217;utente<br />
  //naviga nella root del sito<br />
  webserver.setDefaultCommand(&amp;Start);<br />
  //avvia il web server<br />
  webserver.begin();<br />
}</p>
<p>void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}<br />
[/c]</p>
<p>Per recuperare i dati passati come argomento all&#8217;url dobbiamo modificare la funzione Start() utilizzando il terzo e il quarto argomento; modifichiamo la funzione in questo modo:</p>
<p>[c]<br />
//funzione Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type,<br />
char *url_param, bool param_complete)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();<br />
  P(strMsg) = &quot;&lt;h1&gt;Logicaprogrammabile&lt;/h1&gt;&quot;;<br />
  //Gestisco la richiesta GET<br />
  if (type == WebServer::GET)<br />
  {<br />
    server.printP(strMsg);<br />
  }<br />
}<br />
[/c]</p>
<p><strong>url_param</strong> conterrà l&#8217;argomento passato all&#8217;indirizzo url. Proviamo a modificare il codice della funzione <strong>Strat()</strong></p>
<p>[c]<br />
//funzione Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type,<br />
char *url_param, bool param_complete)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();<br />
  P(strMsg) = &quot;&lt;h1&gt;Logicaprogrammabile&lt;/h1&gt;&quot;;<br />
  //Gestisco la richiesta GET<br />
  if (type == WebServer::GET)<br />
  {<br />
    server.printP(strMsg);<br />
    //se il parametro è disponibile<br />
    if (param_complete == true)<br />
    {<br />
      //restituiscine il valore del parametro<br />
      server.print(url_param);<br />
    }<br />
  }<br />
}<br />
[/c]</p>
<p>Purtroppo non è possibile gestire parametri multipli, quindi un url scritto in questo modo</p>
<p style="text-align: center;"><strong>http://192.168.1.100/index.html?LED6=OFF&amp;LED5=ON</strong></p>
<p>produrrà questo risultato</p>
<p style="text-align: center;"><strong>LED6=OFF&amp;LED5=ON</strong></p>
<p>Per ottenere le informazioni che ci interessano, possiamo usare la funzione <strong>indexOf</strong> della classe <strong>String</strong>, quindi dopo aver recuperato la stringa dei parametri dobbiamo assegnarla ad una variabile <strong>String</strong> ed eseguire una piccola elaborazione per ottenere i valori che ci interessano</p>
<p>[c]<br />
#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino&amp;lt;/code&amp;gt;<br />
//variabili statiche per il mac address e l&#8217;ip address<br />
static byte mac_Add[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
//cambiare l&#8217;ip in funzione della propria rete<br />
static byte ip_Add[] = { 192, 168, 1, 210 };<br />
//creazione oggetto Webduino<br />
WebServer webserver(&quot;&quot;, 80);<br />
//funzione Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type,<br />
char *url_param, bool param_complete)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();<br />
  P(strMsg) = &quot;&lt;h1&gt;Logicaprogrammabile&lt;/h1&gt;&quot;;<br />
  //Gestisco la richiesta GET<br />
  if (type == WebServer::GET)<br />
  {<br />
    server.printP(strMsg);&lt;/p&gt;<br />
    //se il parametro è disponibile<br />
    if (param_complete == true)<br />
    {<br />
      //passo i parametri ad una stringa<br />
      String parametri = url_param;<br />
      //ricerco nella stringa i valori che mi interessano<br />
      int Led5 = parametri.indexOf(&quot;LED5=ON&quot;);<br />
      int Led6 = parametri.indexOf(&quot;LED6=ON&quot;);<br />
      if (Led5 &gt;= 0)<br />
        {<br />
        //ho trovato la stringa<br />
        //commuto la porta 5 a livello alto<br />
        digitalWrite(5, HIGH);<br />
      }<br />
      else<br />
        digitalWrite(5, LOW);<br />
      if (Led6 &gt;= 0)<br />
      {<br />
        //ho trovato la stringa<br />
        //commuto la porta 5 a livello alto<br />
        digitalWrite(6, HIGH);<br />
      }<br />
      else<br />
        digitalWrite(6, LOW);<br />
      //restituiscine il valore<br />
      server.print(url_param);<br />
    }<br />
  }<br />
}<br />
void setup()<br />
{<br />
  //inizializzo l&#8217;ethernet shield con il mac e il address<br />
  Ethernet.begin(mac_Add, ip_Add);<br />
  //definisci l&#8217;azione di default che verrà eseguita quando l&#8217;utente<br />
  //naviga nella root del sito<br />
  webserver.setDefaultCommand(&amp;Start);<br />
  //aggiungi una pagina<br />
  webserver.addCommand(&quot;index.htm&quot;, &amp;Start);<br />
  //avvia il web server<br />
  webserver.begin();<br />
  //imposto il pin 5 e 6 in uscita<br />
  pinMode(5, OUTPUT);<br />
  pinMode(6, OUTPUT);<br />
}<br />
void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}<br />
[/c]</p>
<p>Anche se il codice sembra complesso, basta dedicargli qualche minuto per capire che tutto è molto semplice e veloce.</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-recuperare-parametri-da-url/">Webduino recuperare parametri da un URL</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/webduino-recuperare-parametri-da-url/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title>Webduino aggiungere pagine web</title>
		<link>https://logicaprogrammabile.it/webduino-aggiungere-pagine-web/</link>
					<comments>https://logicaprogrammabile.it/webduino-aggiungere-pagine-web/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 06 Jun 2012 11:58:04 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2824</guid>

					<description><![CDATA[<p>Gestire il webserver Webduino aggiungendo diverse pagine web Nel precedente articolo hai visto come installare la libreria webduino e come creare la tua prima pagina. In questo secondo articolo produrrai altre pagine utilizzando le funzioni messe a disposizione della libreria e vedrai come sia semplice...</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-aggiungere-pagine-web/">Webduino aggiungere pagine web</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Gestire il webserver Webduino aggiungendo diverse pagine web</h3>
<p>Nel <a title="Utilizzare la libreria Webduino" href="https://logicaprogrammabile.it/utilizzare-la-libreria-webduino/">precedente articolo</a> hai visto come installare la libreria <strong>webduino</strong> e come creare la tua prima pagina. In questo secondo articolo produrrai altre pagine utilizzando le funzioni messe a disposizione della libreria e vedrai come sia semplice costruire una struttura tipica di un sito web.</p>
<p>Anche in questo caso le pagine non sono intese come file html, ma bensì come una funzione che genera il codice htm.</p>
<p>Per aggiungerle è sufficiente usare il metodo<strong> addCommand()</strong> dell&#8217;oggetto webserver.</p>
<p>Il codice seguente illustra come sia possibile realizzare quanto descritto:</p>
<p><span id="more-2824"></span></p>
<p>[c]<br />
void setup()<br />
{<br />
  //inizializzo l&#8217;ethernet shield con il mac e il address<br />
  Ethernet.begin(mac_Add, ip_Add);</p>
<p>  //definisci l&#8217;azione di default che verrà eseguita quando l&#8217;utente<br />
  //naviga nella root del sito<br />
  webserver.setDefaultCommand(&amp;Start);</p>
<p>  //aggiungi altri comandi/pagine<br />
  webserver.addCommand(&quot;Page01&quot;, &amp;CmdPage01);<br />
  webserver.addCommand(&quot;Page02&quot;, &amp;CmdPage02);</p>
<p>  //avvia il web server<br />
  webserver.begin();<br />
}<br />
[/c]</p>
<p>Le pagine/funzioni vengono definite nel blocco setup() subito la funzione setDefaultCommand(). I parametri da passare sono il nome che verrà scritto nell&#8217;url e il puntatore alla funzione che elaborerà la richiesta proveniente dal brovser.<br />
In questo caso gli url saranno così definiti:</p>
<pre>IndirizzoIParduino/Page01
IndirizzoIParduino/Page02</pre>
<p>Inviando il primo indirizzo verrà eseguita la funzione con nome <strong>CmdPage01</strong>, e con il secondo indirizzo verrà eseguita la funzione con nome <strong>CmdPage02</strong>.</p>
<p>Nel codice dello sketch definiamo le due funzioni che conterranno un titolo ed un link per ritornare alla home page</p>
<p>[c]<br />
void CmdPage01(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg<br />
    P(strMsg) = &quot;&lt;h1&gt;Pagina 01&lt;/h1&gt;&quot;<br />
                &quot;&lt;a href=&#8217;\&#8217;&gt;Home&lt;/a&gt;&quot;;</p>
<p>    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg<br />
    //e la invio come output al browser<br />
    server.printP(strMsg);<br />
  }<br />
}</p>
<p>void CmdPage02(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg<br />
    P(strMsg) = &quot;&lt;h1&gt;Pagina 02&lt;/h1&gt;&quot;<br />
                &quot;&lt;a href=&#8217;\&#8217;&gt;Home&lt;/a&gt;&quot;;</p>
<p>    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg<br />
    //e la invio come output al browser<br />
    server.printP(strMsg);<br />
  }<br />
}<br />
[/c]</p>
<p>E&#8217; possibile inserire diverse pagine per formare una struttura di pagine, anche complessa. L&#8217;unico limite è la memoria del chip Atmega che può essere integrata utilizzando una microSD, disponibile sia sul modulo ethernet shield sia sulla Arduino Ethernet.</p>
<p>Di seguito il codice integrale dello sketch cosi da poter provare subito l&#8217;esempio:</p>
<p>[c]<br />
#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino</p>
<p>//variabili statiche per il mac address e lìip address<br />
static byte mac_Add[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
//cambiare l&#8217;ip in funzione della propria rete<br />
static byte ip_Add[] = { 192, 168, 1, 220 };<br />
//creazione oggetto Webduino<br />
WebServer webserver(&quot;&quot;, 80);</p>
<p>//=============================================================================<br />
//funzione pagina Start<br />
void Start(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg<br />
    P(strMsg) = &quot;&lt;h1&gt;Logicaprogrammabile&lt;/h1&gt;&quot;;</p>
<p>    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg<br />
    //e la invio come output al browser<br />
    server.printP(strMsg);<br />
  }<br />
}<br />
//=============================================================================<br />
//funzione pagina Start<br />
void CmdPage01(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg<br />
    P(strMsg) = &quot;&lt;h1&gt;Pagina 01&lt;/h1&gt;&quot;<br />
                &quot;&lt;a href=&#8217;\&#8217;&gt;Home&lt;/a&gt;&quot;;</p>
<p>    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg<br />
    //e la invio come output al browser<br />
    server.printP(strMsg);<br />
  }<br />
}<br />
//=============================================================================<br />
//funzione pagina Page02<br />
void CmdPage02(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //restituisce al browser l&#8217;intestazione http 200 OK<br />
  server.httpSuccess();</p>
<p>  //gestisco il tipo di richiesta HEAD<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg<br />
    P(strMsg) = &quot;&lt;h1&gt;Pagina 02&lt;/h1&gt;&quot;<br />
                &quot;&lt;a href=&#8217;\&#8217;&gt;Home&lt;/a&gt;&quot;;</p>
<p>    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg<br />
    //e la invio come output al browser<br />
    server.printP(strMsg);<br />
  }<br />
}<br />
//=============================================================================<br />
void setup()<br />
{<br />
  //inizializzo l&#8217;ethernet shield con il mac e il address<br />
  Ethernet.begin(mac_Add, ip_Add);</p>
<p>  //definisci l&#8217;azione di default che verrà eseguita quando l&#8217;utente<br />
  //naviga nella root del sito<br />
  webserver.setDefaultCommand(&amp;Start);</p>
<p>  //aggiungi altri comandi/pagine<br />
  webserver.addCommand(&quot;Page01&quot;, &amp;CmdPage02);<br />
  webserver.addCommand(&quot;Page02&quot;, &amp;CmdPage01);</p>
<p>  //avvia il web server<br />
  webserver.begin();<br />
}</p>
<p>void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}<br />
[/c]</p>
<p>The post <a href="https://logicaprogrammabile.it/webduino-aggiungere-pagine-web/">Webduino aggiungere pagine web</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/webduino-aggiungere-pagine-web/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>
