<?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>Arduino Webserver Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/arduino-webserver/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/arduino-webserver/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sun, 15 Jan 2017 18:00:49 +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>Arduino Webserver Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/arduino-webserver/</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>Utilizzare la libreria Webduino</title>
		<link>https://logicaprogrammabile.it/utilizzare-la-libreria-webduino/</link>
					<comments>https://logicaprogrammabile.it/utilizzare-la-libreria-webduino/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 16 May 2012 13:29:19 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Ethernet Shield]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2769</guid>

					<description><![CDATA[<p>Primi passi nell&#8217;uso della libreria Webduino Esistono diverse librerie che tendono a risolvere o a migliorare alcune classi base implementate in Arduino 1.0. Webduino è sicuramente una di queste, il nome è un chiaro riferimento al mondo ethernet/web e le sue principali funzioni sono elencate...</p>
<p>The post <a href="https://logicaprogrammabile.it/utilizzare-la-libreria-webduino/">Utilizzare la libreria Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Primi passi nell&#8217;uso della libreria Webduino</h3>
<p>Esistono diverse librerie che tendono a risolvere o a migliorare alcune classi base implementate in <strong>Arduino 1.0</strong>. <strong>Webduino</strong> è sicuramente una di queste, il nome è un chiaro riferimento al mondo ethernet/web e le sue principali funzioni sono elencate di seguito:</p>
<ul>
<li>elaborazione dei parametri racchiusi in un URL</li>
<li>elaborazione dei metodi HTTP come GET, POST, PUT, HEAD, DELETE e PATCH</li>
<li>gestione dei FORM</li>
<li>Gestione di Immagini</li>
<li>interfaccia JSON/REST</li>
<li>autenticazione BASE64</li>
</ul>
<p>Attualmente, la versione disponibile è la 1.7  prelevabile direttamente da <strong>Github</strong> seguendo questo indirizzo <a href="https://github.com/sirleech/Webduino" target="_blank">https://github.com/sirleech/Webduino</a></p>
<p><span id="more-2769"></span></p>
<p>Una volta scaricato il file zip possiamo scompattarlo posizionandolo all&#8217;interno della cartella <strong>libraries</strong> cercando di non modificare la struttura interna della cartella<strong><br />
</strong></p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2012/05/webduinolib.png"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2778" title="webduinolib" src="https://logicaprogrammabile.it/wp-content/uploads/2012/05/webduinolib-300x229.png" alt="Libreria webduino" width="300" height="229" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/05/webduinolib-300x229.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/05/webduinolib.png 421w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Per eseguire il codice ho usato l&#8217;<strong>Arduino Ethernet</strong>, ma è possibile utilizzare benissimo la <strong>Arduino UNO</strong> con lo shield ethernet.</p>
<p>Passiamo direttamente alla pratica creando un nuovo sketch ed inserendo, per prima, le seguenti librerie</p>
<p>[c]<br />
#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino<br />
[/c]</p>
<p>e subito di seguito le variabili e gli oggetti necessari al corretto funzionamento del modulo ethernet e della libreria <strong>Webduino</strong>:</p>
<p>[c]<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, 220 };<br />
//creazione oggetto Webduino<br />
WebServer webserver(&quot;&quot;, 80);<br />
[/c]</p>
<p>Il mac address e l&#8217;ip address sono definiti come per la libreria nativa Ethernet. L&#8217;oggetto webserver invece è relativo alla libreria Webduino ed accetta due parametri, il primo, che in questo caso è vuoto, permette di specificare un percorso (URL), mentre il secondo rappresenta la porta in cui il server rimarrà in ascolto.<br />
Ad esempio potremmo avere :</p>
<p>[c]<br />
//il web server risponde sulla porta 80 e richiama la root page /<br />
WebServer webserver(&quot;&quot;, 80);<br />
//il web server risponde sulla porta 80 e richiama la pagina digital.html<br />
WebServer webserver(&quot;digital.html&quot;, 80);<br />
//il web server risponde sulla porta 80 e richiama la pagina analog.html<br />
WebServer webserver(&quot;analog.html&quot;, 80);<br />
//il web server risponde sulla porta 8085 e richiama la root page predefinita<br />
WebServer webserver(&quot;/test&quot;, 8085);<br />
[/c]</p>
<p>qui devo fare una precisazione. le pagine specificare non sono in effetti come le conosciamo (codice html) ma sono dei riferimenti, delle stringhe, che richiamano funzioni contenenti codice html. Vedremo meglio negli esempi successivi cosa intendo.</p>
<p>Nel blocco <strong>setup</strong> inseriamo il codice per inizializzare gli oggetti dichiarati precedentemente e, con alcune istruzioni aggiuntive, permettiamo di elaborare le richieste provenienti dal browser</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 (192.168.1.220/)<br />
  webserver.setDefaultCommand(&amp;Start);</p>
<p>  //avvia il web server<br />
  webserver.begin();</p>
<p>}<br />
[/c]</p>
<p>il metodo <strong>setDefaultCommand</strong> permette di eseguire la funzione <strong>Start</strong> (inserita come parametro) in modo da elaborare la richiesta del browser.</p>
<p>All&#8217;interno del blocco <strong>loop</strong> bisogna inserire l&#8217;istruzione che &#8216;si accorge&#8217; delle richieste del client e ne gestisce i relativi processi:</p>
<p>[c]<br />
void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}<br />
[/c]</p>
<p>Per completare il codice, ed eseguire quindi un test operativo, scriviamo le istruzioni che compongono la funzione <strong>Start</strong>, che in questo esempio verrà eseguita come operazione di default quando un utente si collega al webserver semplicemente digitando nel browser l&#8217;indirizzo ip dell&#8217;Arduino.</p>
<p>[c]<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();</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 />
[/c]</p>
<p>Il codice completo permette di eseguire, caricandolo nell&#8217;Arduino ethernet, il test della libreria</p>
<p>[c]<br />
#include &lt;Ethernet.h&gt;<br />
#include &lt;SPI.h&gt;<br />
#include &lt;WebServer.h&gt; //libreria webduino&lt;/code&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);</p>
<p>//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();</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 />
}</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);</p>
<p>  //avvia il web server<br />
  webserver.begin();</p>
<p>}</p>
<p>void loop()<br />
{<br />
  //elabora costantemente tutte le richieste provenienti dal browser<br />
  webserver.processConnection();<br />
}<br />
[/c]</p>
<p>Tramite il nostro browser preferito digitiamo l&#8217;indirizzo ip dell&#8217;Arduino; dovremmo visualizzare qualcosa del genere</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2012/05/TestPage.png"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2793" title="TestPage" src="https://logicaprogrammabile.it/wp-content/uploads/2012/05/TestPage-300x145.png" alt="Test Webduino library" width="300" height="145" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/05/TestPage-300x145.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2012/05/TestPage.png 355w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Fatte diverse prove, modificando il codice, e leggendo i commenti per capire i vari passi da eseguire per iniziare ad usare la libreria Webduino. Nei prossimi articoli inseriremo alcune funzioni aggiuntive.</p>
<p>The post <a href="https://logicaprogrammabile.it/utilizzare-la-libreria-webduino/">Utilizzare la libreria Webduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/utilizzare-la-libreria-webduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Visualizzare immagini con un Webserver Arduino</title>
		<link>https://logicaprogrammabile.it/visualizzare-immagini-con-arduino-webserver/</link>
					<comments>https://logicaprogrammabile.it/visualizzare-immagini-con-arduino-webserver/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 25 Jan 2012 07:00:49 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Base64]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2472</guid>

					<description><![CDATA[<p>Visualizzare immagini in una pagina web gestita da Arduino Quando utilizziamo Arduino Ethernet (o EthernetShield) in modalità webserver, non è disponibile una funzione nativa che permetta di visualizzare una immagine nella pagina web generata da Arduino. Esiste però un metodo molto semplice che permette di...</p>
<p>The post <a href="https://logicaprogrammabile.it/visualizzare-immagini-con-arduino-webserver/">Visualizzare immagini con un Webserver Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Visualizzare immagini in una pagina web gestita da Arduino</h3>
<p>Quando utilizziamo <a title="Scheda Arduino Ethernet all in one" href="https://logicaprogrammabile.it/scheda-arduino-ethernet-all-in-one/" target="_blank"><strong>Arduino Ethernet</strong></a> (o EthernetShield) in modalità webserver, non è disponibile una funzione nativa che permetta di visualizzare una immagine nella pagina web generata da Arduino. Esiste però un metodo molto semplice che permette di visualizzare delle immagini, di piccole dimensioni, utilizzando la codifica<strong> <a href="http://it.wikipedia.org/wiki/Base64" target="_blank">Base64</a></strong>.</p>
<p>L&#8217;idea è quella di utilizzare una stringa che codifica un file immagine, da inserire nello sketch. Diversi siti web offrono un convertitore online che codifica un file immagine (jpg, gif o png) in una stringa equivalente in standard Base64.<br />
Per questo tutorial ho utilizzato il servizio di <strong>webcodertools.com</strong> disponibile a <a href="http://webcodertools.com/imagetobase64converter" target="_blank">questo indirizzo.</a> Basta caricare un file immagine per ottenere direttamente una stringa Base64 con in aggiunta il tag html img.</p>
<p><span id="more-2472"></span></p>
<p>Ad esempi questo file immagine png :</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2476" title="logo2" src="https://logicaprogrammabile.it/wp-content/uploads/2012/01/logo2.png" alt="" width="16" height="16" /></p>
<p>viene convertito nella seguente stringa</p>
<pre>&lt;img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABWklEQVQ4ja1TMUvDQBT+7iztWsSlHZLJZigFC12FiINzx26SKVtnHcxlcXcyixEnR107FPIDChXEoTpoMrRLkYIuLdjnYO+4tA1Y8YPj4H3v+97du3eMiKBj69SrzA2zBUAgDcGT+Pbr3H/Wg0w3YEHorREuQ5Dr+CsGLAgpU7IG5DoMALhWeSNIDeMnZ5W5YQ4AYG9nG8V8AZPZFA/j95RgHceT2MotGobrg30cW7tKEA1HaHa6AIC7o0PY5ZLi7l9jNDtdzA2zxXB5RaJRh9eogwWhfkdEwxEAwC6XVji/14fo9X960K5VUwmLO8Iul1Jich3FtWtVqCYWC3mVINcyZEzuUpMDgLePT+WcBRaEINdROZPpTJ1A3AxeVqrKHkTDUerokrt4fAIAoZ7xL6/Ak9hiRKRGeMM5EOQ6/v+MshYQv9AKKU4ZLEx8nsRWhpHgSWzpPxEAvgHST7pu8mrutQAAAABJRU5ErkJggg==" /&gt;</pre>
<p>mentre il codice seguente è uno sketch webserver che crea una pagina html con l&#8217;immagine codificata:</p>
<p>[c]<br />
/*<br />
  Semplice Controllo remoto<br />
  Gennaio 2012<br />
  Marco Lai<br />
*/</p>
<p>//Librerie impiegate per il progetto<br />
#include &lt;SPI.h&gt;<br />
#include &lt;Ethernet.h&gt;</p>
<p>//Creao un array di byte per specificare il mac address<br />
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
//creo un array di byte per specificare l&#8217;indirizzo ip<br />
byte ip[] = {xxx, xxx, xxx, xxx}; //modificate questo valore in base alla vostra rete</p>
<p>char Data_RX;</p>
<p>//creao un oggetto server che rimane in ascolto sulla porta<br />
//specificata<br />
EthernetServer ArduinoServer(80);</p>
<p>void setup()<br />
{<br />
    //inizializza lo shield con il mac e l&#8217;ip<br />
    Ethernet.begin(mac, ip);<br />
    //inizializza l&#8217;oggetto server<br />
    ArduinoServer.begin();<br />
}</p>
<p>void loop()<br />
{<br />
    EthernetClient pc_client = ArduinoServer.available();</p>
<p>    //controllo se pc_client è true<br />
    if (pc_client != false)<br />
    {<br />
        //controllo continuamente che il client sia connesso<br />
        while (pc_client.connected())<br />
        {<br />
            //Controllo se ci sono byte disponibili per la lettura<br />
            if (pc_client.available())<br />
            {<br />
                //leggo i byte disponibili<br />
                //provenienti dal client<br />
                Data_RX = pc_client.read();</p>
<p>                //Attendo che tutti i byte siano letti<br />
                //quando Data_RX contiene il carattere<br />
                //di nuova line capisco tutti i byte sono<br />
                //stati letti<br />
                if (Data_RX == &#8216;\n&#8217;)<br />
                {<br />
                    //Invio la risposta al client<br />
                    //invio lo status code<br />
                    pc_client.println(&quot;HTTP/1.1 200 OK&quot;);<br />
                    //imposto il data type<br />
                    pc_client.println(&quot;Content-Type: text/html&quot;);<br />
                    pc_client.println();<br />
                    //invio codice html<br />
                    pc_client.print(&quot;&lt;html&gt;&lt;body&gt;&quot;);<br />
                    pc_client.print(&quot;&lt;head&gt;&quot;);<br />
                    //questo codice html permette di eseguireil refresh automatico<br />
                    //della pagina html<br />
                    pc_client.print(&quot;&lt;META HTTP-EQUIV=&#8217;refresh&#8217; CONTENT=&#8217;5; /&#8217;&gt;&quot;);<br />
                    pc_client.print(&quot;&lt;/head&gt;&quot;);</p>
<p>                    pc_client.print(&quot;Arduino visualizza l&#8217;immagine &quot;);<br />
                    pc_client.print(&quot;&lt;img alt=\&quot;\&quot; src=\&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABWklEQVQ4ja1TMUvDQBT+7iztWsSlHZLJZigFC12FiINzx26SKVtnHcxlcXcyixEnR107FPIDChXEoTpoMrRLkYIuLdjnYO+4tA1Y8YPj4H3v+97du3eMiKBj69SrzA2zBUAgDcGT+Pbr3H/Wg0w3YEHorREuQ5Dr+CsGLAgpU7IG5DoMALhWeSNIDeMnZ5W5YQ4AYG9nG8V8AZPZFA/j95RgHceT2MotGobrg30cW7tKEA1HaHa6AIC7o0PY5ZLi7l9jNDtdzA2zxXB5RaJRh9eogwWhfkdEwxEAwC6XVji/14fo9X960K5VUwmLO8Iul1Jich3FtWtVqCYWC3mVINcyZEzuUpMDgLePT+WcBRaEINdROZPpTJ1A3AxeVqrKHkTDUerokrt4fAIAoZ7xL6/Ak9hiRKRGeMM5EOQ6/v+MshYQv9AKKU4ZLEx8nsRWhpHgSWzpPxEAvgHST7pu8mrutQAAAABJRU5ErkJggg==\&quot; /&gt;&quot;);</p>
<p>                    pc_client.print(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);</p>
<p>                    //aspetto 1 ms affinche la risposta giunga al browser del client<br />
                    delay(1);<br />
                    //esco dal ciclo while una volta completato l&#8217;invio della risposta<br />
                    break;<br />
                }<br />
            }<br />
        }<br />
        //chiudo la connessione<br />
        pc_client.stop();<br />
    }<br />
}</p>
<p>[/c]</p>
<p>Con questo metodo sarà più semplice creare pagine html più accattivanti utilizzando codice html e immagini codificate in Base64.<br />
L&#8217;unica limitazione sta nella dimensione dell&#8217;immagine, infatti con un file grande otterremo una stringa enorme, saturando cosi la memoria dell&#8217;Arduino, in questo caso però potremmo utilizzare la memoria microSD.</p>
<p>The post <a href="https://logicaprogrammabile.it/visualizzare-immagini-con-arduino-webserver/">Visualizzare immagini con un Webserver Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/visualizzare-immagini-con-arduino-webserver/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Ethernet come configurare l&#8217;ambiente di sviluppo</title>
		<link>https://logicaprogrammabile.it/arduino-ethernet-configurare-sviluppo/</link>
					<comments>https://logicaprogrammabile.it/arduino-ethernet-configurare-sviluppo/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Tue, 20 Sep 2011 12:51:06 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino ethernet]]></category>
		<category><![CDATA[Arduino UNO Stand alone]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1983</guid>

					<description><![CDATA[<p>Configurare il sistema per iniziare a lavorare con Arduino Ethernet Ho da poco ricevuto il pacco contenente la board Arduino Ethernet, e devo dire che risulta essere ben realizzata ed assemblata. Prima di iniziare a scrivere qualche sketch è necessario installare i driver del convertitore...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-ethernet-configurare-sviluppo/">Arduino Ethernet come configurare l&#8217;ambiente di sviluppo</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Configurare il sistema per iniziare a lavorare con Arduino Ethernet</h1>
<p>Ho da poco ricevuto il pacco contenente la board <strong>Arduino Ethernet</strong>, e devo dire che risulta essere ben realizzata ed assemblata. Prima di iniziare a scrivere qualche sketch è necessario installare i driver del convertitore USB2Serial che utilizzeremo per colloquiare con la board dato che non dispone di una porta usb integrata come la Arduino UNO, inoltre modificheremo il file <strong>board.txt</strong> per aggiornare il menu dell&#8217;IDE.</p>
<p>Scarichiamo dal sito <a href="http://arduino.cc" target="_blank">Arduino.cc</a> i driver del convertitore usb seriale che potete trovare nella sezione Driver &amp; Setup nella pagina <a href="http://arduino.cc/en/Main/USBSerial" target="_blank">del dispositivo USB2Serial Light</a>, salviamo e decomprimiamo il file in una cartella sul desktop.<br />
Quindi colleghiamo al pc, tramite cavo mini usb, la board <strong>Usb2Serial</strong>.</p>
<p>Windows XP avvierà la procedura di installazione nuovo hardware</p>
<p><span id="more-1983"></span></p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/09/usbSerial.jpg"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-1985" title="usb2Serial light" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/usbSerial-300x87.jpg" alt="Installazione Arduino Usb2Serial Light" width="300" height="87" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/usbSerial-300x87.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/usbSerial.jpg 382w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-1986" title="InstNuovoHardware" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/InstNuovoHardware-300x233.jpg" alt="Installazione nuovo hardware" width="300" height="233" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/InstNuovoHardware-300x233.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/InstNuovoHardware.jpg 504w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Clicchiamo sul pulsante <strong>Annulla</strong> per chiudere la finestra. Un messaggio pop-up ci avviserà del relativo errore, non badateci e chiudete il messaggio:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-1988" title="ErroreHardware" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/ErroreHardware-300x84.jpg" alt="Errore installazione driver board usb2serial" width="300" height="84" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/ErroreHardware-300x84.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/ErroreHardware.jpg 451w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Ora apriamo la finestra delle proprietà del sistema, <strong>Start-&gt;Pannello di controllo-&gt;Sistema</strong> e clicchiamo sul tab <strong>Hardware</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-1989" title="PropSistema" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/PropSistema-235x300.jpg" alt="Proprietà di sitema" width="235" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/PropSistema-235x300.jpg 235w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/PropSistema.jpg 420w" sizes="auto, (max-width: 235px) 100vw, 235px" /></p>
<p>apriamo la finestra <strong>gestione periferiche</strong> tramite l&#8217;omonimo pulsante, dovremmo notare la presenza del device <strong>Arduino USB-Serial</strong>.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2011/09/GestPeriferiche.jpg"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-1992" title="GestPeriferiche" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/GestPeriferiche-266x300.jpg" alt="Gestione periferiche USB to Serial" width="266" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/GestPeriferiche-266x300.jpg 266w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/GestPeriferiche.jpg 436w" sizes="auto, (max-width: 266px) 100vw, 266px" /></a></p>
<p>Clicchiamo con il pulsante destro del mouse sul dispositivo e selezioniamo la voce <strong>Aggiorna driver&#8230;</strong> per avviare la procedura passo passo che porterà alla corretta installazione dei driver della board <strong>USB2Serial</strong>; di seguito le schermate illustrative del wizard di installazione:</p>
<div class="post-content-gallery justify columns3" data-justify="180"></div>
<p>Se non ci sono intoppi la procedura permetterà immediatamente l&#8217;utilizzo della board <strong>USB2Serial</strong>. Il passo successivo permette di aggiornare l&#8217;elenco delle board presenti nel relativo menu dell&#8217;IDE.<br />
Dobbiamo aprire il file <strong>board.txt</strong> situato nel seguente path:</p>
<p style="text-align: center;"><strong>arduino-0022\hardware\arduino</strong></p>
<p>cerchiamo la seguente stringa</p>
<pre>uno.name=Arduino Uno</pre>
<p>e modifichiamola in questo modo</p>
<pre>uno.name=Arduino Uno or Ethernet</pre>
<p>Dato che programmare la Arduino Ethernet equivale a programmare l&#8217;Arduino UNO, questa modifica serve solamente a rinominare la voce del menu, non ha effetto sui parametri della scheda.</p>
<p>Avviamo l&#8217;IDE e controlliamo che l&#8217;impostazione sia stata caricata</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2011" title="ArduinoIDE" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/ArduinoIDE-300x226.jpg" alt="Arduino IDE" width="300" height="226" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/ArduinoIDE-300x226.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/ArduinoIDE.jpg 631w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Per concludere carichiamo un semplice sketch per verificare che tutto funzioni in modo adeguato</p>
<pre class="lang:arduino decode:true ">/*
Test Arduino Ethernet
*/

void setup()
{
//Inizializzo la seriale
Serial.begin(9600);
}

void loop()
{
//scrivo sulla seriale
Serial.write("Arduino Ethernet\n");
//Attendo 1 secondo
delay(1000);
}</pre>
<p>&nbsp;</p>
<p>Una volta caricato lo sketch apriamo <strong>Serial Monitor</strong> per verificare che la stringa venga inviata al pc tramite la board <strong>USB2Serial</strong>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-2013" title="TestArduinoEth" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/TestArduinoEth-285x300.jpg" alt="Test Arduino Ethernet" width="285" height="300" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/TestArduinoEth-285x300.jpg 285w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/TestArduinoEth.jpg 366w" sizes="auto, (max-width: 285px) 100vw, 285px" /></p>
<p>Prossimi test ed esperimenti nei prossimi giorni</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-ethernet-configurare-sviluppo/">Arduino Ethernet come configurare l&#8217;ambiente di sviluppo</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-ethernet-configurare-sviluppo/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Leggere dagli ingressi analogici da remoto con Arduino</title>
		<link>https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/</link>
					<comments>https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 01 Sep 2011 12:34:08 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Arduino Webserver]]></category>
		<category><![CDATA[Domotica]]></category>
		<category><![CDATA[Ingressi Analogici]]></category>
		<category><![CDATA[MCP9700]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1929</guid>

					<description><![CDATA[<p>Utilizzare un webserver per acquisire dati dagli ingressi analogici Continuiamo l&#8217;articolo precedente inserendo nello sketch il codice che permette di campionare segnali analogici per poterli inviarli tramite protocollo http. Utilizzando la funzione analogRead() acquisiamo il valore della tensione presente sul pin analogico, che verrà utilizzato...</p>
<p>The post <a href="https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/">Leggere dagli ingressi analogici da remoto con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare un webserver per acquisire dati dagli ingressi analogici</h1>
<p>Continuiamo l&#8217;articolo precedente inserendo nello sketch il codice che permette di campionare segnali analogici per poterli inviarli tramite protocollo http.<br />
Utilizzando la funzione <strong>analogRead()</strong> acquisiamo il valore della tensione presente sul pin analogico, che verrà utilizzato per essere inserito nella pagina html da inviare al client. Con alcuni tag html aggiuntivi abbiamo la possibilità di avere un refresh automatico della pagina che ad intervalli regolari interrogherà il server Arduino, ottenendo automaticamente nuovi campionamenti del segnale analogico.<br />
Il circuito seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1936 size-full" title="AnalogRead" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead.gif" alt="Circuito di esempio acquisizione segnale ingresso analogico via lan con http" width="303" height="306" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead.gif 303w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead-150x150.gif 150w, https://logicaprogrammabile.it/wp-content/uploads/2011/09/AnalogRead-297x300.gif 297w" sizes="auto, (max-width: 303px) 100vw, 303px" /></p>
<p><span id="more-1929"></span>In questo esempio la tensione presente sul pin è fissa, ma nulla vieta l&#8217;inserimento di un potenziometro o meglio di un sensore analogico come la sonda di temperatura mcp9700a.</p>
<p>Il codice dello sketch rimane essenzialmente invariato tranne per l&#8217;inserimento di una variabile per contenere i valori provenienti dalla funzione <strong>analogRead()</strong> e di qualche riga html aggiuntiva per formattare la pagina:</p>
<pre class="lang:arduino decode:true ">if (Data_RX == '\n')
{
//campiono il valore di tensione analogia
//in ingresso sul pin0 ella borad Arduino UNO
analogIn0 = analogRead(0);
//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("");
pc_client.print("");
//questo codice html permette di eseguireil refresh automatico
//della pagina html
pc_client.print("");
pc_client.print("");
pc_client.print("

Valore analogico letto dal pin 0");
//inserisco nella pagina html il valore acquisito dal pin analogico
pc_client.print(analogIn0);
pc_client.print("

");
//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;
}</pre>
<p>&nbsp;</p>
<p>Non serve altro, è veramente semplice inviare via http i dati acquisiti dall&#8217;Arduino.<br />
Possiamo certamente utilizzare anche gli altri ingressi analogici o come nel prossimo esempio leggere lo stato di alcuni pin digitali.<br />
Per impiegare i pin digitali dobbiamo, nel blocco <strong>setup()</strong>,  specificare quali intendiamo utilizzare come ingressi. Per una semplice prova io ho usato il pin6 e il pin7:</p>
<pre class="lang:arduino decode:true ">void setup()
{
//inizializza lo shield con il mac e l'ip
Ethernet.begin(mac, ip);
//inizializza l'oggetto server
ArduinoServer.begin();
//definisco i pin6 e pin7 come ingressi
pinMode(6, INPUT);
pinMode(7, INPUT);
}</pre>
<p>&nbsp;</p>
<p>La funzione <strong>digitalRead()</strong> acquisisce il valore dello stato dei pin in esame e lo memorizza in una variabile precedentemente dichiarata. Questo valore viene successivamente inviato al client tramite la pagina html</p>
<pre class="lang:arduino decode:true ">if (Data_RX == '\n')
{
//leggo lo stato dei pin digitali 6 e 7
valPin6 = digitalRead(6);
valPin7 = digitalRead(7);

//campiono il valore di tensione analogia
//in ingresso sul pin0 ella borad Arduino UNO
analogIn0 = analogRead(0);

//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("");
pc_client.print("");
//questo codice html permette di eseguireil refresh automatico
//della pagina html
pc_client.print("");
pc_client.print("");
pc_client.print("

Valore analogico letto dal pin 0");
//inserisco nella pagina html il valore acquisito dal pin analogico
pc_client.print(analogIn0);
pc_client.print("

");

//inserisco nella pagina htm lo stato dei pin in ingresso
if(valPin6 == HIGH)
//se il valore è alto
pc_client.print("Stato pin6 = HIGH");
else
//se il valore è basso
pc_client.print("Stato pin6 = LOW");

pc_client.println("
");

if(valPin7 == HIGH)
//se il valore è alto
pc_client.print("Stato pin7 = HIGH");
else
//se il valore è basso
pc_client.print("Stato pin7 = LOW");

pc_client.print("");

//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;
}</pre>
<p>&nbsp;</p>
<p>Anche questo codice risulta semplice e i commenti che lo accompagnano descrivono bene le varie istruzioni. Dopo aver caricato lo sketch sull&#8217;Arduino ho messo il pin6 alla +5Vdc e il pin 7 a massa ottenendo il risultato seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1944 size-full" title="Html_Result" src="https://logicaprogrammabile.it/wp-content/uploads/2011/09/Html_Result.gif" alt="Pagina html generata dal webserver Arduino" width="261" height="101" />Naturalmente i pin 10-11-12-13, sono utilizzati per la comunicazioni SPI con l&#8217;ethernet shield e quindi, non possono essere impiegati per altri scopi senza interferire nella comunicazione stessa.</p>
<p>Vi rimando al prossimo articolo dove vedremo come utilizzare il browser per inviare comandi alla board Arduino, nel frattempo potete sperimentare con le nozioni acquisite per aumentare le vostre capacità nell&#8217;uso della athernet shield.</p>
<p>A presto!</p>
<p>The post <a href="https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/">Leggere dagli ingressi analogici da remoto con Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/come-leggere-ingressi-analogici-remoto-arduino/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
