<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://www.raspibo.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GioCupo</id>
	<title>raspibo - Contributi utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://www.raspibo.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GioCupo"/>
	<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php/Speciale:Contributi/GioCupo"/>
	<updated>2026-05-05T01:18:53Z</updated>
	<subtitle>Contributi utente</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Discussione:Termostato&amp;diff=6157</id>
		<title>Discussione:Termostato</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Discussione:Termostato&amp;diff=6157"/>
		<updated>2017-05-23T13:12:44Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando provo ad installare phpredis e lancio phpize mi viene restituito l'errore &lt;br /&gt;
Cannot find config.m4.&lt;br /&gt;
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module&lt;br /&gt;
&lt;br /&gt;
ho provato a rimuovere e reinstallare php5-dev, ma il problema permane.&lt;br /&gt;
qualche suggerimento?&lt;br /&gt;
grazie&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Devi lanciare phpize nella cartella in cui hai scaricato gli script da github (se guardi nell'archivio https://github.com/phpredis/phpredis si trova nella cartella principale).&lt;br /&gt;
Per trovarla puoi lanciare il comando find e vedere dove hai scaricato gli script&lt;br /&gt;
&lt;br /&gt;
 find / -name config.m4&lt;br /&gt;
&lt;br /&gt;
vai nella cartella e lancia phpize da lì.&lt;br /&gt;
&lt;br /&gt;
Daniele&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele e grazie per la risposta.&lt;br /&gt;
&lt;br /&gt;
Ho seguito il tuo suggerimento e ho risolto il problema di installazione di phpredis.&lt;br /&gt;
&lt;br /&gt;
Solo che ora, qualsiasi file php apro, ho una blank page. Ho alzato i livelli di log dal php.ini ma a quanto pare non c'è alcun errore e anche il classico file di test con il phoinfo() restituisce errore, ma solo una bella pagina bianca.&lt;br /&gt;
&lt;br /&gt;
Se apro la pagina di default di ngix invece appare, ma quella è in html. Ho verificato se ci fosse qualche errore in php.ini, ma niente...&lt;br /&gt;
non ci capisco più nulla.&lt;br /&gt;
&lt;br /&gt;
Smadonnandoci ulteriormente sono arrivato alla situazione in cui tutti i file php non vengono eseguiti ma vengono 'scaricati'. &lt;br /&gt;
&lt;br /&gt;
Quindi è un problema di configurazione di ngix col php. Ma ancora non ho risolto...&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ho aggiornato un pò la pagina che ho scritto ormai qualche anno fa. L'avevo riaggiornata ma qualcosa è di nuovo cambiato. &lt;br /&gt;
&lt;br /&gt;
Sto reinstallando anche io un Raspberry ex novo dato che avevo in mente di aggiornare il progetto. &lt;br /&gt;
&lt;br /&gt;
Ricontrolla, un attimo anche i passaggi iniziali, ho lasciato la cartella del server web predefinita, dato che ora nginx prevede /var/www/html.&lt;br /&gt;
&lt;br /&gt;
Mi sono trovato nella tua stessa situazione ed ho sistemato con una modifica al file /etc/nginx/sites-enabled/default, la direttiva cha causava probemi era &amp;quot;include fastcgi.conf;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
                try_files $uri =404;&lt;br /&gt;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
                # NOTE: You should have &amp;quot;cgi.fix_pathinfo = 0;&amp;quot; in php.ini&lt;br /&gt;
                # With php5-cgi alone:&lt;br /&gt;
                # With php5-fpm:&lt;br /&gt;
                fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
                fastcgi_index index.php;&lt;br /&gt;
                include fastcgi.conf;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Ora la parte web funziona anche se non completamente perchè durante l'installazione di redis restituisce un errore:&lt;br /&gt;
Una volta lanciato il &amp;quot;./configure [--enable-redis-igbinary]&amp;quot; restituisce queste errore:&lt;br /&gt;
&lt;br /&gt;
checking if compiler supports -R... yes&lt;br /&gt;
checking build system type... Invalid configuration `[--enable-redis-igbinary]': machine `[--enable-redis' not recognized&lt;br /&gt;
configure: error: /bin/bash ./config.sub [--enable-redis-igbinary] failed&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ciao,&lt;br /&gt;
il comando che hai dato &amp;quot;./configure [--enable-redis-igbinary]&amp;quot; non esiste. &lt;br /&gt;
&lt;br /&gt;
Nel senso che le parentesi quadre si usano per indicare un parametro opzionale(in questo caso --enable-redis-igbinary). Significa che puoi dare il comando:&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
oppure &lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-redis-igbinary&lt;br /&gt;
&lt;br /&gt;
Lancia semplicemente il primo comando.&lt;br /&gt;
----&lt;br /&gt;
ciao&lt;br /&gt;
Ok ok ...faccio la mia mezzora di vergnogna! :D&lt;br /&gt;
Però ancora non ci riesco, se apro le pagina http://raspberrypi2/html/termo/temperature.php&lt;br /&gt;
appaiono le righe in testata...&lt;br /&gt;
connect('127.0.0.1', 6379); $redis-&amp;gt;setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE); $t_min_notte=$redis-&amp;gt;get('t_min_notte'); $t_max_notte=$redis-&amp;gt;get('t_max_notte'); $t_min_giorno=$redis-&amp;gt;get('t_min_giorno'); $t_max_giorno=$redis-&amp;gt;get('t_max_giorno'); ?&amp;gt;&lt;br /&gt;
&amp;quot;Regolazione temperature termostato&amp;quot; (questo è il titolo della pagina).&lt;br /&gt;
Quindi ancora qualcosa non va...&lt;br /&gt;
----&lt;br /&gt;
Potrebbe essere una configurazione di php se fai girare la paginetta con phpinfo, il parametro short_open_tag è settato a on?&lt;br /&gt;
&lt;br /&gt;
Per intenderci nelle pagine si può iniziare a scrivere codice con '''&amp;lt;?php''' (short_open_tag indifferentemente on oppure off) oppure '''&amp;lt;?''' (short_open_tag deve essere settato ad on), io il codice lo scrivo con la forma abbreviata quindi solo con il minore e il punto interrogativo.&lt;br /&gt;
&lt;br /&gt;
Vedi se il parametro è settato off dovresti provare a settarlo ad on agendo sui files php.ini.&lt;br /&gt;
&lt;br /&gt;
Per controprova puoi modificare il tag di apertura di una pagina e vedere se così funziona.&lt;br /&gt;
&lt;br /&gt;
Come ti avevo già scritto ricontrolla anche i primi passi, ho dovuto fare anche una modifica al file /boot/config.txt perchè a me non funzionava 1wire e non vedevo i sensori.&lt;br /&gt;
&lt;br /&gt;
PS: nella mia installazione ex novo non ho modificato nulla e mi trovo short_open_tag settato on.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele&lt;br /&gt;
era proprio quel parametro! Modificato dal php.ini (e riavviato il tutto) ha funzionato. Grazie Mille!&lt;br /&gt;
&lt;br /&gt;
Considera che ho installato tutto su un RSB 2 e che sono ripartito 3 volte da sistema operativo pulito (a forza di fare prove e modificare file di configurazione arrivavo al punto che non funzionava più nulla) eppure quel parametro era su Off.&lt;br /&gt;
&lt;br /&gt;
Ancora non sono riuscito a far funzionare tutto (non leggo la temperatura) ma probabilmente è qualcosa sul path, non c'è stato verso di installare gli script sulla root) mentre quella modifica sul config.txt è stata una delle prime cose che ho fatto perchè in effetti non mi rilevava i sensori ed avevo trovato documentazione a riguardo.&lt;br /&gt;
&lt;br /&gt;
Ti ringrazio ancora...e ti aggiorno sugli sviluppi! E complimenti per il lavoro.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Non se ne esce ..:)&lt;br /&gt;
&lt;br /&gt;
Non mi appare nulla di grafico sulle pagine (intendo grafici o temperature) e sul log di ngix è un continuo avere righe con questi errori:&lt;br /&gt;
&lt;br /&gt;
 2015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;&lt;br /&gt;
 PHP message: PHP Notice:  Undefined index: start in /var/www/html/termo/termo.php on line 21&lt;br /&gt;
 PHP message: PHP Notice:  Undefined index: end in /var/www/html/termo/termo.php on line 21&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 2015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;hp on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 46&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 46&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encounter&lt;br /&gt;
 12015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;et: 13 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''PHP Notice: ''' non è un errore è solo una informazione quindi niente di preoccupante, per gli altri errori, penso possano dipendere dalla mancata lettura dei sensori di temperatura(se ancora non riesci a leggerli).&lt;br /&gt;
&lt;br /&gt;
Hai modificato gli script 04_leggi_temperatura.sh e 05_memorizza_temp.sh per metterci gli indirizzi dei tuoi sensori?&lt;br /&gt;
&lt;br /&gt;
Su redis vedi che i dati vendono correttamente pubblicati? Prova il comando&lt;br /&gt;
&lt;br /&gt;
 redis monitor&lt;br /&gt;
&lt;br /&gt;
Io sto procedendo con la nuova versione, ma sono ancora un pò indietro con i test e con l'interfaccia. Ho anche riscritto il codice in python, dato che il tutto diventa più complesso puoò anche darsi che crei una immagine pronta per Raspberry Pi modello B, vediamo se riesco ad arrivare ad un punto soddisfacente.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao Daniele e buon anno!&lt;br /&gt;
&lt;br /&gt;
la temperatura dei sensori è stata l'unica cosa che ha funzionato sempre :), gli script restituiscono correttamente la temperatura.&lt;br /&gt;
&lt;br /&gt;
Il mio dubbio infatti è proprio redis, per me non è correttamente funzionante e redis monitor mi restituisce 'comanda non trovato'. Ho provato a cercare anche tutti i file redis ma escono solo file di configurazione o cartelle.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Buon anno!&lt;br /&gt;
&lt;br /&gt;
..ho sbagliato a scrivere....&lt;br /&gt;
&lt;br /&gt;
 redis-cli monitor&lt;br /&gt;
&lt;br /&gt;
guarda che ho anche corretto la pagina, probabilmente mancava la schedulazione della memorizzazione temperature, se lanci il monitor e lo lasci aperto in un'altra finestra  lanciando lo script 05_memorizza_temp.sh dovresti vedere passare un pò di inserimenti di valori.&lt;br /&gt;
&lt;br /&gt;
Dopo lancia anche termostato.sh e dovresti completare il giro.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao...&lt;br /&gt;
dunque, i dati passano...passa qualcosa anche mentre accedo alle pagine web, ma i vari grafici non appaiono, questo è uno screen-shot di cosa appare:&lt;br /&gt;
[[Media:http://imageshack.com/a/img633/3715/nks2zn.jpg]]&lt;br /&gt;
&lt;br /&gt;
Altra cosa, una delle ultime righe di termo.php contiene questo codice che però fa riferimento ad uno script inesistente:&lt;br /&gt;
$comando=&amp;quot;/root/redis_2_csv.sh &amp;quot; . $start . &amp;quot; &amp;quot; . $end;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ok, ho capito, che non sembra essere un problema di redis. &lt;br /&gt;
&lt;br /&gt;
Proviamo a vedere se è un problema di Flotr2 la libreria grafica, dell'archivio che hai scaricato da github puoi provare a vedere se funzionano gli esempi che dovrebbero essere pià o meno a questo indirizzo.... http://raspberrypi2/html/Flotr2/examples/index.html &lt;br /&gt;
&lt;br /&gt;
A questo punto se non vanno gli esempi bisogna vedere se c'è qualche altro problema con php, se gli esempi vanno allora potrebbe esserci qualcosa che non va sull'interrogazione di redis dalle pagine web.&lt;br /&gt;
&lt;br /&gt;
Hai provato se variando la programmazione settimanale http://raspberrypi2/html/termo/prog_settimana.php le modiche vengono salvate?&lt;br /&gt;
&lt;br /&gt;
Ho aggiornato la pagina del wiki aggiungendo anche redis_2_csv.sh è uno script che ho creato per il debug e che ho utilizzato nei primi tempi per vedere se l'algoritmo funzionava correttamente. Gli id dei sensori sono scritti a mano nel codice, correggili mettendoci i tuoi magari ti serve più avanti per fare un debug.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Dunque...&lt;br /&gt;
Ho resettato il RP2 e l'ho riportato al jessie.&lt;br /&gt;
&lt;br /&gt;
Ho ricominciato tutto dall'inizio, reinstallando tutto. Una cosa che ho fatto è installare gli script sh sotto /root/ e non sotto altro utente come avevo fatto precedentemente (cambiando comunque path sul codice).&lt;br /&gt;
&lt;br /&gt;
Una cosa che manca alla documentazione ora e che prima c'era è quella della modifica del php.ini inserendo  extension=redis.so.&lt;br /&gt;
&lt;br /&gt;
altra cosa: per far funzionare redis è necessario eseguire anche l'installazione con questo comando:  sudo pecl install redis&lt;br /&gt;
&lt;br /&gt;
Per finire bisogna cambiare il codice su termo.php alla riga 39, infatti riporta questa linea :&lt;br /&gt;
&lt;br /&gt;
$temp_1       = $redis-&amp;gt;lRange('Temp_1', $start, $end); &lt;br /&gt;
$temp_2       = $redis-&amp;gt;lRange('Temp_2', $start, $end); &lt;br /&gt;
&lt;br /&gt;
ma per farla funzionare ho dovuto mettere&lt;br /&gt;
&lt;br /&gt;
$temp_1       = $redis-&amp;gt;lRange('camera', $start, $end);&lt;br /&gt;
$temp_2       = $redis-&amp;gt;lRange('cucina', $start, $end);&lt;br /&gt;
&lt;br /&gt;
Ora vedo tutto, anzi, in realtà mi manca il dato della temperatura esterna...probabilmente è sempre il nome del campo errato, ma non so qual è quello corretto.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Direi che hai fatto grossi passi avanti!&lt;br /&gt;
&lt;br /&gt;
Per le modifiche al wiki al momento le ho riportate io, ma puoi controllare e correggere direttamente anche tu e' il bello del wiki!, fai solo attenzione all'impaginazione, non e' difficile guarda come e' fatta la pagina e usa il bottone &amp;quot;visualizza anteprima&amp;quot;. Ho anche riportato le modifiche sull'archivio github per la parte web.&lt;br /&gt;
&lt;br /&gt;
La libreria redis l'ho tolta io perche' me la sono trovata gia' installata sulla nuova versione del termostato, ma penso sia dovuto alla versione di Raspbian, ho messo una nota.&lt;br /&gt;
&lt;br /&gt;
Se vuoi navigare su redis da browser ti consiglio redis-commander (ho provato solo quello, probabilmente c'e' di meglio, ma per un uso minimale mi sembra accettabile).&lt;br /&gt;
&lt;br /&gt;
A guardare gli script (/root/termostato/06_display_letture.sh, non so perche' gli avessi dato questo nome...) sembra che la temperatura esterna venga salvata nella variabile temp_esterna. Pero' lo script non viene lanciato da altri script (io alla fine l'ho disabilitato), l'ho aggiunto nella schedulazione delle letture in crontab.&lt;br /&gt;
&lt;br /&gt;
Ho disabilitato la lettura della temperatura esterna perche' non ne ho ricavato un beneficio, se le temp sono molto basse e vuoi disegnare tutte le temp, quelle di casa risultano molto appiattite.&lt;br /&gt;
&lt;br /&gt;
Se forzi la scala del grafico come e' ora in un range di temperature poi la curva della temp esterna non la vedi quasi mai.&lt;br /&gt;
&lt;br /&gt;
Comunque se vuoi cercare la stazione piu' vicina a casa tua http://www.wunderground.com/cgi-bin/findweather/getForecast?query=bologna&amp;amp;MR=1 in fondo alla pagina e prendi l'id dal link.&lt;br /&gt;
&lt;br /&gt;
Daniele&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao,&lt;br /&gt;
bè, a modificare il wiki ci avevo pensato, però senza il tuo consenso non mi sarei mai permesso ;)&lt;br /&gt;
Riguardo il grafico con le temperature esterne, hai ragione..il grafico diventa illeggibile: ho collegato un sensore esterno e la temperatura esterna la leggo da quello.&lt;br /&gt;
Una domanda, ma redis memorizza solo gli ultimi dati oppure ha uno storico?&lt;br /&gt;
Perchè sarebbe interessante implementare le analisi dei grafici sui dai storici.&lt;br /&gt;
----&lt;br /&gt;
Ciao, &lt;br /&gt;
redis memorizza tutto, anzi in realtà, manca la parte di svecchiamento dei dati é una di quelle cose che non ho mai sviluppato in attesa di capire se i dati mi servissero.&lt;br /&gt;
Se vuoi li puoi leggere direttamemte da lí oppure esportarli verso un db. Comunque la pagina php con il grafico accetta in ingresso anche i parametri di start e stop, da un'occhiata al codice, magari per un'analisi iniziale pó andare bene.&lt;br /&gt;
&lt;br /&gt;
== Immagine raspberry termostato web==&lt;br /&gt;
&lt;br /&gt;
Salve,  per iniziare volevo dirti che il progetto è fantastico ed è quello che serviva proprio a me per il mio impianto domotico...  Ma ho dei problemi con le varie configurazioni essendo un neofita...  &lt;br /&gt;
&lt;br /&gt;
Se qualcuno che ha seguito la guida e sia riuscito a farlo funzionare perfettamente potrebbe creare una immagine della sua micro sd,  per esempio con Win32 Disk Imager,  ed aiutare cosi i caproni come me facendo un upload dell'immagine su un cloud come google drive...  Io con tutta la buona volontà non riesco a cavarne un ragno dal buco... O riinstallato il tutto più di 5 volte ma non c'è verso. &lt;br /&gt;
&lt;br /&gt;
Grazie mille per la collaborazione.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Info termostato web ====&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele&lt;br /&gt;
&lt;br /&gt;
Mi sto applicando a realizzare un termostato. Mi sono letto velocemente il tuo progetto tutto perfetto.&lt;br /&gt;
Con la fretta una cosa mi sfugge, guardando gli screenshot non capisco se visualizzi solo o se puoi intervenire da remoto per modificare i limiti di temperatura min e max interattivamente.&lt;br /&gt;
La tua risposta mi sarebbe utile per capire se è utile che realizzi il mio termostato o no. &lt;br /&gt;
Grazie&lt;br /&gt;
Giovanni&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Discussione:Termostato&amp;diff=6156</id>
		<title>Discussione:Termostato</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Discussione:Termostato&amp;diff=6156"/>
		<updated>2017-05-23T13:10:48Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando provo ad installare phpredis e lancio phpize mi viene restituito l'errore &lt;br /&gt;
Cannot find config.m4.&lt;br /&gt;
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module&lt;br /&gt;
&lt;br /&gt;
ho provato a rimuovere e reinstallare php5-dev, ma il problema permane.&lt;br /&gt;
qualche suggerimento?&lt;br /&gt;
grazie&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Devi lanciare phpize nella cartella in cui hai scaricato gli script da github (se guardi nell'archivio https://github.com/phpredis/phpredis si trova nella cartella principale).&lt;br /&gt;
Per trovarla puoi lanciare il comando find e vedere dove hai scaricato gli script&lt;br /&gt;
&lt;br /&gt;
 find / -name config.m4&lt;br /&gt;
&lt;br /&gt;
vai nella cartella e lancia phpize da lì.&lt;br /&gt;
&lt;br /&gt;
Daniele&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele e grazie per la risposta.&lt;br /&gt;
&lt;br /&gt;
Ho seguito il tuo suggerimento e ho risolto il problema di installazione di phpredis.&lt;br /&gt;
&lt;br /&gt;
Solo che ora, qualsiasi file php apro, ho una blank page. Ho alzato i livelli di log dal php.ini ma a quanto pare non c'è alcun errore e anche il classico file di test con il phoinfo() restituisce errore, ma solo una bella pagina bianca.&lt;br /&gt;
&lt;br /&gt;
Se apro la pagina di default di ngix invece appare, ma quella è in html. Ho verificato se ci fosse qualche errore in php.ini, ma niente...&lt;br /&gt;
non ci capisco più nulla.&lt;br /&gt;
&lt;br /&gt;
Smadonnandoci ulteriormente sono arrivato alla situazione in cui tutti i file php non vengono eseguiti ma vengono 'scaricati'. &lt;br /&gt;
&lt;br /&gt;
Quindi è un problema di configurazione di ngix col php. Ma ancora non ho risolto...&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ho aggiornato un pò la pagina che ho scritto ormai qualche anno fa. L'avevo riaggiornata ma qualcosa è di nuovo cambiato. &lt;br /&gt;
&lt;br /&gt;
Sto reinstallando anche io un Raspberry ex novo dato che avevo in mente di aggiornare il progetto. &lt;br /&gt;
&lt;br /&gt;
Ricontrolla, un attimo anche i passaggi iniziali, ho lasciato la cartella del server web predefinita, dato che ora nginx prevede /var/www/html.&lt;br /&gt;
&lt;br /&gt;
Mi sono trovato nella tua stessa situazione ed ho sistemato con una modifica al file /etc/nginx/sites-enabled/default, la direttiva cha causava probemi era &amp;quot;include fastcgi.conf;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
                try_files $uri =404;&lt;br /&gt;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
                # NOTE: You should have &amp;quot;cgi.fix_pathinfo = 0;&amp;quot; in php.ini&lt;br /&gt;
                # With php5-cgi alone:&lt;br /&gt;
                # With php5-fpm:&lt;br /&gt;
                fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
                fastcgi_index index.php;&lt;br /&gt;
                include fastcgi.conf;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Ora la parte web funziona anche se non completamente perchè durante l'installazione di redis restituisce un errore:&lt;br /&gt;
Una volta lanciato il &amp;quot;./configure [--enable-redis-igbinary]&amp;quot; restituisce queste errore:&lt;br /&gt;
&lt;br /&gt;
checking if compiler supports -R... yes&lt;br /&gt;
checking build system type... Invalid configuration `[--enable-redis-igbinary]': machine `[--enable-redis' not recognized&lt;br /&gt;
configure: error: /bin/bash ./config.sub [--enable-redis-igbinary] failed&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ciao,&lt;br /&gt;
il comando che hai dato &amp;quot;./configure [--enable-redis-igbinary]&amp;quot; non esiste. &lt;br /&gt;
&lt;br /&gt;
Nel senso che le parentesi quadre si usano per indicare un parametro opzionale(in questo caso --enable-redis-igbinary). Significa che puoi dare il comando:&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
oppure &lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-redis-igbinary&lt;br /&gt;
&lt;br /&gt;
Lancia semplicemente il primo comando.&lt;br /&gt;
----&lt;br /&gt;
ciao&lt;br /&gt;
Ok ok ...faccio la mia mezzora di vergnogna! :D&lt;br /&gt;
Però ancora non ci riesco, se apro le pagina http://raspberrypi2/html/termo/temperature.php&lt;br /&gt;
appaiono le righe in testata...&lt;br /&gt;
connect('127.0.0.1', 6379); $redis-&amp;gt;setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE); $t_min_notte=$redis-&amp;gt;get('t_min_notte'); $t_max_notte=$redis-&amp;gt;get('t_max_notte'); $t_min_giorno=$redis-&amp;gt;get('t_min_giorno'); $t_max_giorno=$redis-&amp;gt;get('t_max_giorno'); ?&amp;gt;&lt;br /&gt;
&amp;quot;Regolazione temperature termostato&amp;quot; (questo è il titolo della pagina).&lt;br /&gt;
Quindi ancora qualcosa non va...&lt;br /&gt;
----&lt;br /&gt;
Potrebbe essere una configurazione di php se fai girare la paginetta con phpinfo, il parametro short_open_tag è settato a on?&lt;br /&gt;
&lt;br /&gt;
Per intenderci nelle pagine si può iniziare a scrivere codice con '''&amp;lt;?php''' (short_open_tag indifferentemente on oppure off) oppure '''&amp;lt;?''' (short_open_tag deve essere settato ad on), io il codice lo scrivo con la forma abbreviata quindi solo con il minore e il punto interrogativo.&lt;br /&gt;
&lt;br /&gt;
Vedi se il parametro è settato off dovresti provare a settarlo ad on agendo sui files php.ini.&lt;br /&gt;
&lt;br /&gt;
Per controprova puoi modificare il tag di apertura di una pagina e vedere se così funziona.&lt;br /&gt;
&lt;br /&gt;
Come ti avevo già scritto ricontrolla anche i primi passi, ho dovuto fare anche una modifica al file /boot/config.txt perchè a me non funzionava 1wire e non vedevo i sensori.&lt;br /&gt;
&lt;br /&gt;
PS: nella mia installazione ex novo non ho modificato nulla e mi trovo short_open_tag settato on.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele&lt;br /&gt;
era proprio quel parametro! Modificato dal php.ini (e riavviato il tutto) ha funzionato. Grazie Mille!&lt;br /&gt;
&lt;br /&gt;
Considera che ho installato tutto su un RSB 2 e che sono ripartito 3 volte da sistema operativo pulito (a forza di fare prove e modificare file di configurazione arrivavo al punto che non funzionava più nulla) eppure quel parametro era su Off.&lt;br /&gt;
&lt;br /&gt;
Ancora non sono riuscito a far funzionare tutto (non leggo la temperatura) ma probabilmente è qualcosa sul path, non c'è stato verso di installare gli script sulla root) mentre quella modifica sul config.txt è stata una delle prime cose che ho fatto perchè in effetti non mi rilevava i sensori ed avevo trovato documentazione a riguardo.&lt;br /&gt;
&lt;br /&gt;
Ti ringrazio ancora...e ti aggiorno sugli sviluppi! E complimenti per il lavoro.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Non se ne esce ..:)&lt;br /&gt;
&lt;br /&gt;
Non mi appare nulla di grafico sulle pagine (intendo grafici o temperature) e sul log di ngix è un continuo avere righe con questi errori:&lt;br /&gt;
&lt;br /&gt;
 2015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;&lt;br /&gt;
 PHP message: PHP Notice:  Undefined index: start in /var/www/html/termo/termo.php on line 21&lt;br /&gt;
 PHP message: PHP Notice:  Undefined index: end in /var/www/html/termo/termo.php on line 21&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 2015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;hp on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 46&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 46&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encounter&lt;br /&gt;
 12015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;et: 13 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''PHP Notice: ''' non è un errore è solo una informazione quindi niente di preoccupante, per gli altri errori, penso possano dipendere dalla mancata lettura dei sensori di temperatura(se ancora non riesci a leggerli).&lt;br /&gt;
&lt;br /&gt;
Hai modificato gli script 04_leggi_temperatura.sh e 05_memorizza_temp.sh per metterci gli indirizzi dei tuoi sensori?&lt;br /&gt;
&lt;br /&gt;
Su redis vedi che i dati vendono correttamente pubblicati? Prova il comando&lt;br /&gt;
&lt;br /&gt;
 redis monitor&lt;br /&gt;
&lt;br /&gt;
Io sto procedendo con la nuova versione, ma sono ancora un pò indietro con i test e con l'interfaccia. Ho anche riscritto il codice in python, dato che il tutto diventa più complesso puoò anche darsi che crei una immagine pronta per Raspberry Pi modello B, vediamo se riesco ad arrivare ad un punto soddisfacente.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao Daniele e buon anno!&lt;br /&gt;
&lt;br /&gt;
la temperatura dei sensori è stata l'unica cosa che ha funzionato sempre :), gli script restituiscono correttamente la temperatura.&lt;br /&gt;
&lt;br /&gt;
Il mio dubbio infatti è proprio redis, per me non è correttamente funzionante e redis monitor mi restituisce 'comanda non trovato'. Ho provato a cercare anche tutti i file redis ma escono solo file di configurazione o cartelle.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Buon anno!&lt;br /&gt;
&lt;br /&gt;
..ho sbagliato a scrivere....&lt;br /&gt;
&lt;br /&gt;
 redis-cli monitor&lt;br /&gt;
&lt;br /&gt;
guarda che ho anche corretto la pagina, probabilmente mancava la schedulazione della memorizzazione temperature, se lanci il monitor e lo lasci aperto in un'altra finestra  lanciando lo script 05_memorizza_temp.sh dovresti vedere passare un pò di inserimenti di valori.&lt;br /&gt;
&lt;br /&gt;
Dopo lancia anche termostato.sh e dovresti completare il giro.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao...&lt;br /&gt;
dunque, i dati passano...passa qualcosa anche mentre accedo alle pagine web, ma i vari grafici non appaiono, questo è uno screen-shot di cosa appare:&lt;br /&gt;
[[Media:http://imageshack.com/a/img633/3715/nks2zn.jpg]]&lt;br /&gt;
&lt;br /&gt;
Altra cosa, una delle ultime righe di termo.php contiene questo codice che però fa riferimento ad uno script inesistente:&lt;br /&gt;
$comando=&amp;quot;/root/redis_2_csv.sh &amp;quot; . $start . &amp;quot; &amp;quot; . $end;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ok, ho capito, che non sembra essere un problema di redis. &lt;br /&gt;
&lt;br /&gt;
Proviamo a vedere se è un problema di Flotr2 la libreria grafica, dell'archivio che hai scaricato da github puoi provare a vedere se funzionano gli esempi che dovrebbero essere pià o meno a questo indirizzo.... http://raspberrypi2/html/Flotr2/examples/index.html &lt;br /&gt;
&lt;br /&gt;
A questo punto se non vanno gli esempi bisogna vedere se c'è qualche altro problema con php, se gli esempi vanno allora potrebbe esserci qualcosa che non va sull'interrogazione di redis dalle pagine web.&lt;br /&gt;
&lt;br /&gt;
Hai provato se variando la programmazione settimanale http://raspberrypi2/html/termo/prog_settimana.php le modiche vengono salvate?&lt;br /&gt;
&lt;br /&gt;
Ho aggiornato la pagina del wiki aggiungendo anche redis_2_csv.sh è uno script che ho creato per il debug e che ho utilizzato nei primi tempi per vedere se l'algoritmo funzionava correttamente. Gli id dei sensori sono scritti a mano nel codice, correggili mettendoci i tuoi magari ti serve più avanti per fare un debug.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Dunque...&lt;br /&gt;
Ho resettato il RP2 e l'ho riportato al jessie.&lt;br /&gt;
&lt;br /&gt;
Ho ricominciato tutto dall'inizio, reinstallando tutto. Una cosa che ho fatto è installare gli script sh sotto /root/ e non sotto altro utente come avevo fatto precedentemente (cambiando comunque path sul codice).&lt;br /&gt;
&lt;br /&gt;
Una cosa che manca alla documentazione ora e che prima c'era è quella della modifica del php.ini inserendo  extension=redis.so.&lt;br /&gt;
&lt;br /&gt;
altra cosa: per far funzionare redis è necessario eseguire anche l'installazione con questo comando:  sudo pecl install redis&lt;br /&gt;
&lt;br /&gt;
Per finire bisogna cambiare il codice su termo.php alla riga 39, infatti riporta questa linea :&lt;br /&gt;
&lt;br /&gt;
$temp_1       = $redis-&amp;gt;lRange('Temp_1', $start, $end); &lt;br /&gt;
$temp_2       = $redis-&amp;gt;lRange('Temp_2', $start, $end); &lt;br /&gt;
&lt;br /&gt;
ma per farla funzionare ho dovuto mettere&lt;br /&gt;
&lt;br /&gt;
$temp_1       = $redis-&amp;gt;lRange('camera', $start, $end);&lt;br /&gt;
$temp_2       = $redis-&amp;gt;lRange('cucina', $start, $end);&lt;br /&gt;
&lt;br /&gt;
Ora vedo tutto, anzi, in realtà mi manca il dato della temperatura esterna...probabilmente è sempre il nome del campo errato, ma non so qual è quello corretto.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Direi che hai fatto grossi passi avanti!&lt;br /&gt;
&lt;br /&gt;
Per le modifiche al wiki al momento le ho riportate io, ma puoi controllare e correggere direttamente anche tu e' il bello del wiki!, fai solo attenzione all'impaginazione, non e' difficile guarda come e' fatta la pagina e usa il bottone &amp;quot;visualizza anteprima&amp;quot;. Ho anche riportato le modifiche sull'archivio github per la parte web.&lt;br /&gt;
&lt;br /&gt;
La libreria redis l'ho tolta io perche' me la sono trovata gia' installata sulla nuova versione del termostato, ma penso sia dovuto alla versione di Raspbian, ho messo una nota.&lt;br /&gt;
&lt;br /&gt;
Se vuoi navigare su redis da browser ti consiglio redis-commander (ho provato solo quello, probabilmente c'e' di meglio, ma per un uso minimale mi sembra accettabile).&lt;br /&gt;
&lt;br /&gt;
A guardare gli script (/root/termostato/06_display_letture.sh, non so perche' gli avessi dato questo nome...) sembra che la temperatura esterna venga salvata nella variabile temp_esterna. Pero' lo script non viene lanciato da altri script (io alla fine l'ho disabilitato), l'ho aggiunto nella schedulazione delle letture in crontab.&lt;br /&gt;
&lt;br /&gt;
Ho disabilitato la lettura della temperatura esterna perche' non ne ho ricavato un beneficio, se le temp sono molto basse e vuoi disegnare tutte le temp, quelle di casa risultano molto appiattite.&lt;br /&gt;
&lt;br /&gt;
Se forzi la scala del grafico come e' ora in un range di temperature poi la curva della temp esterna non la vedi quasi mai.&lt;br /&gt;
&lt;br /&gt;
Comunque se vuoi cercare la stazione piu' vicina a casa tua http://www.wunderground.com/cgi-bin/findweather/getForecast?query=bologna&amp;amp;MR=1 in fondo alla pagina e prendi l'id dal link.&lt;br /&gt;
&lt;br /&gt;
Daniele&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao,&lt;br /&gt;
bè, a modificare il wiki ci avevo pensato, però senza il tuo consenso non mi sarei mai permesso ;)&lt;br /&gt;
Riguardo il grafico con le temperature esterne, hai ragione..il grafico diventa illeggibile: ho collegato un sensore esterno e la temperatura esterna la leggo da quello.&lt;br /&gt;
Una domanda, ma redis memorizza solo gli ultimi dati oppure ha uno storico?&lt;br /&gt;
Perchè sarebbe interessante implementare le analisi dei grafici sui dai storici.&lt;br /&gt;
----&lt;br /&gt;
Ciao, &lt;br /&gt;
redis memorizza tutto, anzi in realtà, manca la parte di svecchiamento dei dati é una di quelle cose che non ho mai sviluppato in attesa di capire se i dati mi servissero.&lt;br /&gt;
Se vuoi li puoi leggere direttamemte da lí oppure esportarli verso un db. Comunque la pagina php con il grafico accetta in ingresso anche i parametri di start e stop, da un'occhiata al codice, magari per un'analisi iniziale pó andare bene.&lt;br /&gt;
&lt;br /&gt;
== Immagine raspberry termostato web==&lt;br /&gt;
&lt;br /&gt;
Salve,  per iniziare volevo dirti che il progetto è fantastico ed è quello che serviva proprio a me per il mio impianto domotico...  Ma ho dei problemi con le varie configurazioni essendo un neofita...  &lt;br /&gt;
&lt;br /&gt;
Se qualcuno che ha seguito la guida e sia riuscito a farlo funzionare perfettamente potrebbe creare una immagine della sua micro sd,  per esempio con Win32 Disk Imager,  ed aiutare cosi i caproni come me facendo un upload dell'immagine su un cloud come google drive...  Io con tutta la buona volontà non riesco a cavarne un ragno dal buco... O riinstallato il tutto più di 5 volte ma non c'è verso. &lt;br /&gt;
&lt;br /&gt;
Grazie mille per la collaborazione.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele&lt;br /&gt;
Mi sto applicando a realizzare un termostato. Mi sono letto velocemente il tuo progetto tutto perfetto.&lt;br /&gt;
Con la fretta una cosa mi sfugge, guardando gli screenshot non capisco se visualizzi solo o se puoi intervenire da remoto per modificare i limiti di temperatura min e max interattivamente.&lt;br /&gt;
La tua risposta mi sarebbe utile per capire se è utile che realizzi il mio termostato o no. &lt;br /&gt;
Grazie&lt;br /&gt;
Giovanni&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Discussione:Termostato&amp;diff=6155</id>
		<title>Discussione:Termostato</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Discussione:Termostato&amp;diff=6155"/>
		<updated>2017-05-23T13:08:02Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quando provo ad installare phpredis e lancio phpize mi viene restituito l'errore &lt;br /&gt;
Cannot find config.m4.&lt;br /&gt;
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module&lt;br /&gt;
&lt;br /&gt;
ho provato a rimuovere e reinstallare php5-dev, ma il problema permane.&lt;br /&gt;
qualche suggerimento?&lt;br /&gt;
grazie&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Devi lanciare phpize nella cartella in cui hai scaricato gli script da github (se guardi nell'archivio https://github.com/phpredis/phpredis si trova nella cartella principale).&lt;br /&gt;
Per trovarla puoi lanciare il comando find e vedere dove hai scaricato gli script&lt;br /&gt;
&lt;br /&gt;
 find / -name config.m4&lt;br /&gt;
&lt;br /&gt;
vai nella cartella e lancia phpize da lì.&lt;br /&gt;
&lt;br /&gt;
Daniele&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele e grazie per la risposta.&lt;br /&gt;
&lt;br /&gt;
Ho seguito il tuo suggerimento e ho risolto il problema di installazione di phpredis.&lt;br /&gt;
&lt;br /&gt;
Solo che ora, qualsiasi file php apro, ho una blank page. Ho alzato i livelli di log dal php.ini ma a quanto pare non c'è alcun errore e anche il classico file di test con il phoinfo() restituisce errore, ma solo una bella pagina bianca.&lt;br /&gt;
&lt;br /&gt;
Se apro la pagina di default di ngix invece appare, ma quella è in html. Ho verificato se ci fosse qualche errore in php.ini, ma niente...&lt;br /&gt;
non ci capisco più nulla.&lt;br /&gt;
&lt;br /&gt;
Smadonnandoci ulteriormente sono arrivato alla situazione in cui tutti i file php non vengono eseguiti ma vengono 'scaricati'. &lt;br /&gt;
&lt;br /&gt;
Quindi è un problema di configurazione di ngix col php. Ma ancora non ho risolto...&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ho aggiornato un pò la pagina che ho scritto ormai qualche anno fa. L'avevo riaggiornata ma qualcosa è di nuovo cambiato. &lt;br /&gt;
&lt;br /&gt;
Sto reinstallando anche io un Raspberry ex novo dato che avevo in mente di aggiornare il progetto. &lt;br /&gt;
&lt;br /&gt;
Ricontrolla, un attimo anche i passaggi iniziali, ho lasciato la cartella del server web predefinita, dato che ora nginx prevede /var/www/html.&lt;br /&gt;
&lt;br /&gt;
Mi sono trovato nella tua stessa situazione ed ho sistemato con una modifica al file /etc/nginx/sites-enabled/default, la direttiva cha causava probemi era &amp;quot;include fastcgi.conf;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        location ~ \.php$ {&lt;br /&gt;
                try_files $uri =404;&lt;br /&gt;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;br /&gt;
                # NOTE: You should have &amp;quot;cgi.fix_pathinfo = 0;&amp;quot; in php.ini&lt;br /&gt;
                # With php5-cgi alone:&lt;br /&gt;
                # With php5-fpm:&lt;br /&gt;
                fastcgi_pass unix:/var/run/php5-fpm.sock;&lt;br /&gt;
                fastcgi_index index.php;&lt;br /&gt;
                include fastcgi.conf;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Ora la parte web funziona anche se non completamente perchè durante l'installazione di redis restituisce un errore:&lt;br /&gt;
Una volta lanciato il &amp;quot;./configure [--enable-redis-igbinary]&amp;quot; restituisce queste errore:&lt;br /&gt;
&lt;br /&gt;
checking if compiler supports -R... yes&lt;br /&gt;
checking build system type... Invalid configuration `[--enable-redis-igbinary]': machine `[--enable-redis' not recognized&lt;br /&gt;
configure: error: /bin/bash ./config.sub [--enable-redis-igbinary] failed&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Ciao,&lt;br /&gt;
il comando che hai dato &amp;quot;./configure [--enable-redis-igbinary]&amp;quot; non esiste. &lt;br /&gt;
&lt;br /&gt;
Nel senso che le parentesi quadre si usano per indicare un parametro opzionale(in questo caso --enable-redis-igbinary). Significa che puoi dare il comando:&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
oppure &lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-redis-igbinary&lt;br /&gt;
&lt;br /&gt;
Lancia semplicemente il primo comando.&lt;br /&gt;
----&lt;br /&gt;
ciao&lt;br /&gt;
Ok ok ...faccio la mia mezzora di vergnogna! :D&lt;br /&gt;
Però ancora non ci riesco, se apro le pagina http://raspberrypi2/html/termo/temperature.php&lt;br /&gt;
appaiono le righe in testata...&lt;br /&gt;
connect('127.0.0.1', 6379); $redis-&amp;gt;setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE); $t_min_notte=$redis-&amp;gt;get('t_min_notte'); $t_max_notte=$redis-&amp;gt;get('t_max_notte'); $t_min_giorno=$redis-&amp;gt;get('t_min_giorno'); $t_max_giorno=$redis-&amp;gt;get('t_max_giorno'); ?&amp;gt;&lt;br /&gt;
&amp;quot;Regolazione temperature termostato&amp;quot; (questo è il titolo della pagina).&lt;br /&gt;
Quindi ancora qualcosa non va...&lt;br /&gt;
----&lt;br /&gt;
Potrebbe essere una configurazione di php se fai girare la paginetta con phpinfo, il parametro short_open_tag è settato a on?&lt;br /&gt;
&lt;br /&gt;
Per intenderci nelle pagine si può iniziare a scrivere codice con '''&amp;lt;?php''' (short_open_tag indifferentemente on oppure off) oppure '''&amp;lt;?''' (short_open_tag deve essere settato ad on), io il codice lo scrivo con la forma abbreviata quindi solo con il minore e il punto interrogativo.&lt;br /&gt;
&lt;br /&gt;
Vedi se il parametro è settato off dovresti provare a settarlo ad on agendo sui files php.ini.&lt;br /&gt;
&lt;br /&gt;
Per controprova puoi modificare il tag di apertura di una pagina e vedere se così funziona.&lt;br /&gt;
&lt;br /&gt;
Come ti avevo già scritto ricontrolla anche i primi passi, ho dovuto fare anche una modifica al file /boot/config.txt perchè a me non funzionava 1wire e non vedevo i sensori.&lt;br /&gt;
&lt;br /&gt;
PS: nella mia installazione ex novo non ho modificato nulla e mi trovo short_open_tag settato on.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele&lt;br /&gt;
era proprio quel parametro! Modificato dal php.ini (e riavviato il tutto) ha funzionato. Grazie Mille!&lt;br /&gt;
&lt;br /&gt;
Considera che ho installato tutto su un RSB 2 e che sono ripartito 3 volte da sistema operativo pulito (a forza di fare prove e modificare file di configurazione arrivavo al punto che non funzionava più nulla) eppure quel parametro era su Off.&lt;br /&gt;
&lt;br /&gt;
Ancora non sono riuscito a far funzionare tutto (non leggo la temperatura) ma probabilmente è qualcosa sul path, non c'è stato verso di installare gli script sulla root) mentre quella modifica sul config.txt è stata una delle prime cose che ho fatto perchè in effetti non mi rilevava i sensori ed avevo trovato documentazione a riguardo.&lt;br /&gt;
&lt;br /&gt;
Ti ringrazio ancora...e ti aggiorno sugli sviluppi! E complimenti per il lavoro.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Non se ne esce ..:)&lt;br /&gt;
&lt;br /&gt;
Non mi appare nulla di grafico sulle pagine (intendo grafici o temperature) e sul log di ngix è un continuo avere righe con questi errori:&lt;br /&gt;
&lt;br /&gt;
 2015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;&lt;br /&gt;
 PHP message: PHP Notice:  Undefined index: start in /var/www/html/termo/termo.php on line 21&lt;br /&gt;
 PHP message: PHP Notice:  Undefined index: end in /var/www/html/termo/termo.php on line 21&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 0 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 1 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 2 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 3 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 4 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 2015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;hp on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 8 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 46&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 9 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encountered in /var/www/html/termo/termo.php on line 65&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 46&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 47&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 54&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 55&lt;br /&gt;
 PHP message: PHP Notice:  Undefined offset: 10 in /var/www/html/termo/termo.php on line 56&lt;br /&gt;
 PHP message: PHP Notice:  A non well formed numeric value encounter&lt;br /&gt;
 12015/12/31 15:22:30 [error] 520#0: *16 FastCGI sent in stderr: &amp;quot;et: 13 in /var/www/html/termo/termo.php on line 53&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''PHP Notice: ''' non è un errore è solo una informazione quindi niente di preoccupante, per gli altri errori, penso possano dipendere dalla mancata lettura dei sensori di temperatura(se ancora non riesci a leggerli).&lt;br /&gt;
&lt;br /&gt;
Hai modificato gli script 04_leggi_temperatura.sh e 05_memorizza_temp.sh per metterci gli indirizzi dei tuoi sensori?&lt;br /&gt;
&lt;br /&gt;
Su redis vedi che i dati vendono correttamente pubblicati? Prova il comando&lt;br /&gt;
&lt;br /&gt;
 redis monitor&lt;br /&gt;
&lt;br /&gt;
Io sto procedendo con la nuova versione, ma sono ancora un pò indietro con i test e con l'interfaccia. Ho anche riscritto il codice in python, dato che il tutto diventa più complesso puoò anche darsi che crei una immagine pronta per Raspberry Pi modello B, vediamo se riesco ad arrivare ad un punto soddisfacente.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao Daniele e buon anno!&lt;br /&gt;
&lt;br /&gt;
la temperatura dei sensori è stata l'unica cosa che ha funzionato sempre :), gli script restituiscono correttamente la temperatura.&lt;br /&gt;
&lt;br /&gt;
Il mio dubbio infatti è proprio redis, per me non è correttamente funzionante e redis monitor mi restituisce 'comanda non trovato'. Ho provato a cercare anche tutti i file redis ma escono solo file di configurazione o cartelle.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Buon anno!&lt;br /&gt;
&lt;br /&gt;
..ho sbagliato a scrivere....&lt;br /&gt;
&lt;br /&gt;
 redis-cli monitor&lt;br /&gt;
&lt;br /&gt;
guarda che ho anche corretto la pagina, probabilmente mancava la schedulazione della memorizzazione temperature, se lanci il monitor e lo lasci aperto in un'altra finestra  lanciando lo script 05_memorizza_temp.sh dovresti vedere passare un pò di inserimenti di valori.&lt;br /&gt;
&lt;br /&gt;
Dopo lancia anche termostato.sh e dovresti completare il giro.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao...&lt;br /&gt;
dunque, i dati passano...passa qualcosa anche mentre accedo alle pagine web, ma i vari grafici non appaiono, questo è uno screen-shot di cosa appare:&lt;br /&gt;
[[Media:http://imageshack.com/a/img633/3715/nks2zn.jpg]]&lt;br /&gt;
&lt;br /&gt;
Altra cosa, una delle ultime righe di termo.php contiene questo codice che però fa riferimento ad uno script inesistente:&lt;br /&gt;
$comando=&amp;quot;/root/redis_2_csv.sh &amp;quot; . $start . &amp;quot; &amp;quot; . $end;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ok, ho capito, che non sembra essere un problema di redis. &lt;br /&gt;
&lt;br /&gt;
Proviamo a vedere se è un problema di Flotr2 la libreria grafica, dell'archivio che hai scaricato da github puoi provare a vedere se funzionano gli esempi che dovrebbero essere pià o meno a questo indirizzo.... http://raspberrypi2/html/Flotr2/examples/index.html &lt;br /&gt;
&lt;br /&gt;
A questo punto se non vanno gli esempi bisogna vedere se c'è qualche altro problema con php, se gli esempi vanno allora potrebbe esserci qualcosa che non va sull'interrogazione di redis dalle pagine web.&lt;br /&gt;
&lt;br /&gt;
Hai provato se variando la programmazione settimanale http://raspberrypi2/html/termo/prog_settimana.php le modiche vengono salvate?&lt;br /&gt;
&lt;br /&gt;
Ho aggiornato la pagina del wiki aggiungendo anche redis_2_csv.sh è uno script che ho creato per il debug e che ho utilizzato nei primi tempi per vedere se l'algoritmo funzionava correttamente. Gli id dei sensori sono scritti a mano nel codice, correggili mettendoci i tuoi magari ti serve più avanti per fare un debug.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Dunque...&lt;br /&gt;
Ho resettato il RP2 e l'ho riportato al jessie.&lt;br /&gt;
&lt;br /&gt;
Ho ricominciato tutto dall'inizio, reinstallando tutto. Una cosa che ho fatto è installare gli script sh sotto /root/ e non sotto altro utente come avevo fatto precedentemente (cambiando comunque path sul codice).&lt;br /&gt;
&lt;br /&gt;
Una cosa che manca alla documentazione ora e che prima c'era è quella della modifica del php.ini inserendo  extension=redis.so.&lt;br /&gt;
&lt;br /&gt;
altra cosa: per far funzionare redis è necessario eseguire anche l'installazione con questo comando:  sudo pecl install redis&lt;br /&gt;
&lt;br /&gt;
Per finire bisogna cambiare il codice su termo.php alla riga 39, infatti riporta questa linea :&lt;br /&gt;
&lt;br /&gt;
$temp_1       = $redis-&amp;gt;lRange('Temp_1', $start, $end); &lt;br /&gt;
$temp_2       = $redis-&amp;gt;lRange('Temp_2', $start, $end); &lt;br /&gt;
&lt;br /&gt;
ma per farla funzionare ho dovuto mettere&lt;br /&gt;
&lt;br /&gt;
$temp_1       = $redis-&amp;gt;lRange('camera', $start, $end);&lt;br /&gt;
$temp_2       = $redis-&amp;gt;lRange('cucina', $start, $end);&lt;br /&gt;
&lt;br /&gt;
Ora vedo tutto, anzi, in realtà mi manca il dato della temperatura esterna...probabilmente è sempre il nome del campo errato, ma non so qual è quello corretto.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Direi che hai fatto grossi passi avanti!&lt;br /&gt;
&lt;br /&gt;
Per le modifiche al wiki al momento le ho riportate io, ma puoi controllare e correggere direttamente anche tu e' il bello del wiki!, fai solo attenzione all'impaginazione, non e' difficile guarda come e' fatta la pagina e usa il bottone &amp;quot;visualizza anteprima&amp;quot;. Ho anche riportato le modifiche sull'archivio github per la parte web.&lt;br /&gt;
&lt;br /&gt;
La libreria redis l'ho tolta io perche' me la sono trovata gia' installata sulla nuova versione del termostato, ma penso sia dovuto alla versione di Raspbian, ho messo una nota.&lt;br /&gt;
&lt;br /&gt;
Se vuoi navigare su redis da browser ti consiglio redis-commander (ho provato solo quello, probabilmente c'e' di meglio, ma per un uso minimale mi sembra accettabile).&lt;br /&gt;
&lt;br /&gt;
A guardare gli script (/root/termostato/06_display_letture.sh, non so perche' gli avessi dato questo nome...) sembra che la temperatura esterna venga salvata nella variabile temp_esterna. Pero' lo script non viene lanciato da altri script (io alla fine l'ho disabilitato), l'ho aggiunto nella schedulazione delle letture in crontab.&lt;br /&gt;
&lt;br /&gt;
Ho disabilitato la lettura della temperatura esterna perche' non ne ho ricavato un beneficio, se le temp sono molto basse e vuoi disegnare tutte le temp, quelle di casa risultano molto appiattite.&lt;br /&gt;
&lt;br /&gt;
Se forzi la scala del grafico come e' ora in un range di temperature poi la curva della temp esterna non la vedi quasi mai.&lt;br /&gt;
&lt;br /&gt;
Comunque se vuoi cercare la stazione piu' vicina a casa tua http://www.wunderground.com/cgi-bin/findweather/getForecast?query=bologna&amp;amp;MR=1 in fondo alla pagina e prendi l'id dal link.&lt;br /&gt;
&lt;br /&gt;
Daniele&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ciao,&lt;br /&gt;
bè, a modificare il wiki ci avevo pensato, però senza il tuo consenso non mi sarei mai permesso ;)&lt;br /&gt;
Riguardo il grafico con le temperature esterne, hai ragione..il grafico diventa illeggibile: ho collegato un sensore esterno e la temperatura esterna la leggo da quello.&lt;br /&gt;
Una domanda, ma redis memorizza solo gli ultimi dati oppure ha uno storico?&lt;br /&gt;
Perchè sarebbe interessante implementare le analisi dei grafici sui dai storici.&lt;br /&gt;
----&lt;br /&gt;
Ciao, &lt;br /&gt;
redis memorizza tutto, anzi in realtà, manca la parte di svecchiamento dei dati é una di quelle cose che non ho mai sviluppato in attesa di capire se i dati mi servissero.&lt;br /&gt;
Se vuoi li puoi leggere direttamemte da lí oppure esportarli verso un db. Comunque la pagina php con il grafico accetta in ingresso anche i parametri di start e stop, da un'occhiata al codice, magari per un'analisi iniziale pó andare bene.&lt;br /&gt;
&lt;br /&gt;
== Immagine raspberry termostato web==&lt;br /&gt;
&lt;br /&gt;
Salve,  per iniziare volevo dirti che il progetto è fantastico ed è quello che serviva proprio a me per il mio impianto domotico...  Ma ho dei problemi con le varie configurazioni essendo un neofita...  &lt;br /&gt;
&lt;br /&gt;
Se qualcuno che ha seguito la guida e sia riuscito a farlo funzionare perfettamente potrebbe creare una immagine della sua micro sd,  per esempio con Win32 Disk Imager,  ed aiutare cosi i caproni come me facendo un upload dell'immagine su un cloud come google drive...  Io con tutta la buona volontà non riesco a cavarne un ragno dal buco... O riinstallato il tutto più di 5 volte ma non c'è verso. &lt;br /&gt;
&lt;br /&gt;
Grazie mille per la collaborazione.&lt;br /&gt;
&lt;br /&gt;
Ciao Daniele&lt;br /&gt;
Mi sto applicando a realizzare un termostato. Mi sono letto velocemente il tuo progetto tutto perfetto.&lt;br /&gt;
Con la fretta una cosa mi sfugge, guardando gli screenshot non capisco se visualizzi solo o se puoi intervenire da remoto per modificare i limiti di temperatura min e max interattivamente.&lt;br /&gt;
La tua risposta mi sarebbe utile per capire se è utile che realizzi il mio termostato o no. &lt;br /&gt;
Grazie&lt;br /&gt;
Giovanni&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Discussione:Gruppo_Volo&amp;diff=5743</id>
		<title>Discussione:Gruppo Volo</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Discussione:Gruppo_Volo&amp;diff=5743"/>
		<updated>2016-09-30T14:35:52Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: oggetti volanti&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ciao a tutti multi-roto-volanti&lt;br /&gt;
&lt;br /&gt;
Segnalo la seguente pagina utile ad orientare neofiti come me [http://www.logicaprogrammabile.it/componeti-quadricottero-arduino/]&lt;br /&gt;
&lt;br /&gt;
bye&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Gruppo_Volo&amp;diff=5727</id>
		<title>Gruppo Volo</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Gruppo_Volo&amp;diff=5727"/>
		<updated>2016-09-28T08:02:00Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Progetti in corso */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Gruppo&lt;br /&gt;
|nome=Volo&lt;br /&gt;
|descrizione=aerei, dirigibili e quadcopter&lt;br /&gt;
|social=http://raspibo.ofpcina.net/groups/profile/2816/robottini-volanti&lt;br /&gt;
|mailinglist=http://liste.raspibo.org/wws/subscribe/robot.volanti Vuoi partecipare o solamente essere informato? Iscriviti alla mailing list&lt;br /&gt;
|iscritti=Simone, Marco, Razzo, Carmelo [http://raspibo.ofpcina.net/profile/tarmelop tarmelop], [http://raspibo.ofpcina.net/profile/oloturia1979 Oloturia] , Antonio, Marco (sono 2 &amp;quot;Marchi&amp;quot; diversi?), Luigi, Diego, Elia [http://raspibo.ofpcina.net/profile/DasNetz DasNetz], Davide, Walter [http://raspibo.ofpcina.net/profile/wave wave], Aldo [http://raspibo.ofpcina.net/profile/aldus Aldus]}}&lt;br /&gt;
&lt;br /&gt;
= Progetti in corso =&lt;br /&gt;
&lt;br /&gt;
A settembre 2016 abbiamo deciso di costituire un piccolo gruppo dedito all'assemblaggio ed uso di multirotor (tri/quadri/esa/otco-copter e/o droni).&lt;br /&gt;
&lt;br /&gt;
I partecipanti (aggiungetevi):&lt;br /&gt;
* '''chi vuole imparare:''' Diego, Davide, Marco, Angelo, Paolo, Ugo, Mario,Giovanni&lt;br /&gt;
&lt;br /&gt;
* '''chi vuole approfondire ed è disposto ad insegnare:''' Luigi, Guido, Stefano&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Appuntamenti ==&lt;br /&gt;
&lt;br /&gt;
Il prossimo appuntamento è '''martedì 11 ottobre 2016''' al [[Makerspace]]; scrivete [http://liste.raspibo.org/wws/info/agora in lista agora] quel che vorreste trovarci.&lt;br /&gt;
&lt;br /&gt;
Appuntamenti precedenti:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! incontro&lt;br /&gt;
! cosa abbiamo fatto / cosa faremo&lt;br /&gt;
|-&lt;br /&gt;
| '''27 settembre 2016'''&lt;br /&gt;
| descrizione di tutti i pezzi necessari e dei possibili approcci alla costruzione di un multirotor. Cenni di regolamenti ENAC.&lt;br /&gt;
|-&lt;br /&gt;
| '''11 ottobre 2016'''&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Le basi ==&lt;br /&gt;
&lt;br /&gt;
=== Approcci alla scelta del multirotor ===&lt;br /&gt;
&lt;br /&gt;
Dipende da cosa volete farci. Per iniziare, si suggerisce di partire con qualcosa mirato all'apprendimento del volo: economico e con pezzi facilmente sostituibili.&lt;br /&gt;
&lt;br /&gt;
Un possibile approccio è partire avendo una vaga idea delle dimensioni dell'oggetto che si vuole ottenere.  In base a queste (ed alla destinazione d'uso), si scelgono le eliche e di conseguenza motori, ESC e batterie.&lt;br /&gt;
&lt;br /&gt;
=== il telaio (le dimensioni) ===&lt;br /&gt;
&lt;br /&gt;
=== le eliche ===&lt;br /&gt;
&lt;br /&gt;
=== i motori ===&lt;br /&gt;
&lt;br /&gt;
=== gli ESC (Electronic Speed Controller) ===&lt;br /&gt;
&lt;br /&gt;
=== la power distribution board ===&lt;br /&gt;
&lt;br /&gt;
=== le batterie ===&lt;br /&gt;
&lt;br /&gt;
=== la flight control board ===&lt;br /&gt;
&lt;br /&gt;
=== la trasmittente / ricevente ===&lt;br /&gt;
&lt;br /&gt;
=== telemetria ===&lt;br /&gt;
&lt;br /&gt;
=== normative ENAC ===&lt;br /&gt;
&lt;br /&gt;
== Temi da approfondire ==&lt;br /&gt;
&lt;br /&gt;
Man mano che il non-corso prosegue, ci piacerebbe discutere anche di:&lt;br /&gt;
* tipi di multirotor e loro diversi utilizzi&lt;br /&gt;
* approntare una lista della spesa&lt;br /&gt;
* come assemblarli&lt;br /&gt;
* come gestire l'energia&lt;br /&gt;
* controllo di volo: quale centralina usare? Come e perché programmarle?&lt;br /&gt;
* radiocontrollo: come funziona?&lt;br /&gt;
* volo autonomo: come e cosa è possibile fare?&lt;br /&gt;
* telemetria&lt;br /&gt;
* trasporto di sensori&lt;br /&gt;
* fotografia aerea&lt;br /&gt;
* come rispettare le leggi in materia&lt;br /&gt;
&lt;br /&gt;
= Progetti completati =&lt;br /&gt;
&lt;br /&gt;
[[Pagina precedente del gruppo volo]] (include vecchia lista della spesa)&lt;br /&gt;
&lt;br /&gt;
= Idee folli =&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5254</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5254"/>
		<updated>2016-02-18T15:38:06Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Conclusioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:TEL_02.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia WiFi Finale&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Come nella prima versione Ruschino WIFI, dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dal display touch si possono modificare (ma anche leggere) le velocità del 'robottino' o le due variabili telemetriche gestite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5253</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5253"/>
		<updated>2016-02-18T15:31:26Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Conclusioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:TEL_02.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia WiFi Finale&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Come nella prima versione [[Ruschino WIFI]], dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dal display touch si possono modificare (ma anche leggere) le velocità del 'robottino' o le due variabili telemetriche gestite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5252</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5252"/>
		<updated>2016-02-18T15:28:30Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Conclusioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:TEL_02.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia WiFi Finale&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Come nella prima versione [[Ruschino_WIFI]], dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dal display touch si possono modificare (ma anche leggere) le velocità del 'robottino' o le due variabili telemetriche gestite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=File:NANO_ESP8266.png&amp;diff=5251</id>
		<title>File:NANO ESP8266.png</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=File:NANO_ESP8266.png&amp;diff=5251"/>
		<updated>2016-02-18T15:19:41Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: GioCupo ha caricato una nuova versione di &amp;amp;quot;File:NANO ESP8266.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5250</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5250"/>
		<updated>2016-02-18T15:12:13Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Conclusioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:TEL_02.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia WiFi Finale&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Come nella prima versione &amp;quot;Ruschino&amp;quot;, dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dal display touch si possono modificare (ma anche leggere) le velocità del 'robottino' o le due variabili telemetriche gestite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5249</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5249"/>
		<updated>2016-02-18T15:11:33Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Conclusioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:TEL_02.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia WiFi Finale&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Come nella prima versione &amp;quot;Ruschino&amp;quot;, dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1. &lt;br /&gt;
&lt;br /&gt;
Dal display touch si possono modificare (ma anche leggere) le velocità del 'robottino' o le due variabili telemetriche gestite. &lt;br /&gt;
&lt;br /&gt;
I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=File:TEL_02.png&amp;diff=5248</id>
		<title>File:TEL 02.png</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=File:TEL_02.png&amp;diff=5248"/>
		<updated>2016-02-18T15:10:19Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5247</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5247"/>
		<updated>2016-02-18T14:53:51Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_02.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Come nella prima versione &amp;quot;Ruschino&amp;quot;, dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1. &lt;br /&gt;
&lt;br /&gt;
Dal display touch si possono modificare (ma anche leggere) le velocità del 'robottino' o le due variabili telemetriche gestite. &lt;br /&gt;
&lt;br /&gt;
I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5246</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5246"/>
		<updated>2016-02-18T14:52:45Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Conclusioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
Come nella prima versione &amp;quot;Ruschino&amp;quot;, dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1. &lt;br /&gt;
&lt;br /&gt;
Dal display touch si possono modificare (ma anche leggere) le velocità del 'robottino' o le due variabili telemetriche gestite. &lt;br /&gt;
&lt;br /&gt;
I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5245</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5245"/>
		<updated>2016-02-18T14:50:57Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
= Conclusioni =&lt;br /&gt;
Come nella prima versione &amp;quot;Ruschino&amp;quot;, dopo il caricamento del Software e l'accensione, l'utilizzo è estremamente semplice: Si apre lo Smartphone o il Tablet scrivendo nel Browser l'indirizzo del Server di ESP8266 -&amp;gt; 192.168.4.1, dal display si possono modificare le velocità del 'robottino' o leggere le due variabili telemetriche gestite. I valori visualizzati nell'immagine a fianco mostrano la tensione della batteria LiIon (due pacchi) e il valore di K attuale. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5244</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5244"/>
		<updated>2016-02-18T14:37:56Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice del loop() dovrebbe essere sufficientemente commentato per una prima comprensione. &lt;br /&gt;
In particolare si invoca, alla linea 37, la funzione stacca(), che realizza la funzione Serial.readBytes() di Arduino che legge tutta la stringa del comando ricevuto. Tale funzione è non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non mostrato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Di seguito il codice di stacca():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale byte per byte&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone il Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5243</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5243"/>
		<updated>2016-02-18T14:27:44Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(), alle linee 49 e 50, invoca le funzioni sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato). Queste due funzioni si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   /* rapporto del partitore: Tensione massima misurabile 13.7Volt &lt;br /&gt;
    * che corrisponde a (5Volt o 1023 digit) ai capi della resistenza da 4.7k */&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiente ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe fa corrispondere &lt;br /&gt;
13.7volt di input a 1023 ADC (5v sul partitore da 4.7k). &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5242</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5242"/>
		<updated>2016-02-18T14:18:56Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una stringa &lt;br /&gt;
 * di comando tipo 'move delle maniglie del display' 600us senza stampe.&lt;br /&gt;
 * Tempo totale di riconoscimento di comando tipo 'get' &lt;br /&gt;
 * sulla telemetria impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisisce la stringa dalla seriale&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5241</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5241"/>
		<updated>2016-02-18T14:11:28Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrare le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5240</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5240"/>
		<updated>2016-02-18T14:06:27Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Le connessioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 8.2k-4.7k è calcolato per ridurre la tensione massima di circa 14v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5239</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5239"/>
		<updated>2016-02-18T14:03:58Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il circuito usato per lo scambio dati */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di ESP o per il caricamento del firmware NodeMCU.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5237</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5237"/>
		<updated>2016-02-16T15:38:48Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5236</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5236"/>
		<updated>2016-02-16T15:27:30Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   time1=micros();&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang &amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5235</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5235"/>
		<updated>2016-02-16T15:25:24Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   time1=micros();&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5234</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5234"/>
		<updated>2016-02-16T15:24:04Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   time1=micros();&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 49 e 50, invoca sca_get() e scan_put() contenute nel blocco SCAN (qui non commentato) che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
Del blocco MISURE si mostrano solo la funzioni Mis_1() e Volt() che si ripetono in modo simile in Mis_2() e Kappa() che potrete analizzare nel codice completo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* =============================================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria.&lt;br /&gt;
   * ===========================================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore totale &lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice di Mis_1() fa uso di una stringa e un buffer e due trasformazioni dtostrf() ed sprintf(). La prima trasforma un numero decimale in una stringa la seconda compone in Buffer per la spedizione seriale. Forse si può rendere più efficiunte ma sprintf() da sola funziona con interi ma non con float non ne conosco la ragione.&lt;br /&gt;
&lt;br /&gt;
Volt() è una semplice lettura ADC dal partitore che ho costruito che dovrebbe far corrispondere 12volt a 1023 ADC. &lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5233</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5233"/>
		<updated>2016-02-16T14:57:37Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   time1=micros();&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 37, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 55 e 56, invoca sca_get() e scan_put() contenute nel blocco SCAN che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* ===============================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria. Vedi ADC&lt;br /&gt;
   * =============================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
void Mis_2(){&lt;br /&gt;
  /* =============================&lt;br /&gt;
   * in c2 devi inserire la lettura, in questo caso &lt;br /&gt;
   * mappa un trimmer da 1 a 50. Vedi ADC&lt;br /&gt;
   * ===========================*/&lt;br /&gt;
  float c2 =Kappa();&lt;br /&gt;
  char _buffer2[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c2, 4, 1, S);&lt;br /&gt;
  // se int non è necessario trasformare in stringa&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float Kappa(){&lt;br /&gt;
  // preleva la conversione da un trimmer e lo mappa&lt;br /&gt;
  return (float)map(analogRead(pot),1,1023,1,50);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5232</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5232"/>
		<updated>2016-02-16T14:56:47Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Il main loop() seguente:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   time1=micros();&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dovrebbe essere sufficientemente commentato per una prima comprensione. In particolare si&lt;br /&gt;
invoca, alla linea 43, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 55 e 56, invoca sca_get() e scan_put() contenute nel blocco SCAN che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* ===============================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria. Vedi ADC&lt;br /&gt;
   * =============================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
void Mis_2(){&lt;br /&gt;
  /* =============================&lt;br /&gt;
   * in c2 devi inserire la lettura, in questo caso &lt;br /&gt;
   * mappa un trimmer da 1 a 50. Vedi ADC&lt;br /&gt;
   * ===========================*/&lt;br /&gt;
  float c2 =Kappa();&lt;br /&gt;
  char _buffer2[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c2, 4, 1, S);&lt;br /&gt;
  // se int non è necessario trasformare in stringa&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float Kappa(){&lt;br /&gt;
  // preleva la conversione da un trimmer e lo mappa&lt;br /&gt;
  return (float)map(analogRead(pot),1,1023,1,50);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5231</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5231"/>
		<updated>2016-02-16T14:51:15Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Infatti il main loop() seguente:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#define led 3   // Led aggiunto&lt;br /&gt;
#define sw  4   // Button di utilità&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
#define ntc A2  // ADC NTC 10k&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(led,OUTPUT);&lt;br /&gt;
  pinMode(sw,INPUT);&lt;br /&gt;
  digitalWrite(sw,HIGH);&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   time1=micros();&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
//  time2=micros();&lt;br /&gt;
//  Serial.println(time2-time1);&lt;br /&gt;
//  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invoca, alla linea 43, la funzione stacca() contenuta nel blocco STACCA che realizza la readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
/*===================&lt;br /&gt;
 * acquisesce la stringa dalla seriale&lt;br /&gt;
 * impiega cica 600 us a leggere 20 char&lt;br /&gt;
 *===================*/&lt;br /&gt;
void stacca() {&lt;br /&gt;
  while (mySerial.available()) {&lt;br /&gt;
    char inChar = (char)mySerial.read();&lt;br /&gt;
    if (inChar != '\n' &amp;amp;&amp;amp; inChar != '\r')&lt;br /&gt;
    inputString += inChar;&lt;br /&gt;
    if (inChar =='\n') {&lt;br /&gt;
      stringComplete = true;&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il main loop(). alle linee 55 e 56, invoca sca_get() e scan_put() contenute nel blocco SCAN che si occupano rispettivamente, la prima, di analizzare e ricevere dal Server i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
void Mis_1(){&lt;br /&gt;
  /* ===============================&lt;br /&gt;
   * in c1 devi inserire la lettura, in questo caso&lt;br /&gt;
   * misura la tensione Batteria. Vedi ADC&lt;br /&gt;
   * =============================*/&lt;br /&gt;
  float c1 =Volt();&lt;br /&gt;
  char _buffer1[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c1, 5, 2, S);&lt;br /&gt;
  // poi invio su seriale&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
void Mis_2(){&lt;br /&gt;
  /* =============================&lt;br /&gt;
   * in c2 devi inserire la lettura, in questo caso &lt;br /&gt;
   * mappa un trimmer da 1 a 50. Vedi ADC&lt;br /&gt;
   * ===========================*/&lt;br /&gt;
  float c2 =Kappa();&lt;br /&gt;
  char _buffer2[INPUT_SIZE];&lt;br /&gt;
  char S[6];&lt;br /&gt;
  // trasformo prima in stringa&lt;br /&gt;
  dtostrf(c2, 4, 1, S);&lt;br /&gt;
  // se int non è necessario trasformare in stringa&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float Volt(){&lt;br /&gt;
   // rapporto del partitore&lt;br /&gt;
   float R=13.70/1023.0;&lt;br /&gt;
   return (float)analogRead(bat)*R;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float Kappa(){&lt;br /&gt;
  // preleva la conversione da un trimmer e lo mappa&lt;br /&gt;
  return (float)map(analogRead(pot),1,1023,1,50);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5230</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5230"/>
		<updated>2016-02-16T14:43:13Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Il nuovo codice di Arduino */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
&lt;br /&gt;
Anche questo codice (per ora si chiama RUSC_006) ha subito 'robuste' manipolazioni per adattarlo al circuito realizzato. In particolare è stato scomposto in diversi 'blocchi di funzioni'.&lt;br /&gt;
Infatti il main loop() seguente:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
#define led 3   // Led aggiunto&lt;br /&gt;
#define sw  4   // Button di utilità&lt;br /&gt;
#define bat A0  // ADC Batteria&lt;br /&gt;
#define pot A1  // ADC Trimmer&lt;br /&gt;
#define ntc A2  // ADC NTC 10k&lt;br /&gt;
&lt;br /&gt;
int Sx=127;// Velocita' motori 127-&amp;gt;V=0 255-&amp;gt;V=Max 0-&amp;gt;V=-Max &lt;br /&gt;
int Dx=127;&lt;br /&gt;
int C=0;// Utile solo per i TEST&lt;br /&gt;
&lt;br /&gt;
// variabili utili per manipolare i comandi&lt;br /&gt;
int command_name; &lt;br /&gt;
int posi;&lt;br /&gt;
&lt;br /&gt;
// La seriale aggiuntiva di comunicazione con ESP&lt;br /&gt;
// permette di usare Serial per i TEST&lt;br /&gt;
#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
SoftwareSerial mySerial(6, 7);     // RX, TX di Arduino&lt;br /&gt;
&lt;br /&gt;
#define INPUT_SIZE 35            // Dim. buffer per invio e ricezione comandi&lt;br /&gt;
char input[INPUT_SIZE];          // Array di manipolazione delle stringhe seriali &lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;         // Stringa che memorizza il comando inviato&lt;br /&gt;
boolean stringComplete = false;  // var logica di completamento Stringa&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(led,OUTPUT);&lt;br /&gt;
  pinMode(sw,INPUT);&lt;br /&gt;
  digitalWrite(sw,HIGH);&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  mySerial.begin(57600); &lt;br /&gt;
  inputString.reserve(INPUT_SIZE);&lt;br /&gt;
  Serial.println(&amp;quot;Start&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
unsigned long time1,time2;&lt;br /&gt;
/* =======================&lt;br /&gt;
 * Tempo totale del ciclo di riconoscimento di una&lt;br /&gt;
 * stringa comando tipo 'move' 600us senza stampe.&lt;br /&gt;
 * Un comando tipo 'get' sulla telemetria &lt;br /&gt;
 * impiega oltre 1 secondo&lt;br /&gt;
 *=======================*/&lt;br /&gt;
void loop() {&lt;br /&gt;
   time1=micros();&lt;br /&gt;
   if (mySerial.available()&amp;gt;0){ stacca();&lt;br /&gt;
   //  Serial.print(&amp;quot;letta:&amp;quot;);Serial.println(inputString);&lt;br /&gt;
   }&lt;br /&gt;
   /* ============================&lt;br /&gt;
    * Se il comando inviato inizia con R&lt;br /&gt;
    * lo legge e trascodifica le due Velocità&lt;br /&gt;
    * inviate dal server &lt;br /&gt;
    ***********************************&lt;br /&gt;
    * Se il comando inizia con V si tratta&lt;br /&gt;
    * di una richiesta di misure  V=c1 e  K=c2&lt;br /&gt;
    *=========================*/&lt;br /&gt;
   if (stringComplete) {&lt;br /&gt;
     if(inputString[0]=='R')scan_get();&lt;br /&gt;
     if(inputString[0]=='V')scan_put();&lt;br /&gt;
&lt;br /&gt;
     /* ==== qui sono disponibili i valori pwm per i motori====*/&lt;br /&gt;
     //Serial.print(&amp;quot;Pwm_Sx:&amp;quot;);Serial.print(Sx);&lt;br /&gt;
     //Serial.print(&amp;quot; Pwm_Dx:&amp;quot;);Serial.println(Dx);&lt;br /&gt;
     inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
     stringComplete = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
//  time2=micros();&lt;br /&gt;
//  Serial.println(time2-time1);&lt;br /&gt;
//  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Invoca il blocco STACCA che realizza la funzione readBytes() non presente nella libreria &amp;lt;SoftSerial.h&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
il blocco SCAN che dispone di due funzioni scan_get() e scan_put() che si occupano rispettivamente, la prima, di analizzare e ricevere i valori PWM da inviare al driver motori; la seconda di analizzare e restituire le misure telemetriche invocando le funzioni Mis_1() e Mis_2() contenute nel blocco MISURE.&lt;br /&gt;
&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5229</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5229"/>
		<updated>2016-02-16T14:27:40Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* web_serv.lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice javascript la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni di index.htm mostrano sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5228</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5228"/>
		<updated>2016-02-16T14:22:55Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti rispetto agli altri file web_ser.lua e int.lua. Chi è interessato al dettaglio può scaricarli e confrontarli.&lt;br /&gt;
&lt;br /&gt;
In questa sede si dà per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modifiche ad index.htm ci riferiremo alla sola parte in JavaScript che 'aziona' la telemetria. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le linee nuove inserite (in particolare dalla 13 alla 26) servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
  la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
  la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
  la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
  e li mostra sul display.&lt;br /&gt;
  le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
  con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad una semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui nel loro dettaglio.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5227</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5227"/>
		<updated>2016-02-16T14:16:00Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per non appesantire troppo si commentano solo le linee nuove inserite (in particolare dalla 13 alla 26) che servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
 la riga 15 azzera le variabili per riposizionare TUTTO nella condizione iniziale.&lt;br /&gt;
 la riga 18 compone l'url che eseguirà la richiesta al Server di inviare i dati telemetrici.&lt;br /&gt;
 la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
 e li mostra sul display.&lt;br /&gt;
 le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
 con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad un semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5226</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5226"/>
		<updated>2016-02-16T14:13:15Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html nella quale si sono inserite nuove linee con lo scopo di mostrare i campi e i pulsanti non presenti nell'originale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per non appesantire troppo si commentano solo le linee nuove inserite (in particolare dalla 13 alla 26) che servono per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display:&lt;br /&gt;
&lt;br /&gt;
 la riga 15 azzera le variabili per riposizionare le 'maniglie motori' nella posizione iniziale.&lt;br /&gt;
 la riga 18 compone l'url che eseguirà la richiesta al server di inviare i dati telemetrici.&lt;br /&gt;
 la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati telemetrici &lt;br /&gt;
 e li mostra sul display.&lt;br /&gt;
 le righe 22 .. 25 ripristinano le variabili motore, le inviano ad Arduino attraverso il Server &lt;br /&gt;
 con la funzione loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
le 4 funzioni invocate alle righe 19, 23, 24, 25 dovrebbero essere comprensibili ad un semplice lettura del codice JavaScript e per non 'tediare' non sono riportate qui.&lt;br /&gt;
Rispetto al JavaScript originale sono state modificate e adattate a queste funzioni anche altre parti del codice.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5225</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5225"/>
		<updated>2016-02-16T14:03:07Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per non appesantire troppo si comeentano solo le linee nuove inserite (in particolare dalla 13 alla 26) per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display;:&lt;br /&gt;
 la riga 15 azzera le variabili per riposizionare le 'maniglie motori' nella posizione iniziale.&lt;br /&gt;
 la riga 18 compone l'url che eseguià la richiesta al server di inviare i dati telemetrici&lt;br /&gt;
 la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati e li mostra sul display&lt;br /&gt;
 la riga 22 .. 24 ripristinano le variabili motore, le inviano ad arduino attraverso &amp;lt;p&amp;gt;il Server con loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5224</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5224"/>
		<updated>2016-02-16T14:00:20Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per non appesantire troppo si comeentano solo le linee nuove inserite (in particolare dalla 13 alla 26) per gestire le richieste telemetriche.&lt;br /&gt;
la condizione if si riferisce all'avvenuta pressione del Pulsante circolare BLU sul display;:&lt;br /&gt;
 la riga 15 azzera le variabili per riposizionare le 'maniglie motori' nella posizione iniziale.&lt;br /&gt;
 la riga 18 compone l'url che eseguià la richiesta al server di inviare i dati telemetrici&lt;br /&gt;
 la riga 19 invoca la funzione loadDoc_UNO(url) che richiede/riceve i dati e li mostra sul display&lt;br /&gt;
 la riga 22 .. 24 ripristinano le variabili motore, le inviano ad arduino attraverso il Server con loadDoc_ZERO(url), riposizionano le 'maniglie motori' e le mostrano.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5223</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5223"/>
		<updated>2016-02-16T13:46:21Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
// =========== Gestione Eventi Touch ======================&lt;br /&gt;
addEventListener('touchstart', function(e) {&lt;br /&gt;
	e.preventDefault();&lt;br /&gt;
	var touch = e.touches[0];&lt;br /&gt;
	var xhttp = new XMLHttpRequest();&lt;br /&gt;
	var posX = touch.pageX;&lt;br /&gt;
	var posY = touch.pageY-50;&lt;br /&gt;
	var url=&amp;quot;&amp;quot;;&lt;br /&gt;
	/* ===================================================&lt;br /&gt;
	 * Se premi il pulsante circolare Blue in alto&lt;br /&gt;
	 * Motori Fermi e Richiede, Riceve e Mostra misure telemetriche&lt;br /&gt;
	 * ====================================================*/&lt;br /&gt;
	if(	e.touches.length == 1 &amp;amp;&amp;amp; posX &amp;gt; 110 &amp;amp;&amp;amp; posX &amp;lt; 190 &lt;br /&gt;
		&amp;amp;&amp;amp; posY &amp;gt; 10 &amp;amp;&amp;amp; posY &amp;lt; 100) {&lt;br /&gt;
		HL=200;HR=200;MR=127;ML=127;C=11;//C=11 Mostra&lt;br /&gt;
&lt;br /&gt;
		// Invoca i parametri telemetrici da Arduino e li mostra&lt;br /&gt;
		url=&amp;quot;info.txt?V=uno_var&amp;amp;K=due_var&amp;quot;;&lt;br /&gt;
		loadDoc_UNO(url);&lt;br /&gt;
&lt;br /&gt;
		// ==== Re-invia  i parametri ML=MR=127 azzerati ad Arduino &lt;br /&gt;
		url=&amp;quot;data.json?R=&amp;quot;+MR+&amp;quot;&amp;amp;l=&amp;quot;+ML+&amp;quot;&amp;amp;C=&amp;quot;+C;&lt;br /&gt;
		loadDoc_ZERO(url);&lt;br /&gt;
		disegna(HL,HR);	&lt;br /&gt;
		mostra_speed(ML,MR);&lt;br /&gt;
	} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5222</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5222"/>
		<updated>2016-02-16T13:43:32Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* web_serv.lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
  63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
  64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
  65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento delle variabili viene lanciato all'interno delle due funzioni Mis_1() e Mis_2()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer2,  &amp;quot;due_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer2);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5221</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5221"/>
		<updated>2016-02-16T13:39:25Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* web_serv.lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzioni numerate 5 e 6 sopra restituiscono al codice la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Su Arduino l'istruzione per il popolamento della variabile viene lanciato all'interno della funzione Mis_1()&lt;br /&gt;
&lt;br /&gt;
  sprintf(_buffer1,  &amp;quot;uno_var=%s&amp;quot;, S); &lt;br /&gt;
  mySerial.println(_buffer1);&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5220</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5220"/>
		<updated>2016-02-16T13:34:04Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* web_serv.lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
Le due istruzione sopra &lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
restituiscono al codice di JavaScripr la stringa in formato Json &amp;quot;{V:xxx,K:yyy}&amp;quot; che le seguenti istruzioni Javascript di index.htm restituiscono sul display&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
63	var A=JSON.parse(xhttp.responseText);&lt;br /&gt;
64	document.getElementById(&amp;quot;mis_uno&amp;quot;).innerHTML = &amp;quot;V=&amp;quot;+A.V;&lt;br /&gt;
65	document.getElementById(&amp;quot;mis_due&amp;quot;).innerHTML = &amp;quot;K=&amp;quot;+A.K;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Su arduino l'istruzione per il popolamento della variabile viene lanciato all'interno della funzione Mis_1&lt;br /&gt;
&lt;br /&gt;
 sprintf(_buffer1,  &amp;quot;uno_var=%i\r\n&amp;quot;, c1); &lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5219</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5219"/>
		<updated>2016-02-16T13:22:38Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Le connessioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
#Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
#Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per aggiornare i file di o per la programmazione di ESP.&lt;br /&gt;
#Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
#Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
#E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_serv.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_serv.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del file [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 web_serv.lua]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea ([https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L14 14 in web_serv.lua originale]) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. &lt;br /&gt;
&lt;br /&gt;
Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L16-L19 linee 16-19 della versione originale] è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea [https://github.com/raspibo/Ruschino_WiFi/blob/3313126357283e080b5020485f2dfb2abfde6948/ESP8266_code/web_serv.lua#L56 56 del di web_serv.lua originale]&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
 [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=javascript&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due variabili popolate da arduino attraverso un comando impartito sulla connessione seriale, con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Su arduino l'istruzione per il popolamento della variabile viene lanciato all'interno della funzione Mis_1&lt;br /&gt;
&lt;br /&gt;
 sprintf(_buffer1,  &amp;quot;uno_var=%i\r\n&amp;quot;, c1); &lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=File:NANO_ESP8266.png&amp;diff=5189</id>
		<title>File:NANO ESP8266.png</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=File:NANO_ESP8266.png&amp;diff=5189"/>
		<updated>2016-02-14T13:54:23Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: GioCupo ha caricato una nuova versione di &amp;amp;quot;File:NANO ESP8266.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=File:NANO_ESP8266.png&amp;diff=5188</id>
		<title>File:NANO ESP8266.png</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=File:NANO_ESP8266.png&amp;diff=5188"/>
		<updated>2016-02-14T13:45:06Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: GioCupo ha caricato una nuova versione di &amp;amp;quot;File:NANO ESP8266.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5187</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5187"/>
		<updated>2016-02-14T13:38:44Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* web_sev.lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che dichiara i file disponibili sul server.&lt;br /&gt;
&lt;br /&gt;
l'inserimento della linea di codice sottostante dopo la (26 in web_serv.lua originale)  dichiara in una intestazione il mimetype da fornire ai browser dei client per gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5186</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5186"/>
		<updated>2016-02-14T13:26:27Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Le connessioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto, 6.8k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che consente con la linea di codice sottostante (26 in web_serv.lua originale) di gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5185</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5185"/>
		<updated>2016-02-14T13:20:03Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto, 8,2k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che consente con la linea di codice sottostante (26 in web_serv.lua originale) di gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, dando per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5184</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5184"/>
		<updated>2016-02-14T13:17:07Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Le connessioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili, in alto a sinistra, le TRE connessioni all'alimentazione: 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente sui pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto, 8,2k-4,7k è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che consente con la linea di codice sottostante (26 in web_serv.lua originale) di gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, daldo per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5183</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5183"/>
		<updated>2016-02-14T13:11:48Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Introduzione */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
* Il pulsante BLU circolare, inserito in alto, consente di inviare con un touch la richiesta di aggiornamento dei dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
* NOTA: Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili le TRE connessioni all'alimentazione 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente su pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE di Arduino. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che consente con la linea di codice sottostante (26 in web_serv.lua originale) di gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, daldo per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5182</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5182"/>
		<updated>2016-02-14T13:07:53Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* index.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
*nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
*nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
*Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili le TRE connessioni all'alimentazione 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente su pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE di Arduino. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che consente con la linea di codice sottostante (26 in web_serv.lua originale) di gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono più consistenti:&lt;br /&gt;
&lt;br /&gt;
Per illustrarle le modiiche ad index.htm ci riferiremo alla sola parte in JavaScript, daldo per acquisita la parte relativa al codice html.&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5181</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5181"/>
		<updated>2016-02-14T13:03:50Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Le connessioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
*nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
*nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
*Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili le TRE connessioni all'alimentazione 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente su pin 6,7 di Arduino facendo uso della libreria &amp;lt;SoftwareSerial.h&amp;gt;. In questo modo i collegamenti Rx e TX nativi di Arduino sono utilizzati per il caricamento e il debug dei programma con IDE di Arduino. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione del partitore al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un sensore di Temperatura NTC al pin A1. Le DUE misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale. Da notare il partitore in basso 18k-12k che serve per ridurre il segnale seriale Tx di Arduino dai 5v ai 3.3 di Rx di ESP. Lo switch SW1 è indispensabile per portare a massa il pin di ESP quando si usa la connessione FTDI per caricare il firmware NodeMCU.&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che consente con la linea di codice sottostante (26 in web_serv.lua originale) di gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono stato più consistenti:&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5180</id>
		<title>ESP8266 Web server con telemetria</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=ESP8266_Web_server_con_telemetria&amp;diff=5180"/>
		<updated>2016-02-14T12:53:25Z</updated>

		<summary type="html">&lt;p&gt;GioCupo: /* Le connessioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right;border:1px solid black;padding:10px;margin:10px background:#F5F6CE; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 5px 10px 10px 8px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;&amp;quot; &amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;400px&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
! [[File:Web_serv_01.png|200px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-size:100%;font-weight:bold&amp;quot;&amp;gt;ESP8266 Web server con telemetria&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  Interfaccia di comando WiFi&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Introduzione=&lt;br /&gt;
Il presente progetto è un'estensione di [[ESP8266 Web server touch]] e si prefigge di aggiungere al progetto citato la restituzione su Display touch di dati misurati da Arduino.&lt;br /&gt;
&lt;br /&gt;
In questa estensione si mostra come si possano ottenere sul display touch di un cellulare o di un tablet valori 'inviati ad' e 'prelevati da' Arduino.&lt;br /&gt;
&lt;br /&gt;
*nell'immagine si vede il riquadro centrale L=127 R=127 che mostra i valori pwm attuali 'inviati ad Arduino'.&lt;br /&gt;
&lt;br /&gt;
*nell'immagine i due riquadri piccoli in alto V=4 e K=2 mostrano i dati telemetrici 'prelevati da Arduino'.&lt;br /&gt;
&lt;br /&gt;
*Per estensione si potrebbe usare, con modifiche 'leggere', questa applicazione in ambito domotico sia per visualizzare lo stato di sensori che per azionare switch o relays.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Il circuito usato per lo scambio dati =&lt;br /&gt;
&lt;br /&gt;
La figura mostra come sono stati connessi tra loro ESP8266 ed Arduino. &lt;br /&gt;
&lt;br /&gt;
Oltre a questo sono mostrate le connessioni con il driver motori del Robottino che verrà usato e il collegamento dei sensori con Arduino.&lt;br /&gt;
&lt;br /&gt;
[[File:NANO_ESP8266.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Il progetto illustrato qui è stato ricavato dal modello Ruschino, con piccole variazioni del SW e dell'HW nell'utilizzo del driver motori. &lt;br /&gt;
&lt;br /&gt;
In particolare qui si fa uso del ponte H del driver per motori DC del tipo L298N interfacciato con integrato Inverter tipo 4069 che consente di utilizzare solo due segnali PWM per 'governare' i motori. &lt;br /&gt;
&lt;br /&gt;
[[File:L298N.png]]&lt;br /&gt;
&lt;br /&gt;
I valori PWM variano da 127 a 255 per il moto in avanti e da 127 a 0 per il moto all'indietro.&lt;br /&gt;
&lt;br /&gt;
=== Le connessioni ===&lt;br /&gt;
&lt;br /&gt;
1) Sono visibili le TRE connessioni all'alimentazione 7-12v per Arduino (verso pin VIN), Gnd e 3.3v per ESP8266. Il Diodo Schottky è stato inserito per impedire inversioni di alimentazione. &lt;br /&gt;
&lt;br /&gt;
2) Arduino Nano e scheda ESP8266 sono connessi serialmente su pin 6,7 di Arduino. Si nota lo switch SW2 che ha il compito di isolare il collegamento seriale se si utilizza FTDI per la programmazione di ESP.&lt;br /&gt;
&lt;br /&gt;
3) Il partitore in alto è calcolato per ridurre la tensione massima di 12v ad un valore ADC minore di 5.0v. La connessione al pin A0 consente la misura della tensione della batteria di alimentazione. La connessione (di esempio) di un Sensore di Temperatura NTC al pin A1. Le due misure sono inviate in telemetria al display touch.&lt;br /&gt;
&lt;br /&gt;
4) Connessione tra ESP e convertitore FTDI USB-Seriale per programmare ESP&lt;br /&gt;
&lt;br /&gt;
5) E' mostrata a parte l'immagine di L298N con 4096 e le relative connessioni.&lt;br /&gt;
&lt;br /&gt;
= Modifiche al Software di ESP8266 =&lt;br /&gt;
i file del progetto Ruschino web_sern.lua, init_lua, e index.htm hanno mantenuto lo stesso nome e sono stati modificati come illustrato qui:&lt;br /&gt;
&lt;br /&gt;
==init.lua==&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
tmr.alarm(0, 3000, 0, function() dofile('web_serv.lua') end );&lt;br /&gt;
print(&amp;quot;&amp;quot;);&lt;br /&gt;
uart.setup(0,57600,8,0,1,0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unica modifica la velocità di trasmissione dati da 115200 a 57600. Utilizzando la velocità più alta si riscontrava qualche errore di ricezione da parte di Arduino, non è escluso che si possa far funzionare anche a 115200 bisognerebbe fare altre prove.&lt;br /&gt;
&lt;br /&gt;
==web_sev.lua==&lt;br /&gt;
Vengono mostrati i soli punti di modifica del precedente web_serv.lua&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
print(&amp;quot;R=127&amp;amp;l=127&amp;amp;C=0&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la linea 1 (14 in web_serv.lua originale) ha subito la seguente modifica: Si invia ad Arduino l'azzeramento iniziale delle velocità motori che ora hanno valore PWM=127. Il parametro C=0 è stato utilizzato, per distinguere le varie opzioni touch, per il testing del JavaScript di index.htm e può essere eliminato.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
httpRequest[&amp;quot;/info.txt&amp;quot;]=&amp;quot;info.txt&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Alle linee 16-19 della versione originale è stata aggiunta la linea (20 in web_serv.lua) che consente con la linea di codice sottostante (26 in web_serv.lua originale) di gestire le richieste ad Arduino di inviare i dati telemetrici.&lt;br /&gt;
&lt;br /&gt;
Inserimento:&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
getContentType[&amp;quot;/info.txt&amp;quot;]=&amp;quot;text&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Infine sono state inserite:&lt;br /&gt;
&lt;br /&gt;
dopo la linea 56 del di web_serv.lua originale [conn:on(&amp;quot;sent&amp;quot;,function(conn)]&lt;br /&gt;
&lt;br /&gt;
Le seguenti linee:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=lua&amp;gt;&lt;br /&gt;
conn:on(&amp;quot;sent&amp;quot;,function(conn)&lt;br /&gt;
-- Inserimento&lt;br /&gt;
_,_,nome,ext=string.find(requestFile, &amp;quot;(%w+).(%w+)&amp;quot;); 		&lt;br /&gt;
if ext==&amp;quot;txt&amp;quot; and nome==&amp;quot;info&amp;quot; then &lt;br /&gt;
	conn:send(&amp;quot;{\&amp;quot;V\&amp;quot;: \&amp;quot;&amp;quot;..uno_var..&amp;quot;\&amp;quot;,&amp;quot;);&lt;br /&gt;
	conn:send(&amp;quot;\&amp;quot;K\&amp;quot;: \&amp;quot;&amp;quot;..due_var..&amp;quot;\&amp;quot;}&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
la richiesta in Java script viene 'filtrata' e vengono inviate le due Variabili con identificatore V e K al client e mostrate su touch.&lt;br /&gt;
&lt;br /&gt;
Le variazioni devono essere lette in parallelo con il codice JavaScript che le invoca e con il codice di Arduino che risponde alle richieste.&lt;br /&gt;
==index.htm==&lt;br /&gt;
In questo file le modifiche a quello originale sono stato più consistenti:&lt;br /&gt;
&lt;br /&gt;
=Il nuovo codice di Arduino=&lt;br /&gt;
[[Category:Ruschino]]&lt;/div&gt;</summary>
		<author><name>GioCupo</name></author>
	</entry>
</feed>