<?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>webduino Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/webduino/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/webduino/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Thu, 22 Oct 2015 12:45:35 +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>webduino Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/webduino/</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>Webduino Based Authentication. Accedere ad una pagina privata</title>
		<link>https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/</link>
					<comments>https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 25 Mar 2013 10:13:11 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[autenticazione]]></category>
		<category><![CDATA[Base64]]></category>
		<category><![CDATA[webduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=3417</guid>

					<description><![CDATA[<p>Come utilizzare la Based Authentication per accedere a una pagina protetta La libreria Webduino implementa una semplice autenticazione basata sul protocollo http. Certamente non offre un livello di sicurezza impenetrabile ma può comunque essere utile utilizzare questa funzione per le nostre applicazioni. Nell&#8217;esempio, viene caricata...</p>
<p>The post <a href="https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/">Webduino Based Authentication. Accedere ad una pagina privata</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Come utilizzare la Based Authentication per accedere a una pagina protetta</h3>
<p>La libreria <strong>Webduino</strong> implementa una semplice autenticazione basata sul protocollo http. Certamente non offre un livello di sicurezza impenetrabile ma può comunque essere utile utilizzare questa funzione per le nostre applicazioni.</p>
<p>Nell&#8217;esempio, viene caricata la pagina index.htm dove è presente un link che punta a una pagina protetta. per poter visualizzarne il contenuto è necessario inserire nome utente e password.</p>
<p>La <strong>based authentication</strong> si basa sulla codifica <strong>Base64</strong>. Il nume utente e la password, nella forma <strong>numeutente:password</strong>, vengono convertiti in un unica stringa  di caratteri.  Per la conversione<strong></strong>, potete utilizzare diversi servizi online oppure scaricare la mia app <a href="https://logicaprogrammabile.it/wp-content/uploads/2011/11/ConvertBase64.zip">ConvertBase64</a>.</p>
<p><a href="https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv.png"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-3430" alt="based authentication" src="https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv.png" width="330" height="237" srcset="https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv.png 330w, https://logicaprogrammabile.it/wp-content/uploads/2013/03/Base64Conv-300x215.png 300w" sizes="(max-width: 330px) 100vw, 330px" /></a></p>
<p><span id="more-3417"></span></p>
<p>Il codice seguente è pronto all&#8217;uso, dovete cambiare solamente l&#8217;indirizzo ip, adattando lo alla vostra rete locale.</p>
<p>[c]<br />
#include &quot;SPI.h&quot;<br />
#include &quot;Ethernet.h&quot;<br />
#include &quot;WebServer.h&quot;</p>
<p>//definisco mac address e indirizzo ip<br />
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };<br />
static uint8_t ip[] = { 192, 168, 1, 10};</p>
<p>//creo un oggetto webduino<br />
WebServer webserver(&quot;&quot;, 80);</p>
<p>//funzione che crea la pagina principale del sito<br />
void defaultCmd(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  server.httpSuccess();<br />
  if (type != WebServer::HEAD)<br />
  {<br />
    //invio al browser la pagina principale<br />
    P(helloMsg) = &quot;&lt;h4&gt;Accedi:&lt;/h4&gt;&lt;a href=\&quot;private.html\&quot;&gt;Pagina Privata&lt;/a&gt;&quot;;<br />
    server.printP(helloMsg);<br />
  }<br />
}</p>
<p>//questa funzione permette di verificare il nome utente e la password<br />
//e in caso di successo di visualizzare la pagina privata<br />
void privateCmd(WebServer &amp;server, WebServer::ConnectionType type, char *, bool)<br />
{<br />
  //user= admin<br />
  //password= admin</p>
<p>  //verifico nome utente e password<br />
  if (server.checkCredentials(&quot;YWRtaW46YWRtaW4=&quot;))<br />
  {<br />
    //in caso affermativo&#8230;<br />
    server.httpSuccess();<br />
    if (type != WebServer::HEAD)<br />
    {<br />
      //invio al browser la pagina privata<br />
      P(helloMsg) = &quot;&lt;h3&gt;Buongiorno Admin!&lt;/h3&gt;&quot;;<br />
      server.printP(helloMsg);<br />
    }<br />
  }<br />
  else<br />
  {<br />
    //creo una risposta http<br />
    //nel caso in cui si tenta un accesso<br />
    //no autorizzato<br />
    server.httpUnauthorized();<br />
  }<br />
}</p>
<p>void setup()<br />
{<br />
  //inizializzo la ethernet shield<br />
  Ethernet.begin(mac, ip);<br />
  //definisco funzione che gestisce<br />
  //la pagina principale del sito<br />
  webserver.setDefaultCommand(&amp;defaultCmd);<br />
  webserver.addCommand(&quot;index.html&quot;, &amp;defaultCmd);<br />
  //definisco la funzione che gestisce la pagina privata<br />
  webserver.addCommand(&quot;private.html&quot;, &amp;privateCmd);</p>
<p>  //inizializzo la libreria webduino<br />
  webserver.begin();<br />
}</p>
<p>void loop()<br />
{<br />
  char buff[64];<br />
  int len = 64;</p>
<p>  webserver.processConnection(buff, &amp;len);<br />
}<br />
[/c]</p>
<p>La libreria Webduino è molto flessibile e permette di realizzare applicazioni interessanti in modo molto veloce.</p>
<p>The post <a href="https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/">Webduino Based Authentication. Accedere ad una pagina privata</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/based-authentication-webduino-accedere-pagina-protetta/feed/</wfw:commentRss>
			<slash:comments>3</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 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 loading="lazy" 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="auto, (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>
	</channel>
</rss>
