<?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>Web Server Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/web-server/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/web-server/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sun, 03 Jan 2021 17:56:52 +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>Web Server Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/web-server/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>5 passi per installare un webserver LAMP sul Raspberry PI</title>
		<link>https://logicaprogrammabile.it/5-passi-installare-webserver-lamp-raspberry-pi/</link>
					<comments>https://logicaprogrammabile.it/5-passi-installare-webserver-lamp-raspberry-pi/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 04 Jan 2021 07:00:29 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[Servizio web]]></category>
		<category><![CDATA[Web Server]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6404</guid>

					<description><![CDATA[<p>Installare LAMP su Raspberry PI In quei progetti dove diverse schede interagiscono tra loro, scambiandosi e memorizzando dati, potrebbe risultare utile avere un mini server (LAMP) per la memorizzazione e l&#8217;elaborazione dei dati. In questo caso niente di più flessibile di un computer embedded come...</p>
<p>The post <a href="https://logicaprogrammabile.it/5-passi-installare-webserver-lamp-raspberry-pi/">5 passi per installare un webserver LAMP sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Installare LAMP su Raspberry PI</h1>
<p>In quei progetti dove diverse schede interagiscono tra loro, scambiandosi e memorizzando dati, potrebbe risultare utile avere un mini server (LAMP) per la memorizzazione e l&#8217;elaborazione dei dati. In questo caso niente di più flessibile di un computer embedded come una Raspberry PI.</p>
<p>Nel mio caso mi sono trovato a realizzare un sistema composto da diverse schede Arduino MKRZero + MKR ETH che acquisiscono dati da dei sensori analogici. Questi dati invece di essere memorizzati su scheda SD ho deciso di inviarli ad un database locale, dato che le schede sono collegate alla stessa lan. Per limitare i costi ho inserito un Raspberry PI configurato come server LAMP (Linux + Apache + Mysql + Php).</p>
<p>In questo articolo vediamo come installare tutto il necessario per creare un server LAMP con Raspberry PI seguendo questi 5 passi:</p>
<ol>
<li><a href="#L1">Installare server web apache</a></li>
<li><a href="#L2">Installare motore PHP</a></li>
<li><a href="#L3">Installare database relazionale Mysql (MAriaDB)</a></li>
<li><a href="#L4">Installare software di gestione PhpMyAdmin</a></li>
<li><a href="#L5">Configurare utenti e privilegi</a></li>
</ol>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-6434" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/schema.jpg" alt="" width="715" height="506" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/schema.jpg 715w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/schema-300x212.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/schema-150x106.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/schema-585x414.jpg 585w" sizes="(max-width: 715px) 100vw, 715px" /></p>
<h2 id="L1">1. Installare Apache</h2>
<p>Il <a href="https://httpd.apache.org/">server Apache</a> permette di avere un server HTTP locale capace di elaborare le richieste dei client collegati alla stessa rete. Per l&#8217;installazione si utilizza il commando seguente :</p>
<pre>sudo apt-get install apache2</pre>
<p>Premiamo invio e alla richiesta di continuare digitiamo S e nuovamente invio</p>
<p><img decoding="async" class="aligncenter size-full wp-image-6408" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190822.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190822.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190822-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190822-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190822-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190822-585x370.jpg 585w" sizes="(max-width: 661px) 100vw, 661px" /></p>
<p>Terminata l&#8217;installazione digitiamo il seguente comando per leggere l&#8217;indirizzo ip della scheda Raspberry PI</p>
<pre>hostname -I</pre>
<p>premendo invio verrà visualizzato l&#8217;ip assegnato alla scheda.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-6410" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190952.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190952.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190952-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190952-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190952-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-190952-585x370.jpg 585w" sizes="(max-width: 661px) 100vw, 661px" /></p>
<p>apriamo il browser su un pc della stessa rete e digitiamo nella barra degli indirizzi l&#8217;ip della scheda. Se il server apache è stato installato correttamente dovreste visualizzare una schermata come la seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-6411" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191038.jpg" alt="" width="779" height="867" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191038.jpg 812w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191038-270x300.jpg 270w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191038-135x150.jpg 135w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191038-768x854.jpg 768w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191038-585x651.jpg 585w" sizes="auto, (max-width: 779px) 100vw, 779px" /></p>
<h2 id="L2">2. Installare PHP</h2>
<p>Il passo successivo è quello di installare il motore PHP che permetterà di eseguire tutti gli script php contenuti nelle pagine web. Digitiamo il seguente comando:</p>
<pre>sudo apt-get install php</pre>
<p>premiamo invio, confermiamo l&#8217;installazione digitando S e nuovamente invio.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6413" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191257.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191257.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191257-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191257-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191257-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191257-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>Terminata l&#8217;installazione procediamo a verificare che il motore php sia stato installato correttamente. Portiamoci sulla directory seguente:</p>
<pre>cd /var/www/html/</pre>
<p>elenchiamo ora i file presenti nella cartella con il comando:</p>
<pre>ls -l</pre>
<p>dovrebbe esserci un solo file, index.html. rimuoviamolo con il seguente comando</p>
<pre>sudo rm index.html</pre>
<p>Ora utilizzando un editor di testo creiamo una nuova pagina , index.php, eseguendo questo comando</p>
<pre>sudo nano index.php</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6415" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191731.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191731.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191731-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191731-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191731-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191731-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>Premiamo invio e digitiamo nel&#8217;editor di testo nano la seguente istruzione</p>
<pre>&lt;?php echo(phpinfo()) ?&gt;</pre>
<p>Per salvare il file index.php premiamo sulla tastiera i tasti CTRL+O e per uscire i tasti CRTL+X</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6416" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191812.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191812.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191812-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191812-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191812-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191812-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>nuovamente eseguiamo un elenco dei files contenuti nella cartella html con il comando:</p>
<pre>ls -l</pre>
<p>dovremmo avere un solo file, index.php:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6417" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191840.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191840.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191840-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191840-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191840-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191840-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>dal browser precedentemente aperto ricarichiamo la pagina (oppure digitiamo nuovamente l&#8217;ip della scheda Raspberry) e se tutto sta girando correttamente dovremmo visualizzare le informazioni relative al motore php, come di seguito:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6418" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191906.jpg" alt="" width="950" height="881" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191906.jpg 950w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191906-300x278.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191906-150x139.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191906-768x712.jpg 768w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-191906-585x543.jpg 585w" sizes="auto, (max-width: 950px) 100vw, 950px" /></p>
<p>Se il server web non risponde potremmo provare a riavviarlo digitando questo comando:</p>
<pre>sudo service apache2 restart</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6419" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-192051.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-192051.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-192051-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-192051-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-192051-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Immagine-2021-01-02-192051-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<h2 id="L3">3. Installare MySQL</h2>
<p>Mysql è un RDBMS molto diffuso in ambiente web. Sviluppato come progetto open source è poi stato acquisito da Oracle. Attualmente è disponibile sotto licenza GNU e anche commerciale. Nel nostro Raspberry installeremo <a href="https://mariadb.org/">mariaDB</a> un progetto totalmente open che si basa sul codice sorgente di MySql. Per eseguire l&#8217;installazione digitiamo il seguente comadndo:</p>
<pre>sudo apt-get install mariadb-server</pre>
<p>confermiamo digitando S e premendo invio</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6420" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_install.jpg" alt="" width="661" height="578" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_install.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_install-300x262.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_install-150x131.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_install-585x512.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<h2 id="L4">4. Installate PhpMyAdmin (opzionale)</h2>
<p>Se siete arrivati fin qui la parte server è stata installata correttamente. Ora possiamo installare un software scritto in php che permette di interagire con il server MySql, tramite una comoda interfaccia web. Eseguiamo quindi il seguente comando per avviare l&#8217;installazione e la configurazione di PhpMyAdmin:</p>
<p>sudo apt-get install phpmyadmin</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6426" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_install.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_install.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_install-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_install-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_install-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_install-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>Confermiamo digitando S e premendo invio per avviare il download del software e la sua installazione.</p>
<p>Dopo qualche istante ci viene richiesto di selezionare il server web installato sul Raspberry in modo tale che phpmyadmin esegua le sue configurazioni. Selezioniamo con la barra spaziatrice la voce apache2, con il tasto tab ci spostiamo sul pulsante &lt;ok&gt;. Premiamo invio per continuare:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6422" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config2.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config2.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config2-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config2-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config2-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config2-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>Successivamente viene mostrata una nuova finestra per poter configurare il database mysql. Selezioniamo il pulsante &lt;Sì&gt; e premiamo invio:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6423" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config3.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config3.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config3-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config3-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config3-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config3-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>Ora digitiamo una password per l&#8217;utente phpmyadmin e premiamo invio:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6424" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config4.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config4.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config4-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config4-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config4-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config4-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>ripetiamo digitando e confermando la password, continuiamo premendo invio:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6425" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config5.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config5.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config5-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config5-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config5-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadmin_config5-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>dopo qualche istante l&#8217;installazione terminerà.</p>
<p>Proviamo ora a verificare se l&#8217;installazione del software phpmyadmin è avvenuta con successo. Portiamoci nuovamente sul browser e digitiamo nella barra degli indirizzi il seguente link</p>
<p>[ip raspberry]/phpmyadmin</p>
<p>dovremmo visualizzare la schermata di login come segue:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6431" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadminlogin.jpg" alt="phpmyadmin login" width="652" height="582" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadminlogin.jpg 652w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadminlogin-300x268.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadminlogin-150x134.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/phpmyadminlogin-585x522.jpg 585w" sizes="auto, (max-width: 652px) 100vw, 652px" /></p>
<p>digitiamo come nome utente phpmyadmin e come password quella inserita nella procedura guidata per eseguire l&#8217;accesso all&#8217;interfaccia web.</p>
<p>l&#8217;utente phpmyadmin non ha privilegi che permettano la gestione dei databases. Nel prossimo passo provvederemo a creare un utente che possieda tutti i privilegi.</p>
<h2 id="L5">5. Creare un utente per gestire il database</h2>
<p>I comandi seguenti servono a creare un utente con tutti i privilegi di amministrazione del database. In questo modo protremmo accedere tramite phpmyadmin per creare e gestire i nostri databases.</p>
<p>Il comando seguente permette di avviare la console mysql in modo tale da poter inviare comandi sql all&#8217; RDBMS:</p>
<pre>sudo mariadb</pre>
<p>e premiamo invio:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6437" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_ui.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_ui.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_ui-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_ui-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_ui-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mariadb_ui-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>ora creiamo un utente, nel mio caso con nome marco, tra apici inseriamo anche una password:</p>
<pre>CREATE USER marco@localhost IDENTIFIED BY 'inserisci la tua password';</pre>
<p>ricordati di terminate la stringa sql con il simbolo di punto e virgola. Premiamo invio per per eseguire la query:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6436" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/query.jpg" alt="" width="693" height="450" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/query.jpg 693w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/query-300x195.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/query-150x97.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/query-585x380.jpg 585w" sizes="auto, (max-width: 693px) 100vw, 693px" /></p>
<p>ora l&#8217;utente marco è stato creato ma come l&#8217;utente phpmyadmin non ha nessun privilegio e non puo effettuare nessuna operazione. Assegniamo quindi a questo utente tutti i privilegi eseguendo questa query:</p>
<pre>GRANT ALL PRIVILEGES ON *.* TO marco@localhost;</pre>
<p>premiamo invio per eseguire la query:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6438" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/grant_privileges.jpg" alt="" width="693" height="450" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/grant_privileges.jpg 693w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/grant_privileges-300x195.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/grant_privileges-150x97.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/grant_privileges-585x380.jpg 585w" sizes="auto, (max-width: 693px) 100vw, 693px" /></p>
<p>usciamo dal dal database eseguendo il seguente comando:</p>
<pre>exit;</pre>
<p>riavviamo il servizio mysql eseguendo il seguente comando</p>
<pre>sudo service mysql restart</pre>
<h2>Conclusioni</h2>
<p>Utilizzando un Raspberry PI dal costo contenuto è possibile creare un hub di rete capace di eseguire un server LAMP con adeguate prestazioni. In questo modo è possibile integrare un sistema di schede che piuttosto che memorizzare i dati in una propria memoria può invece inviare i dati su un database relazionale con tutti i vantaggi che ne derivano.</p>
<p>The post <a href="https://logicaprogrammabile.it/5-passi-installare-webserver-lamp-raspberry-pi/">5 passi per installare un webserver LAMP sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/5-passi-installare-webserver-lamp-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Ethernet shield usare un browser per pilotare Arduino</title>
		<link>https://logicaprogrammabile.it/ethernet-shield-utilizzare-browser-controllo-remoto-arduino/</link>
					<comments>https://logicaprogrammabile.it/ethernet-shield-utilizzare-browser-controllo-remoto-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 05 Sep 2011 08:57:11 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Accesso remoto]]></category>
		<category><![CDATA[Web Server]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1948</guid>

					<description><![CDATA[<p>Utilizzando l&#8217;ethernet shield possiamo pilotare da remoto le uscite dell&#8217;Arduino Continuiamo la serie di articolo per il controllo da remoto del nostro Arduino. Negli articoli precedenti abbiamo visto come sia semplice leggere lo stato dei pin digitali e come acquisire dei segnali con gli ingressi...</p>
<p>The post <a href="https://logicaprogrammabile.it/ethernet-shield-utilizzare-browser-controllo-remoto-arduino/">Ethernet shield usare un browser per pilotare Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzando l&#8217;ethernet shield possiamo pilotare da remoto le uscite dell&#8217;Arduino</h1>
<p>Continuiamo la serie di articolo per il controllo da remoto del nostro Arduino. Negli articoli precedenti abbiamo visto come sia semplice leggere lo stato dei pin digitali e come acquisire dei segnali con gli ingressi analogici della scheda.<br />
Questo articolo vedrà di utilizzare il browser per inviare dei comandi alla board <a href="http://www.amazon.it/gp/product/B008GRTSV6/ref=as_li_ss_tl?ie=UTF8&amp;camp=3370&amp;creative=24114&amp;creativeASIN=B008GRTSV6&amp;linkCode=as2&amp;tag=logicaprogram-21" target="_blank" rel="nofollow">Arduino UNO</a>, tramite protocollo http, per pilotare le uscite dei in digitali.</p>
<p>La prima operazione da decidere riguarda la scelta dei pin che intendiamo impiegare come uscite in questo esempio ho decido di configurare i pin2 e il pin3.</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);

//definisco i pin2 e pin3 come uscite
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
}</pre>
<p>&nbsp;</p>
<p><span id="more-1948"></span>Adesso dobbiamo capire come inviare via browser dei comandi all&#8217;Arduino. Questo è possibile utilizzando la barra degli indirizzi del browser, infatti inserendo del testo dopo l&#8217;indirizzo ip della board possiamo recuperarlo utilizzando la funzione <strong>read()</strong>. Per capire meglio, l&#8217;esempio seguente illustra le varie fasi:</p>
<p>inserisco, nel browser, l&#8217;indirizzo ip della board e del testo aggiuntivo:</p>
<p style="text-align: center;"><strong>http://10.192.1.251/testo_personalizzato</strong></p>
<p>dopo aver premuto il tasto invio o il pulsante vai, il browser invierà alla board questa informazione:</p>
<p style="text-align: center;"><strong>GET /testo_personalizzato HTTP/1.0</strong></p>
<p style="text-align: left;">I singoli byte letti dalla funzione <strong>read()</strong> vengono concatenati per ricostruire l&#8217;intera stringa http. Questo avviene creando un oggetto <strong>String</strong>  e utilizzando l&#8217;istruzione di concatenamento <strong>+=</strong></p>
<pre class="lang:arduino decode:true ">//Dichiaro un oggetto String
String msg = "";

...

//leggo i byte disponibili
//provenienti dal client
Data_RX = pc_client.read();

//ricostruisco la stringa ricevuta concatenando i singoli byte
msg += Data_RX;

...</pre>
<p>&nbsp;</p>
<p style="text-align: left;">Quando termino di leggere tutti i byte inviati dal browser, l&#8217;oggetto <strong>msg</strong> conterrà l&#8217;intero dato, così come inviato dal browser</p>
<p style="text-align: center;"><strong>GET /testo_personalizzato HTTP/1.0</strong></p>
<p>utilizzando il metodo <strong>indexOf()</strong> dell&#8217;oggetto <strong>msg</strong> posso controllare se all&#8217;interno di questa stinga è presente un particolare teso, ad esempio per verificare la presente del testo <strong>HTTP</strong> dovrò scrivere</p>
<p style="text-align: center;"><strong>int occorrenza = msg.indexOf(&#8220;HTTP&#8221;)</strong>;</p>
<p>il valore restituito rappresenta il numero di occorrenze trovate all&#8217;interno della stringa <strong>msg</strong>, in questo caso il testo HTTP è presente una sola volta quindi la variabile <strong>occorrenza</strong> conterrà il valore 1.</p>
<p>Di conseguenza per pilotare l&#8217;uscita <strong>pin2</strong> al livello alto potremmo scrivere sulla barra dell&#8217;indirizzo del browser qualcosa del tipo</p>
<p style="text-align: center;"><strong>http://10.192.1.251/PIN2ON</strong></p>
<p>in questo caso la stringa <strong>msg</strong> sarà uguale a</p>
<p style="text-align: center;"><strong>GET /</strong><strong>PIN2ON </strong>HTTP/1.0</p>
<p>il metodo <strong>indexOf</strong> dovrà cercare la stringa <strong>PIN2ON</strong> e, in base al risultato, attivare o meno l&#8217;uscita dell&#8217;Arduino. Il codice seguente realizza quanto esposto</p>
<pre class="lang:arduino decode:true ">...

//cerco all'interno della stringa il parametro che mi interessa
cmd = msg.indexOf("LEDON");

if (cmd &gt; 0)
digitalWrite(2, HIGH);
else
digitalWrite(2, LOW);

...</pre>
<p>&nbsp;</p>
<p>Per chiarezza inserisco tutto il codice dello sketch :</p>
<pre class="lang:arduino decode:true ">/*
Semplice Controllo remoto
Settembre 2011
Marco Lai
*/

//Librerie impiegate per il progetto
#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;

//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {10, 192, 1, 251}; //modificate questo valore in base alla vostra rete

char Data_RX;

String msg = "";
int cmd = 0;

//creao un oggetto server che rimane in ascolto sulla porta
//specificata
Server ArduinoServer(80);

void setup()
{
//inizializza lo shield con il mac e l'ip
Ethernet.begin(mac, ip);
//inizializza l'oggetto server
ArduinoServer.begin();

//definisco i pin2 e pin3 come uscite
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);

}

void loop()
{
//IMPORTANTE pulisco la variabile msg
msg = "";

Client pc_client = ArduinoServer.available();

//controllo se pc_client è true
if (pc_client != false)
{
//controllo continuamente che il client sia connesso
while (pc_client.connected())
{
//Controllo se ci sono byte disponibili per la lettura
if (pc_client.available())
{
//leggo i byte disponibili
//provenienti dal client
Data_RX = pc_client.read();

//ricostruisco la stringa ricevuta concatenando i singoli byte
msg += Data_RX;

//Attendo che tutti i byte siano letti
//quando Data_RX contiene il carattere
//di nuova line capisco tutti i byte sono
//stati letti
if (Data_RX == '\n')
{
//cerco all'interno della stringa il parametro che mi interessa
cmd = msg.indexOf("LEDON");

//Invio la risposta al client
//invio lo status code
pc_client.println("HTTP/1.1 200 OK");
//imposto il data type
pc_client.println("Content-Type: text/html");
pc_client.println();
//invio codice html
pc_client.print("&lt;html&gt;&lt;body&gt;");
pc_client.print("&lt;head&gt;");
//questo codice html permette di eseguireil refresh automatico
//della pagina html
pc_client.print("&lt;META HTTP-EQUIV='refresh' CONTENT='5; /'&gt;");
pc_client.print("&lt;/head&gt;");

//Piloto l'uscita e invio lo stato al browser
if (cmd &gt; 0)
{
digitalWrite(2, HIGH);
pc_client.print("&lt;p&gt;PIN2 Attivo&lt;/p&gt;");
}
else
{
digitalWrite(2, LOW);
pc_client.print("&lt;p&gt;PIN2 NON Attivo&lt;/p&gt;");
}

pc_client.print("&lt;/body&gt;&lt;/html&gt;");

//aspetto 1 ms affinche la risposta giunga al browser del client
delay(1);
//esco dal ciclo while una volta completato l'invio della risposta
break;
}
}
}
//chiudo la connessione
pc_client.stop();
}
}</pre>
<p>&nbsp;</p>
<p>Utilizzando questo metodo possiamo attivare le uscite dell&#8217;Arduino ma anche inviare altri comandi che ad esempio generano un segnale pwm piuttosto che inviare dati tramite la porta UART ad altri dispositivi; le possibilità sono tante e permettono un controllo remoto completo ed efficiente.</p>
<p>The post <a href="https://logicaprogrammabile.it/ethernet-shield-utilizzare-browser-controllo-remoto-arduino/">Ethernet shield usare un browser per pilotare Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/ethernet-shield-utilizzare-browser-controllo-remoto-arduino/feed/</wfw:commentRss>
			<slash:comments>24</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Ethernet Shield controllo remoto via web con http</title>
		<link>https://logicaprogrammabile.it/arduino-ethernet-shield-controllo-remoto-via-web-con-http/</link>
					<comments>https://logicaprogrammabile.it/arduino-ethernet-shield-controllo-remoto-via-web-con-http/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Wed, 31 Aug 2011 14:39:46 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Controllo remoto]]></category>
		<category><![CDATA[Ethernet Shield]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[Web Server]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=1883</guid>

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


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

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

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

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

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

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

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

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

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

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

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

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

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