<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tutorial Arduino Archives</title>
	<atom:link href="https://logicaprogrammabile.it/category/tutorial-arduino/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/category/tutorial-arduino/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sun, 13 Nov 2022 10:22:09 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Tutorial Arduino Archives</title>
	<link>https://logicaprogrammabile.it/category/tutorial-arduino/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arduino MKR Zero e WIZ850io</title>
		<link>https://logicaprogrammabile.it/arduino-mkr-zero-wiz850io/</link>
					<comments>https://logicaprogrammabile.it/arduino-mkr-zero-wiz850io/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Sun, 13 Nov 2022 09:51:59 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Ethernet Shield]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[w5500]]></category>
		<category><![CDATA[wiz850]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6782</guid>

					<description><![CDATA[<p>Collegare una scheda ethernet WIZ850 ad Arduino MKR Arduino dispone di diverse shield che permettono di collegarci a una rete lan cablata come ad esempio la MKR ETH. Esistono sul mercato altri dispositivi che svolgono la stessa funzione con costi contenuti e form factor molto...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-mkr-zero-wiz850io/">Arduino MKR Zero e WIZ850io</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Collegare una scheda ethernet WIZ850 ad Arduino MKR</h1>
<p>Arduino dispone di diverse shield che permettono di collegarci a una rete lan cablata come ad esempio la <a href="https://amzn.to/3hCuwl6">MKR ETH</a>. Esistono sul mercato altri dispositivi che svolgono la stessa funzione con costi contenuti e form factor molto piccoli. Uno di questi e la scheda WIZ850io prodotta da <a href="https://amzn.to/3O1DLHt">WIZnet</a>, dotata di chip wiznet w5500 lo stesso utilizzato per la MKR ETH.</p>
<p>Questa scheda ha una dimensione del pcb di 25mm X 23mm e un costo di circa 20 euro. Di seguito la pin function della scheda:</p>
<figure id="attachment_6785" aria-describedby="caption-attachment-6785" style="width: 447px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="wp-image-6785 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2022/11/wiz850io.png" alt="wiz850 form factor and pinfunction" width="447" height="320" srcset="https://logicaprogrammabile.it/wp-content/uploads/2022/11/wiz850io.png 447w, https://logicaprogrammabile.it/wp-content/uploads/2022/11/wiz850io-300x215.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2022/11/wiz850io-150x107.png 150w" sizes="(max-width: 447px) 100vw, 447px" /><figcaption id="caption-attachment-6785" class="wp-caption-text">wiz850io pins function</figcaption></figure>
<p>Come possiamo vedere l&#8217;alimentazione della scheda richiede una tensione di 3.3V, è quindi consigliato utilizzare schede con tensione di funzionano di 3.3v, questo per avere i livelli logici con questa tensione. Il bus di comunicazione è affidato all&#8217;interfaccia SPI. La figura seguente mostra i collegamenti tra una Arduino MKR Zero e la scheda WIZ850io:</p>
<p><img decoding="async" class="aligncenter size-full wp-image-6788" src="https://logicaprogrammabile.it/wp-content/uploads/2022/11/MKR_Zero_wiz850io.png" alt="MKR Zero connect to WIX850io" width="731" height="358" srcset="https://logicaprogrammabile.it/wp-content/uploads/2022/11/MKR_Zero_wiz850io.png 731w, https://logicaprogrammabile.it/wp-content/uploads/2022/11/MKR_Zero_wiz850io-300x147.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2022/11/MKR_Zero_wiz850io-150x73.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2022/11/MKR_Zero_wiz850io-585x286.png 585w" sizes="(max-width: 731px) 100vw, 731px" /></p>
<p>in dettaglio i collegamenti descritti nella tabella seguente:</p>
<table align="center">
<tbody>
<tr>
<th>Pin Arduino</th>
<th>Pin WIZ850io</th>
</tr>
<tr>
<td>VCC</td>
<td>3.3V</td>
</tr>
<tr>
<td>GND</td>
<td>GND</td>
</tr>
<tr>
<td>Reset</td>
<td>RSTn</td>
</tr>
<tr>
<td>MISO (10)</td>
<td>MISO</td>
</tr>
<tr>
<td>SCK (9)</td>
<td>SCLK</td>
</tr>
<tr>
<td>MOSI (8)</td>
<td>MOSI</td>
</tr>
<tr>
<td>SS (7)</td>
<td>SCNn</td>
</tr>
</tbody>
</table>
<p>Per verificare se tutti i collegamenti sono stati eseguiti correttamente possiamo utilizzare il codice seguente (esempio linkstatus della libreria Arduino ethernet):</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp">#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;

void setup() {
  //inizializzo la wiz850io
  //il pin chip select è stato collegato al pin 7
  //della scheda arduino. se lo collegate in un altro pin dovete
  //modificare il numero del pin all'interno del metodo init()
  Ethernet.init(7);
  
  //inizializzazione seriale
  Serial.begin(9600);
}

void loop() {
  //verifico se il cavo lan è collegato e se esiste un link
  //con una periferica ethernet
  auto link = Ethernet.linkStatus();
  Serial.print("Link status: ");
  switch (link) {
    case Unknown:
      Serial.println("Unknown");
      break;
    case LinkON:
      Serial.println("ON");
      break;
    case LinkOFF:
      Serial.println("OFF");
      break;
  }
  delay(1000);
}</pre>
<p>Questa scheda permette di implementare una interfaccia di rete cablata in tutte le schede Arduino dotate di porta SPI.</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-mkr-zero-wiz850io/">Arduino MKR Zero e WIZ850io</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-mkr-zero-wiz850io/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Datalogger con Raspberry SQLite e Arduino</title>
		<link>https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/</link>
					<comments>https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Sun, 28 Aug 2022 06:00:30 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DataLogger]]></category>
		<category><![CDATA[dht11]]></category>
		<category><![CDATA[Ethernet Shield]]></category>
		<category><![CDATA[raspberry]]></category>
		<category><![CDATA[Sqlite]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6691</guid>

					<description><![CDATA[<p>Costruire un datalogger remoto con Raspberry e Arduino Codice Python sul Raspberry SQLite Codice sull&#8217;Arduino MKR Zero Il progetto che ho realizzato riguarda il monitoraggio di temperatura e umidità all&#8217;interno di un locale tecnico. I dati rilevati da un sensore DHT22 vengono acquisti da una...</p>
<p>The post <a href="https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/">Datalogger con Raspberry SQLite e Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Costruire un datalogger remoto con Raspberry e Arduino</h1>
<ul>
<li><a href="#Raspberry_Sqlite">Codice Python sul Raspberry SQLite</a></li>
<li><a href="#Arduino_MKR_Zero">Codice sull&#8217;Arduino MKR Zero</a></li>
</ul>
<p>Il progetto che ho realizzato riguarda il monitoraggio di temperatura e umidità all&#8217;interno di un locale tecnico. I dati rilevati da un <a href="https://amzn.to/3q5qLpr" target="_blank" rel="noopener">sensore DHT22</a> vengono acquisti da una <a href="https://amzn.to/3cpgcu0" target="_blank" rel="noopener">Arduino MKR Zero</a> e tramite una <a href="https://amzn.to/3ArbPGB" target="_blank" rel="noopener">shield MKR ETH</a> inviati a un computer <a href="https://amzn.to/3R8XhSU" target="_blank" rel="noopener">Raspberry PI 4</a> che dopo averli acquisiti li memorizza all&#8217;interno di una tabella <a href="https://sqlite.org/index.html" target="_blank" rel="noopener">SQLite</a>.</p>
<p>Il protocollo utilizzato per l&#8217;invio dei dati si basa su UDP come abbiamo <a href="https://logicaprogrammabile.it/comunicazione-python-udp-computer-raspberry/" target="_blank" rel="noopener">visto in questo articolo</a>.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-6740" src="https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi.png" alt="Arduino Raspberry sqlite" width="458" height="451" srcset="https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi.png 458w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi-300x295.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi-150x148.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Ardu_Raspi-80x80.png 80w" sizes="(max-width: 458px) 100vw, 458px" /></p>
<p>I dati sarebbero potuti essere memorizzati in un semplice file di testo ma ho preferito usare un database in modo tale da estrarli in modo rapido utilizzando semplici query. Il database contiene per ora una tabella contenente i seguenti campi:</p>
<table align="center">
<tbody>
<tr>
<th>Nome Campo</th>
<th>Tipo Campo</th>
</tr>
<tr>
<td>ID</td>
<td>
<div>
<div>INTEGER PRIMARY KEY AUTOINCREMENT</div>
</div>
</td>
</tr>
<tr>
<td>Data</td>
<td>
<div>
<div>TIMESTAMP DEFAULT CURRENT_TIMESTAMP</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<div>Temperatura</div>
</div>
</td>
<td>
<div>
<div>VARCHAR(50) NOT NULL</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<div>Umidita</div>
</div>
</td>
<td>
<div>
<div>VARCHAR(50) NOT NULL</div>
</div>
</td>
</tr>
</tbody>
</table>
<p id="Raspberry_Sqlite">Il codice seguente gira sul Raspberry Pi 4; ho inserito diversi commenti che spiegano le varie istruzioni contenute nel programma:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import sqlite3
import socket
import threading
import time

#IP computer locale
UDP_IP_ADDR = "192.168.178.50"
#Porta computer locale
UDP_PORT_NUMBER = 20002

ip_port_Data = (UDP_IP_ADDR, UDP_PORT_NUMBER)
   
def client_Receive_Data():
    print("Avvio THREAD Receive Data...")
    serversocket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    serversocket1.bind(("192.168.178.30", 20001))
    msgToSend = str.encode("DB_OK")
    
    #crea connessione al database
    connection = sqlite3.connect('lopro.db')
    cursor = connection.cursor()
        
    try:            
        while True:            
            data, address = serversocket1.recvfrom(1024)
            strData = bytes.decode(data).split(":")
         
            sql = """ INSERT INTO tbl_log(Temperatura, Umidita) VALUES ('{}', '{}');""".format(strData[0], strData[1])
            
            print(sql)
            
            cursor.execute(sql)
            connection.commit()

            #invia al device una risposta
            serversocket1.sendto(msgToSend, ip_port_Data)
            time.sleep(1)
    except:
        print("errore")
        msgToSend = str.encode("ERRORE")
        serversocket1.sendto(msgToSend, ip_port_Data)
        connection.close()

def crea_tabella():
    #una volta creata la tabella possiamo evitare di chiamare
    #questa funzione ad ogni esecuzione del programma
    #crea connessione al database
    connection = sqlite3.connect('lopro.db')
    cursor = connection.cursor()
 
    #Se esiste la tabella cancellala
    #cursor.execute("DROP TABLE IF EXISTS tbl_log")
 
    # Crea la tabella se non esiste
    table = """ CREATE TABLE IF NOT EXISTS tbl_log (
            ID INTEGER PRIMARY KEY AUTOINCREMENT,
            Data TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            Temperatura VARCHAR(50) NOT NULL,
            Umidita VARCHAR(50) NOT NULL      
        ); """
 
    cursor.execute(table)
    cursor.close()
    connection.close()

 
def list_rows():
    print("list rows..")
    #crea connessione al database
    connection = sqlite3.connect('lopro.db')

    sql = """ SELECT * FROM tbl_log;"""

    cursor = connection.cursor()
    cursor.execute(sql)
    rows = cursor.fetchall()

    for row in rows:
        print(row)

    # Close the connection
    connection.close()

if __name__=="__main__":
    #Rimuovere il commento per creare la tabella
    #crea_tabella()
    #list_rows()
    #Avvio un thred
    print("Start program")
    t1 = threading.Thread(target=client_Receive_Data)
    t1.start()</pre>
<p id="Arduino_MKR_Zero">Questo è invece il codice che gira sulla Arduino MKR Zero; ho inserito diversi commenti che spiegano le varie istruzioni contenute nel programma:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp">#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;
#include &lt;EthernetUdp.h&gt;
#include &lt;DHT.h&gt;

#define DHTPIN 6
#define DHTTYPE DHT22

// creo un MAC address e un IP address per la scheda Arduino
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 178, 50);

//creo un ip address per il raspberry
IPAddress ip_remote(192, 168, 178, 30);
//creo una porta per la scheda Arduino
unsigned int localPort = 20002; 

//creo degli array di char per la ricezione e l'invio dei
//dati via udp
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
char chrBuffer[11];

//altre variabili 
String strTempUmid = "";
byte ciclo = 0;

// Creo degli oggetti per l'utilizzo di udp e del 
//sensore dht
EthernetUDP Udp;
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  //inizializzo lo shield mkr eth
  Ethernet.init(5);

  //inizializzo la scheda di rete
  Ethernet.begin(mac, ip);

  //inizializzo la seriale
  Serial.begin(9600);
  
  // verifico la ethernet shield
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("MKR ETH non presente o configurata in modo errato!");
    while (true) {
      delay(1);
    }
  }

  //inizializzo l'oggetto udp
  Udp.begin(localPort);
  //inizializzo l'oggetto dht
  dht.begin();
}

void loop() {

  //verifico presenza pacchetti udp in arrivo
  int packetSize = Udp.parsePacket();
  
  //se coi sono pacchetti
  if (packetSize) {
    //Serial.println(packetSize);
    //leggo i pacchetti e gli inserisco nell'array di char
    Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
    //printo i dati ricevuti
    Serial.println(packetBuffer);
  }

  //leggo umidità e temperatura dal sensore dht
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  //creo una stringa del tipo temp:umid
  strTempUmid = "";
  strTempUmid.concat(t);
  strTempUmid.concat(":");
  strTempUmid.concat(h);
  //printo la stringa sul ser mon
  Serial.println(strTempUmid);
  //converto la stringa in un array di char
  strTempUmid.toCharArray(chrBuffer, strTempUmid.length());

  //inizializzo la connessione con ip e porta del Raspberry
  Udp.beginPacket(ip_remote, 20001);
  //Scrivo i dati nel buffer
  Udp.write(chrBuffer);
  //invio i dati
  Udp.endPacket();

  //attendo un minuto prima del prossimo invio
  for (ciclo = 0; ciclo &lt; 60; ciclo++)
    delay(1000);

}</pre>
<p>Ogni minuto viene inviata una unica stringa contenente i dati di temperatura e umidita che il codice python provvederà a separate in due dati distinti per essere caricati sul database.</p>
<h2>Memorizzare solo le variazioni significative su Raspberry SQLite</h2>
<p>Possiamo ottimizzare lo spazio sulla tabella (e di conseguenza sul filesystem del Raspberry) memorizzando solo i dati che hanno una variazione significativa. In questo modo il monitoraggio rimane costante perché comunque l&#8217;Arduino legge e invia i dati ogni minuto ma posso risparmiare spazio sul database salvando solo le variazioni significative. Sulla tabella memorizzo anche il timestamp e quindi posso ricostruire l&#8217;andamento di temperatura e umidità interpolando i dati.</p>
<p>Il codice seguente mostra la modifica alla funzione client_Receive_Data() in modo tale da memorizzare solo i dati che hanno una variazione di 0.5 rispetto ai dati della lettura precedente rilevata dalla scheda Arduino:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">def client_Receive_Data():
    print("Avvio THREAD Receive Data...")
    serversocket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    serversocket1.bind(("192.168.178.30", 20001))
        
    # crea connessione al database
    connection = sqlite3.connect('lopro.db')
    cursor = connection.cursor()
    #creo due variabili per memorizzare i dati delle 
    #letture di temp e umid
    temp_prec = 0
    umid_prec = 0
    
    try:
        while True:
            data, address = serversocket1.recvfrom(1024)
            strData = bytes.decode(data).split(":")

            #verifico se i dati appena letti differiscono di 0.5 dai valori della lettuare precedente
            if (abs(temp_prec - float(strData[0])) &gt; 0.5) or (abs(umid_prec - float(strData[1])) &gt; 0.5) :
                print("Variazione di Temp e Hum")  
                sql = """ INSERT INTO tbl_log(Temperatura, Umidita) VALUES ('{}', '{}');""".format(strData[0], strData[1])

                #memorizzo i dati per poterli confrontare con quelli
                #che arrivano dalla scheda arduino
                temp_prec = float(strData[0])
                umid_prec = float(strData[1])
                #visualizzo la stringa sql
                print(sql)
                #eseguo la stringa sql insert avviando una transazione
                cursor.execute(sql)
                #confermo la transazione
                connection.commit()
                
                # invia al device una risposta
                msgToSend = str.encode("DB_OK")
                serversocket1.sendto(msgToSend, ip_port_Data)
            else:
                print("Nessuna variazione di Temp e Hum")  
                # invia al device una risposta
                msgToSend = str.encode("DB_NOK")
                serversocket1.sendto(msgToSend, ip_port_Data)
            
            time.sleep(1)
    except:
        print("errore")
        msgToSend = str.encode("ERRORE")
        serversocket1.sendto(msgToSend, ip_port_Data)
        connection.close()</pre>
<p>L&#8217;utilizzo congiunto di Raspberry e Arduino ci permette di realizzare progetti che superano i limiti dati dalle singole schede.</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/">Datalogger con Raspberry SQLite e Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/datalogger-remoto-raspberry-sqlite-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python UDP inviare dati da Raspberry a computer</title>
		<link>https://logicaprogrammabile.it/comunicazione-python-udp-computer-raspberry/</link>
					<comments>https://logicaprogrammabile.it/comunicazione-python-udp-computer-raspberry/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Sun, 21 Aug 2022 10:18:08 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6713</guid>

					<description><![CDATA[<p>Scambiare dati tra computer utilizzando il protocollo udp (informazioni aggiuntive seguendo questo link Python UDP) Codice Python Raspberry Codice Python Computer Ho la necessità di scambiare dati tra una scheda Raspberry e un computer che fanno parte di una rete locale. Il metodo più veloce...</p>
<p>The post <a href="https://logicaprogrammabile.it/comunicazione-python-udp-computer-raspberry/">Python UDP inviare dati da Raspberry a computer</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Scambiare dati tra computer utilizzando il protocollo udp</h1>
<p>(informazioni aggiuntive seguendo questo <a href="https://wiki.python.org/moin/UdpCommunication">link</a> Python UDP)</p>
<ul>
<li><a href="#Python_udp_Raspberry">Codice Python Raspberry</a></li>
<li><a href="#Python_udp_Computer">Codice Python Computer</a></li>
</ul>
<p>Ho la necessità di scambiare dati tra una scheda Raspberry e un computer che fanno parte di una rete locale. Il metodo più veloce è quello di utilizzare il <a href="https://it.wikipedia.org/wiki/User_Datagram_Protocol" target="_blank" rel="noopener">protocollo UDP</a> perchè è molto semplice da implementare, veloce e funzionale. In particolare il codice che gira sul Raspberry deve inviare una stringa contenente le informazioni sullo stato di attivazione di otto relay. Questa stringa è composta da otto etichette separate da un carattere di due punti (:). L&#8217;etichetta varia in funzione dello stato del relay, La parte di gestione dei relay e della modifica della stringa è stata ommessa per semplificare il codice.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6733" src="https://logicaprogrammabile.it/wp-content/uploads/2022/08/Python_UDP.png" alt="Python UDP" width="480" height="354" srcset="https://logicaprogrammabile.it/wp-content/uploads/2022/08/Python_UDP.png 480w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Python_UDP-300x221.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2022/08/Python_UDP-150x111.png 150w" sizes="auto, (max-width: 480px) 100vw, 480px" /></p>
<p>Il programma Python che gira sul Raspberry crea un thread che ogni tre secondi  invia la stringa verso il computer locale. Ho inserito dei commenti per descrivere le varie istruzioni del programma:</p>
<p id="Python_udp_Raspberry">codice python raspberry:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">#python udp raspberry
import socket
import threading
import time

#IP computer locale
UDP_IP_ADDR = "192.168.178.24"
#Porta computer locale
UDP_PORT_NUMBER = 20001

#Creo una tupla
ip_port_Data = (UDP_IP_ADDR, UDP_PORT_NUMBER)

#Stringa contenente lo stato dei relay
relay_status = "RL01_OFF:RL02_OFF:RL03_OFF:RL04_OFF:RL05_OFF:RL06_OFF:RL07_OFF:RL08_OFF"

#funzione per invio dei dati via UDP viene eseguita dal thread
def client_Send_Data():
    print("Avvio THREAD Send Data...")
    #Crea un socket udp per l'invio e la ricezione di dati
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    
    
    while True:
        #converto la stringa in byte
        msgToSend = str.encode(relay_status)
        #invio i dati specificando ip e porta
        serversocket.sendto(msgToSend, ip_port_Data)
        #attendo 3 secondi
        time.sleep(3)

if __name__=="__main__":
    #Avvio un thred 
    print("Start program")
    t1 = threading.Thread(target=client_Send_Data)
    t1.start()  

</pre>
<p>Il codice che invece gira sul computer locale deve mettersi in ascolto sulla porta utilizzata per l&#8217;invio dei dati, attendere la ricezione dei dati e poi mostrarli sulla console. Anche in questo codice ho inserito diversi commenti che spiegano le varie istruzioni:</p>
<p id="Python_udp_Computer">codice python computer</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">#python udp computer
import socket
import threading
import time

#IP computer locale
UDP_IP_LISTENER = "192.168.178.24"
#Porta computer locale
UDP_PORT_LISTENER = 20001

#creo una tupla
ip_port_Listener = (UDP_IP_LISTENER, UDP_PORT_LISTENER)

def client_Receive_Data():
    print("Avvio THREAD Receive Data...")
    #creo un socket udp
    serversocket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #assoccio il socket a ip e porta
    serversocket1.bind((UDP_IP_LISTENER, UDP_PORT_LISTENER))
    
    while True:
        #leggo i dati ricevuti dal socket
        data, address = serversocket1.recvfrom(100)
        #converto i byte in stringa
        cmd = bytes.decode(data)
        #printo i dati sul terminale o console
        print(cmd)
        #metto in pausa il thread per 1 secondo
        time.sleep(1)


if __name__=="__main__":    
    print("Start program")
    t1 = threading.Thread(target=client_Receive_Data)
    #Avvio thread
    t1.start()

</pre>
<p>Osservando il codice (Python udp Raspberry e Python udp computer) si nota che sono presenti gli stessi indirizzi ip. Questo perché il codice che riceve i dati si mette in ascolto sull&#8217;indirizzo ip della macchina e su una determinata porta. Il codice sul Raspberry invierà i dati sull&#8217;ip della macchina e sulla porta di ascolto.</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/comunicazione-python-udp-computer-raspberry/">Python UDP inviare dati da Raspberry a computer</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/comunicazione-python-udp-computer-raspberry/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pilotare pompa peristaltica</title>
		<link>https://logicaprogrammabile.it/come-pilotare-pompa-peristaltica/</link>
					<comments>https://logicaprogrammabile.it/come-pilotare-pompa-peristaltica/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 25 Jan 2021 07:00:44 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6467</guid>

					<description><![CDATA[<p>Controllare l&#8217;irrigazione di piccole piante. Irrigare una pianta può diventare molto noioso! L&#8217;irrigazione è una pratica che richiede costanza e attenzione, caratteristiche che non si sposano bene se abbiamo altri impegni e interessi. Fortunatamente possiamo automatizzarne il processo. Esistono diversi circuiti pronti all&#8217;uso che eseguono...</p>
<p>The post <a href="https://logicaprogrammabile.it/come-pilotare-pompa-peristaltica/">Pilotare pompa peristaltica</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Controllare l&#8217;irrigazione di piccole piante.</h1>
<p>Irrigare una pianta può diventare molto noioso! L&#8217;irrigazione è una pratica che richiede costanza e attenzione, caratteristiche che non si sposano bene se abbiamo altri impegni e interessi. Fortunatamente possiamo automatizzarne il processo.</p>
<p>Esistono diversi circuiti pronti all&#8217;uso che eseguono molto bene questo compito, ma se siete appassionati del fai da te probabilmente vorrete realizzare qualcosa con le vostre mani.</p>
<p>Quello che ho realizzato io è un semplice circuito che utilizza una <strong><a href="https://it.wikipedia.org/wiki/Pompa_peristaltica">pompa peristaltica</a></strong>. Il circuito elettrico è molto semplice e si riduce a un componente programmabile, come una scheda <strong>Arduino</strong> e un <strong>circuito di potenza</strong> per pilotare la <strong>pompa peristaltica</strong>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6514" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Pompa.png" alt="Schema pompa peristaltica" width="664" height="408" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Pompa.png 664w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Pompa-300x184.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Pompa-150x92.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Pompa-585x359.png 585w" sizes="auto, (max-width: 664px) 100vw, 664px" /></p>
<p>Il software deve eseguire l&#8217;attivazione della pompa ad <strong>intervalli regolari</strong>. Da qui le possibilità di gestione sono davvero tante, possiamo creare un sistema on off, un sistema che utilizza un rtc o un sistema complesso che monitorizza l&#8217;umidità del terreno e temperatura ambiente per decidere la giusta quantità di acqua da fornire alla pianta.</p>
<p>In questo esempio utilizzo la libreria <strong>Time</strong> per creare un ciclo di irrigazione che si attiva ogni giorno. Il codice seguente mostra come fare:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="c">#include &lt;TimeAlarms.h&gt;
#include &lt;Time.h&gt;

void avviaIrrigazionePianta()
{
  Serial.println("Avvio irrigazione pianta");
  digitalWrite(3, HIGH);
}

void fermaIrrigazionePianta()
{
  Serial.println("Fermo irrigazione pianta");
  digitalWrite(3, LOW);
}


void setup() {
  //init Seriale
  Serial.begin(9600);
  delay(100);

  pinMode(3, OUTPUT);
  digitalWrite(3, LOW);

  //imposto l'ora e la data
  setTime(8, 29, 45, 24, 01, 2021);

  //queste funzioni vengono eseguite ogni giorno
  //imposto orario di avvio irrigazione
  Alarm.alarmRepeat(8, 30, 0, avviaIrrigazionePianta);
  //imposto interruzione orario di irrigazione
  Alarm.alarmRepeat(8, 32, 0, fermaIrrigazionePianta);<br />  //l'irrigazione dura 2 minuti
}

void loop() {

  //visualizzo data e ora correnti
  Serial.print("Tempo= ");
  Serial.print(hour());
  Serial.print(":");
  Serial.print(minute());
  Serial.print(":");
  Serial.print(second());
  Serial.println("");

  Serial.print("Data= ");
  Serial.print(day());
  Serial.print("/");
  Serial.print(month());
  Serial.print("/");
  Serial.print(year());
  Serial.println("");
  
  //aggiorno l'allarme ogni secondo<br />  //senza questa istruzione non è possibile far scattare<br />  //gli allarmi preimpostati
  Alarm.delay(1000);

}</pre>
<p>Con pochi componenti e una manciata di istruzioni abbiamo realizzato un semplice irrigatore automatico. Questo semplice circuito può essere ampliato utilizzando un <a href="https://amzn.to/39dw2Dx">sensore di umidità</a>, <a href="https://amzn.to/3iJO6bK">un rtc</a> e un <a href="https://amzn.to/2Y7UwaP">datalogger</a> per monitorare tutti i parametri.</p>
<figure id="attachment_6518" aria-describedby="caption-attachment-6518" style="width: 446px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6518 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_1.jpg" alt="Circuito con pompa peristaltica" width="446" height="274" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_1.jpg 446w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_1-300x184.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_1-150x92.jpg 150w" sizes="auto, (max-width: 446px) 100vw, 446px" /><figcaption id="caption-attachment-6518" class="wp-caption-text">Circuito completo con Arduino e pompa peristaltica</figcaption></figure>
<figure id="attachment_6519" aria-describedby="caption-attachment-6519" style="width: 446px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6519 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_2.jpg" alt="Circuito di potenza" width="446" height="292" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_2.jpg 446w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_2-300x196.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_2-150x98.jpg 150w" sizes="auto, (max-width: 446px) 100vw, 446px" /><figcaption id="caption-attachment-6519" class="wp-caption-text">Mosfet per pilotare la pompa peristaltica</figcaption></figure>
<figure id="attachment_6520" aria-describedby="caption-attachment-6520" style="width: 249px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6520 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_3.jpg" alt="dettaglio Pompa peristaltica" width="249" height="444" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_3.jpg 249w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_3-168x300.jpg 168w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/perist_3-84x150.jpg 84w" sizes="auto, (max-width: 249px) 100vw, 249px" /><figcaption id="caption-attachment-6520" class="wp-caption-text">Pompa peristaltica</figcaption></figure>
<p>The post <a href="https://logicaprogrammabile.it/come-pilotare-pompa-peristaltica/">Pilotare pompa peristaltica</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/come-pilotare-pompa-peristaltica/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pi Pico, Raspberry crea il suo microcontrollore RP2040</title>
		<link>https://logicaprogrammabile.it/raspberry-pi-pico-rp2040/</link>
					<comments>https://logicaprogrammabile.it/raspberry-pi-pico-rp2040/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 22 Jan 2021 07:00:53 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6500</guid>

					<description><![CDATA[<p>Pi Pico, Raspberry entra nel mondo dei produttori di chip! Tutte le schede Raspberry sono state progettate per eseguire un sistema operativo. Un microcomputer dalle dimensioni ridotte e dal costo contenuto permette di creare diverse tipologie di software, da quelli didattici a quelli più complessi...</p>
<p>The post <a href="https://logicaprogrammabile.it/raspberry-pi-pico-rp2040/">Pi Pico, Raspberry crea il suo microcontrollore RP2040</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Pi Pico, Raspberry entra nel mondo dei produttori di chip!</h1>
<p>Tutte le schede <strong>Raspberry</strong> sono state progettate per eseguire un sistema operativo. Un microcomputer dalle dimensioni ridotte e dal costo contenuto permette di creare diverse tipologie di software, da quelli didattici a quelli più complessi che un microcontrollore non potrebbe probabilmente gestire. D&#8217;altro canto non è possibile acquisire direttamente dei segnali analogici, le linee GPIO hanno una latenza importante e i consumi energetici, anche in sleep mode, sono molto elevati (rispetto a un microcontrollore).</p>
<p>Probabilmente questo ha portato alla progettazione di un chip ad alte prestazioni, dotato di un buon numero di linee IO, di diversi tipi di bus di comunicazione e dal costo davvero contenuto (circa 4,5€).</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6506" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico.png" alt="raspberry pi pico" width="464" height="331" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico.png 464w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico-300x214.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico-150x107.png 150w" sizes="auto, (max-width: 464px) 100vw, 464px" /></p>
<p>Le caratteristiche del chip <strong>RP2040</strong> sono elencate di seguito</p>
<table>
<tbody>
<tr>
<td>Dual-core Arm Cortex-M0+ a 133MHz</td>
</tr>
<tr>
<td>264KB RAM</td>
</tr>
<tr>
<td>16MB memoria Flash su bus QSPI (Pi Pico 2 MB)</td>
</tr>
<tr>
<td>26 linee GPIO</td>
</tr>
<tr>
<td>4 linee analogico digitale</td>
</tr>
<tr>
<td>2 x UART, 2 x SPI, 2 x I2C</td>
</tr>
<tr>
<td>16 PWM</td>
</tr>
<tr>
<td>USB Host, Device e Mass Storage</td>
</tr>
</tbody>
</table>
<p>Caratteristiche davvero molto interessanti che permettono di realizzare schede adatte a svariati tipi di progetti.</p>
<p><figure id="attachment_6507" aria-describedby="caption-attachment-6507" style="width: 451px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-6507" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico_Arm.png" alt="pi pico rp2040" width="451" height="223" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico_Arm.png 451w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico_Arm-300x148.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/PiPico_Arm-150x74.png 150w" sizes="auto, (max-width: 451px) 100vw, 451px" /><figcaption id="caption-attachment-6507" class="wp-caption-text">RP2040</figcaption></figure></p>
<h2>Software e Hardware</h2>
<p><strong>Raspberry</strong> ha quindi avviato anche una collaborazione con diverse aziende, tra cui Arduino, per lo sviluppo e la produzione di schede basate sul chip <strong>RP2040</strong>.</p>
<p>Per quanto riguarda il software di programmazione sono stati sviluppati due sdk uno per programmare in C/C++ e l&#8217;altro per programmare in <strong>MicroPython</strong>. Anche in questo caso la programmazione avviene utilizzando diverse piattaforme e ambienti come <strong>Visual Studio Code</strong> su <strong>Windows</strong> o l&#8217;editor <strong>Thonny</strong> su <strong>Raspberry OS</strong>.</p>
<p><strong>Raspberry Pi Pico</strong> è già disponibile all&#8217;acquisto come alcune schede costruite da <strong>Adafruit</strong> e <strong>SparkFun</strong>, mentre per la scheda realizzata da <strong>Arduino</strong> si dovrà attendere ancora qualche settimana.</p>
<p>Ulteriori informazioni possono essere trovate sul sito ufficiale e seguendo questi indirizzi</p>
<p><a href="https://www.raspberrypi.org/blog/raspberry-pi-silicon-pico-now-on-sale/">Sito ufficiale Raspberry Pi Pico</a></p>
<p><a href="https://www.sparkfun.com/news/3707">Raspberry Pi Pico and RP2040 SparkFun</a></p>
<p><a href="https://blog.adafruit.com/2021/01/21/raspberry-pi-pico-rp2040-and-adafruit-family-of-boards/">RP2040 and Adafruit family</a></p>
<p><a href="https://blog.arduino.cc/2021/01/20/welcome-raspberry-pi-to-the-world-of-microcontrollers/">Blog Arduino</a></p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/raspberry-pi-pico-rp2040/">Pi Pico, Raspberry crea il suo microcontrollore RP2040</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/raspberry-pi-pico-rp2040/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>FLIP &#038; click, come collegare la ETH WIZ click</title>
		<link>https://logicaprogrammabile.it/flip-and-click-come-collegare-click-noards-eth-wiz-click/</link>
					<comments>https://logicaprogrammabile.it/flip-and-click-come-collegare-click-noards-eth-wiz-click/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 28 Dec 2020 14:52:35 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6388</guid>

					<description><![CDATA[<p>Utilizzare un modulo Eth WIZ click collegandolo sul mikroBUS In un precedente articolo abbiamo introdotto la scheda FLIP and click di Mikroelecktronika, una particolare versione della Arduino DUE che comprende 4 connettori mikroBUS che possiamo utilizzare per sperimentare con la vasta gamma di click Boards....</p>
<p>The post <a href="https://logicaprogrammabile.it/flip-and-click-come-collegare-click-noards-eth-wiz-click/">FLIP &#038; click, come collegare la ETH WIZ click</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare un modulo Eth WIZ click collegandolo sul mikroBUS</h1>
<p>In un <a href="https://logicaprogrammabile.it/flip-and-click-nuovo-cugino-arduino-due/">precedente articolo</a> abbiamo introdotto la scheda <strong>FLIP and click</strong> di Mikroelecktronika, una particolare versione della Arduino DUE che comprende 4 connettori mikroBUS che possiamo utilizzare per sperimentare con la vasta gamma di <a href="https://www.mikroe.com/click">click Boards</a>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6399" src="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_2.jpg" alt="" width="450" height="253" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_2.jpg 450w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_2-300x169.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_2-150x84.jpg 150w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Tra le tante click Boards una delle più utili, a mio avviso è il modulo ethernet (<a href="https://www.mikroe.com/eth-wiz-click">ETH WIZ click</a>). Per poterlo utilizzare basta semplicemente inserirlo in un connettore mikroBUS della scheda FLIP &amp; click. I connettori sono contrassegnati dalle lettere A, B, C e D.</p>
<p><span id="more-6388"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6400" src="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_3.jpg" alt="" width="450" height="253" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_3.jpg 450w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_3-300x169.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_3-150x84.jpg 150w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Il modulo ETH WIZ può essere utilizzato con la libreria Ethernet di Arduino. Il protocollo di comunicazione tra FLIP-n-clich e click Boards è lo SPI. Avendo 4 bus dobbiamo specificare nelle istruzioni di inizializzazione della libreria il pin CS adeguato</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6398" src="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_1.jpg" alt="flip and click" width="450" height="253" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_1.jpg 450w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_1-300x169.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_1-150x84.jpg 150w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Nella tabella seguente ho inserito i corrispettivi pin CS in funzione dello slot mikroBUS dove ho collegato la ETH WIZ.</p>
<table align="center">
<tbody>
<tr>
<td>slot microBUS</td>
<td>pin CS (Arduino)</td>
</tr>
<tr>
<td>A</td>
<td>funzione Ethernet.init(77);</td>
</tr>
<tr>
<td>B</td>
<td>funzione Ethernet.init(87);</td>
</tr>
<tr>
<td>C</td>
<td>funzione Ethernet.init(86);</td>
</tr>
<tr>
<td>D</td>
<td>funzione Ethernet.init(78);</td>
</tr>
</tbody>
</table>
<p>Lanciamo l&#8217;Arduino IDE  e dal menu File-&gt;Esempi-&gt;Ethernet carichiamo lo sketch LinkStatus. Modifichiamo il metodo init() secondo le nostre esigenze.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="c">#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;

void setup() {
  // Per utilizzare la scheda ETH WIZ dobbiamo selezionare il pin CS corretto
  //in funzione del connettore della FLIP-n-click 
  //Per la porta A utilizzare il pin 77
  //Per la porta B utilizzare il pin 87
  //Per la porta C utilizzare il pin 86
  //Per la porta D utilizzare il pin 78<br />
  Ethernet.init(77); //modulo ETH WIZ collegato sulla porta A della FLIP &amp; click<br />
  Serial.begin(9600);
}

void loop() {
  auto link = Ethernet.linkStatus();
  Serial.print("Link status: ");
  switch (link) {
    case Unknown:
      Serial.println("Unknown");
      break;
    case LinkON:
      Serial.println("ON");
      break;
    case LinkOFF:
      Serial.println("OFF");
      break;
  }
  delay(1000);
}</pre>
<p>Carichiamo il codice sulla scheda e colleghiamo un cavo lan tra il nostro pc e la ETH WIZ.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6401" src="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_4.jpg" alt="" width="450" height="253" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_4.jpg 450w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_4-300x169.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/12/flipclick_4-150x84.jpg 150w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Se tutto è andato a buon fine, aprendo il serial monitor dell&#8217;IDE dovremmo visualizzare la scritta Link status: ON </p>
<p>The post <a href="https://logicaprogrammabile.it/flip-and-click-come-collegare-click-noards-eth-wiz-click/">FLIP &#038; click, come collegare la ETH WIZ click</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/flip-and-click-come-collegare-click-noards-eth-wiz-click/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Configura con successo l&#8217;Arduino cloud</title>
		<link>https://logicaprogrammabile.it/configura-con-successo-larduino-cloud/</link>
					<comments>https://logicaprogrammabile.it/configura-con-successo-larduino-cloud/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 04 May 2020 06:00:50 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[GSM]]></category>
		<category><![CDATA[IOT]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6302</guid>

					<description><![CDATA[<p>Come utilizzare l&#8217;Arduino cloud Nello scorso articolo abbiamo capito come attivare la Arduino sim e come configurare l&#8217;Arduino MKR GSM 1400. Inoltre abbiamo visto come sia possibile inviare dati alla scheda utilizzando il Network Monitor. In questo articolo andremmo a creare un elemento Thing utilizzando...</p>
<p>The post <a href="https://logicaprogrammabile.it/configura-con-successo-larduino-cloud/">Configura con successo l&#8217;Arduino cloud</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come utilizzare l&#8217;Arduino cloud</h1>
<p>Nello <a href="https://logicaprogrammabile.it/configurare-arduino-sim-mkr-1400/">scorso articolo</a> abbiamo capito come attivare la <strong>Arduino sim</strong> e come configurare l&#8217;<strong>Arduino MKR GSM 1400</strong>. Inoltre abbiamo visto come sia possibile inviare dati alla scheda utilizzando il <strong>Network Monitor</strong>.</p>
<p>In questo articolo andremmo a creare un elemento <strong>Thing</strong> utilizzando l&#8217;<strong>Arduino Cloud</strong> e a scrivere il codice per la <strong>MKR GSM 1400</strong> in modo da poter <strong>inviare dei dati sul cloud</strong>.</p>
<p>Seguiamo questo indirizzo <a href="https://create.arduino.cc/iot/">https://create.arduino.cc/iot/</a>. Nella home dell&#8217;<strong>Arduino Cloud</strong> (al momento ancora in versione <strong>beta</strong>) possiamo creare un nuovo <strong>Thing</strong>, ovvero un contenitore di oggetti grafici che hanno il compito di visualizzare dati provenienti dalla scheda oppure di inviarli.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6274" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_thing.jpg" alt="add new thing" width="263" height="105" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_thing.jpg 263w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_thing-150x60.jpg 150w" sizes="auto, (max-width: 263px) 100vw, 263px" /></p>
<p>Cliccando sul bottone <strong>Add New Thing</strong> verrà caricata una pagina in cui inserire il <strong>nome del Thing</strong> e la scheda da associare nostro progetto IoT.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6275" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/create_thing.jpg" alt="add new thing form" width="609" height="185" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/create_thing.jpg 609w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/create_thing-300x91.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/create_thing-150x46.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/create_thing-585x178.jpg 585w" sizes="auto, (max-width: 609px) 100vw, 609px" /></p>
<p>Nel combobox <strong>Select Board</strong> selezioneremmo la scheda <strong>GSM 1400</strong> che abbiamo configurato nel precedente articolo. Clicchiamo ora sul pulsante <strong>CREATE</strong>.</p>
<p><span id="more-6302"></span></p>
<p>Ci ritroveremo nella pagina principale del <strong>Thing</strong> che abbiamo appena creato.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6306" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/thing.jpg" alt="arduino Thing" width="700" height="333" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/thing.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/thing-300x143.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/thing-150x71.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/thing-585x278.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Attualmente sono disponibili 4 Tab. Nel tab <strong>Properties</strong> verranno elencate tutte le variabili del Thing. Queste variabili potranno essere richiamate nello sketch. Nal tab <strong>Dashboard</strong> verranno rappresentate le variabili sotto forma di oggetti grafici, pulsanti e indicatori. Nel tab <strong>Webhooks</strong> possiamo scambiare dati con altri servizi. Nel tab <strong>Board</strong> sarà possibile associare una scheda al Thing, questa associazione è molto importante perchè va a mettere in relazione la scheda selezionata con la chiave memorizzata nel crypto chip della GSM 1400. Se la chiave del crypto chip non coincide con la chiave della scheda che abbiamo caricato nel Device Manager, la comunicazione non potrà avvenire.</p>
<h1>Creare delle proprietà</h1>
<p>Torniamo nel tab <strong>Properties</strong> e clicchiamo sul bottone <strong>ADD PROPERTY</strong>. Verrà caricata una nuova pagina contenente un form come quello in figura:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6309" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_proprty.jpg" alt="add property at thingh" width="700" height="665" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_proprty.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_proprty-300x285.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_proprty-150x143.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_proprty-585x556.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Nel campo <strong>Name</strong> inseriamo un <strong>nome identificativo</strong> per la proprietà, questo nome sarà copiato anche sul campo <strong>Variable Name</strong>. Se lo riteniamo opportuno possiamo cambiare il <strong>Variable Name</strong>. Il nome inserito nel campo <strong>Variable Name</strong>, sarà utilizzato all<strong>&#8216;interno del codice dello sketch</strong>.</p>
<p>Inseriamo per esempio il nome &#8220;temperatura&#8221;.</p>
<p>Nella combobox <strong>Type</strong> selezioniamo la voce <strong>Temperature sensor (Celsius)</strong>. Vengono visualizzati due nuovi campi dove inserire il valore <strong>minimo</strong> e <strong>massimo</strong> che la variabile temperatura dovrà avere. Inseriamo come valore minimo 0°C e come valore massimo 100°C.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6315" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/temp.jpg" alt="Temperature" width="700" height="411" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/temp.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/temp-300x176.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/temp-150x88.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/temp-585x343.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Compiliamo anche la sezione <strong>Permission</strong>, <strong>Update </strong> e <strong>History</strong>.</p>
<p>Nella sezione <strong>Permission</strong> possiamo scegliere <strong>Read Only</strong> se il dato viene inviato dal dispositivo al cloud Arduino, mentre sceglieremo <strong>Read &amp; Write</strong> se abbiamo la necessita di aggiornare la variabile temperature dall&#8217;Arduino cloud.</p>
<p>La sezione <strong>Update</strong> ci permette di ricevere i dati a tempi prestabiliti (utilizzando la textbox per indicare un tempo) oppure riceverli quando il dato ha una variazione rispetto al dato precedentemente inviato.</p>
<p>La sezione history crea un grafico utilizzando uno storico dei dati inviati dalla scheda.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6316" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/parametri.jpg" alt="thing Paraeters" width="700" height="379" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/parametri.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/parametri-300x162.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/parametri-150x81.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/parametri-585x317.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Ora non ci resta che cliccare sul bottone <strong>ADD PROPERTY</strong> per confermare la nostra proprietà.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6317" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/riepilogo.jpg" alt="Riepilogo temperatura" width="700" height="107" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/riepilogo.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/riepilogo-300x46.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/riepilogo-150x23.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/riepilogo-585x89.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Andiamo nel tab <strong>Dashboard</strong> è osserviamo la presenza di un elemento che visualizzerà il dato proveniente dalla scheda.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6318" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/dashboard_1.jpg" alt="Dashboard proprieta" width="700" height="403" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/dashboard_1.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/dashboard_1-300x173.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/dashboard_1-150x86.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/dashboard_1-585x337.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Per il momento non aggiungiamo nessun&#8217;altra proprietà e dedichiamoci alla scrittura del codice.</p>
<h1>Installazione delle librerie</h1>
<p>Apriamo l&#8217;<strong>Arduino IDE</strong> e creiamo un <strong>nuovo sketch</strong>. Importiamo tutte le librerie per lavorare con l&#8217;<strong>Arduino cloud</strong>. Da <strong>Gestore Librerie</strong> (combinazione di tasti Ctrl+Maiusc+i) cerchiamo la libreria <strong>ArduinoIotCloud</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6320" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreriaiot.jpg" alt="Aggiungi libreria iot" width="700" height="394" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreriaiot.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreriaiot-300x169.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreriaiot-150x84.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreriaiot-585x329.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>procediamo con l&#8217;installazione cliccando sul pulsante <strong>Installa</strong>. Il gestore delle librerie indicherà che sono indispensabili delle librerie aggiuntive:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6321" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreria_dipendenze.jpg" alt="dipendenze librerie" width="700" height="438" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreria_dipendenze.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreria_dipendenze-300x188.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreria_dipendenze-150x94.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/libreria_dipendenze-585x366.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Installiamole tutte come richiesto.</p>
<h1>Scrivere il codice per la scheda MKR GSM 1400</h1>
<p>Il codice seguente mostra come collegarsi all&#8217;<strong>Arduino Cloud</strong> e come aggiornare la variabile temperatura definita precedentemente nel <strong>Thing</strong>:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="avrasm">//Includo le librerie seguenti
#include &lt;ArduinoIoTCloud.h&gt;
#include &lt;Arduino_ConnectionHandler.h&gt;

//creo una costante dove contenere il think_id
//questo dato possiamo ottenerlo andando nel pannello di controllo
//dell'arduino cloud
const char THING_ID[]      = "a42be6ce-3158-4843-a29b-a36e1c90256f";

//in queste costanti inserisco i dati relativi alla sim arduino
const char GPRS_APN[]      = "prepay.pelion";
const char PINNUMBER[]     = "0000";
const char GPRS_LOGIN[]    = "arduino";
const char GPRS_PASSWORD[] = "arduino";

//questa è la variabile temperatura che abbiamo definito nelle proprietà del Thing
CloudTemperature temperatura;

//creo la connessione all'arduino cloud usando la rete gsm
GSMConnectionHandler ArduinoIoTPreferredConnection(PINNUMBER, GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD);

void setup() {
  // inizializzo la seriale
  Serial.begin(9600);
  //attendo che tutto sia pronto
  delay(1500);
  
  //inizializzo con l'id del clous
  ArduinoCloud.setThingId(THING_ID);
  //specifico la variabile che ho inserito nel thing e le sue caratteristiche
  ArduinoCloud.addProperty(temperatura, READ, ON_CHANGE, NULL);

  //inizializzo la connessione con la'rduino cloud
  //specificando il canale di comunicazione
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  //attivo i messaggi di debug
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  //trigghero l'arduino cloud
  ArduinoCloud.update();

  //genero dei valori casuali per la variabile temperatura
  temperatura = random(0, 100);
  //visualiazzo sul serial monitor il valore della variabile
  Serial.print("send data ");
  Serial.println(temperatura);
  attendo 10 s tra gli aggiornamenti
  delay(10000);

}</pre>
<p>I commenti che ho inserito nel codice descrivono il lavoro svolto dalle istruzioni.</p>
<p>Compiliamo e carichiamo il codice sulla Arduino GSM 1400. Terminato il caricamento apriamo il Serial monitor e osserviamo le fasi che portano a stabilire la connessione con l&#8217;Arduino Cloud.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6331" src="https://logicaprogrammabile.it/wp-content/uploads/2020/05/serial_output.jpg" alt="Serial monitor output" width="700" height="306" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/05/serial_output.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/05/serial_output-300x131.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/05/serial_output-150x66.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/05/serial_output-585x256.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Sul <strong>serial monitor</strong> osserviamo la stringa <strong>Device ID</strong>, questo valore deve essere identico a quello riportato nel tab Board. La stringa <strong>Thing ID</strong> invece deve essere identica a quella che viene indicata sulla pagina del Thing che abbiamo creato.</p>
<p>Apriamo una finestra del browser e colleghiamoci all&#8217;<strong>Arduino Cloud</strong> andando sulla dashboard del <strong>Thing</strong>. Osservando l&#8217;elemento grafico temperatura, dovremmo riscontrare gli stessi valori che la scheda sta trasmettendo.</p>
<p>In questo articolo abbiamo visto come configurare l&#8217;<strong>Arduino cloud</strong> e come trasmettere dei dati usando la <strong>MKR GSM 1400</strong>. Vedremo prossimamente anche come inviare dati dall&#8217;Arduino cloud alla scheda.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/configura-con-successo-larduino-cloud/">Configura con successo l&#8217;Arduino cloud</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/configura-con-successo-larduino-cloud/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Scopri come configurare Arduino sim e MKR 1400</title>
		<link>https://logicaprogrammabile.it/scopri-come-configurare-arduino-sim-mkr-1400/</link>
					<comments>https://logicaprogrammabile.it/scopri-come-configurare-arduino-sim-mkr-1400/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Sun, 26 Apr 2020 16:18:15 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[GSM]]></category>
		<category><![CDATA[IOT]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6260</guid>

					<description><![CDATA[<p>Creare dispositivi IoT con Arduino Un dispositivo IoT, tipicamente, ha bisogno di avere un circuito elettronico in grado di acquisire ed elabora dati (provenienti da sensori o da comandi esterni), un mezzo di trasmissione (molto spesso basato su un segnale  a radio frequenza) e un...</p>
<p>The post <a href="https://logicaprogrammabile.it/scopri-come-configurare-arduino-sim-mkr-1400/">Scopri come configurare Arduino sim e MKR 1400</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Creare dispositivi IoT con Arduino</h1>
<p>Un <a href="https://it.wikipedia.org/wiki/Internet_delle_cose">dispositivo IoT</a>, tipicamente, ha bisogno di avere un circuito elettronico in grado di acquisire ed elabora dati (provenienti da sensori o da comandi esterni), un mezzo di trasmissione (molto spesso basato su un segnale  a radio frequenza) e un sistema remoto capace di memorizzare, elaborare e gestire i dati.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6265" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/iot.jpg" alt="schema dispositivo iot" width="700" height="319" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/iot.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/iot-300x137.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/iot-150x68.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/iot-585x267.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Le caratteristiche del microcontrollore sono scelte in base alla potenza di calcolo e alla sua capacità di risparmiare energia. Molte applicazioni IoT sono spesso installate in luoghi remoti dove non è possibile avere una alimentazione stabile e duratura, quindi l&#8217;unica fonte di energia è demandata all&#8217;uso di una batteria.</p>
<p><span id="more-6260"></span></p>
<p>I mezzi di comunicazione più diffusi che vengono utilizzati in ambito IoT sono, <a href="https://lora-alliance.org/">LoRa</a>, <a href="https://www.sigfox.com/en">Sigfox</a>, <a href="https://it.wikipedia.org/wiki/Narrowband_IoT">NB</a> e rete cellulare(2G/3G/4G). La scelta tra questi sistemi avviene principalmente in base alla copertura, alla posizione geografica del dispositivo IoT e ai costi di gestione.</p>
<p>Questo articolo si basa sull&#8217;utilizzo di una Arduino Sim e una scheda Arduino MKR GSM 1400.</p>
<p><strong>La Arduino SIM può essere utilizzata solamente con Arduino Cloud.</strong></p>
<h1>Come attivare la Sim Arduino</h1>
<p>Quando riceviamo la sim Arduino, prima di poterla utilizzare, dobbiamo procedere alla sua attivazione. Sulla custodia della sim viene riportato un link (<a href="https://store.arduino.cc/digital/sim/activation">https://store.arduino.cc/digital/sim/activation</a>) che porta ad una pagina web in cui è possibile inserire il codice <strong>ICCID</strong> presente sulla sim:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6269" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/Arduino-Sim.jpg" alt="Arduino Sim" width="500" height="415" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/Arduino-Sim.jpg 500w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/Arduino-Sim-300x249.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/Arduino-Sim-150x125.jpg 150w" sizes="auto, (max-width: 500px) 100vw, 500px" /></p>
<p>Dopo aver inserito il codice clicchiamo sul pulsante NEXT. Nella pagina successiva, andremmo a leggere e accettare i termini di utilizzo (<strong>ARDUINO SIM TERMS AND CONDITIONS</strong>). Clicchiamo nuovamente sul pulsante NEXT per confermare.</p>
<p>Nella pagina successiva ci sarà un riepilogo sulle informazioni del nostro account e sul costo del servizio. Continuiamo cliccando sul pulsante NEXT. Nella pagina successiva dovremmo inserire i dati di pagamento per poi procedere cliccando sul pulsante <strong>Complete Payment</strong>.</p>
<p>La sim a questo punto è in fase di attivazione e prima di utilizzarla dovremmo attendere una mail di conferma.</p>
<h1>Come gestire la Arduino SIM</h1>
<p>Per verificare le impostazioni e il traffico dati della nostra Arduino SIM dobbiamo andare sul <strong>device manager</strong> (<a href="https://create.arduino.cc/devices/">https://create.arduino.cc/devices/</a>). Scorrendo e arrivando in fondo alla pagina, vedremmo la nostra sim e il suo stato.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6270" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_gestione.jpg" alt="Gestione arduino sim" width="500" height="355" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_gestione.jpg 500w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_gestione-300x213.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_gestione-150x107.jpg 150w" sizes="auto, (max-width: 500px) 100vw, 500px" /></p>
<p>Per i dettagli è sufficiente cliccare sull&#8217;icona della sim attiva:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6271" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_det.jpg" alt="Dettagli utilizzo sim card arduino" width="700" height="253" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_det.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_det-300x108.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_det-150x54.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/arduino_sim_det-585x211.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>In questa pagina troviamo anche delle informazioni che dovranno essere inserite nel codice dello sketch che andremmo a scrivere:</p>
<table id="sim_data" align="center">
<tbody>
<tr>
<td>APN</td>
<td>prepay.pelion</td>
</tr>
<tr>
<td>Username</td>
<td>arduino</td>
</tr>
<tr>
<td>Password</td>
<td>arduino</td>
</tr>
<tr>
<td>Pin</td>
<td>0000</td>
</tr>
</tbody>
</table>
<h1>Aggiungere una scheda al Device Manager</h1>
<p>Dopo aver attivato la <strong>Arduino SIM</strong> dobbiamo associare nel <strong>Device Manager</strong> (<a href="https://create.arduino.cc/devices/">https://create.arduino.cc/devices/</a>) una <strong>scheda Arduino</strong> che potrà interagire con il cloud Arduino. Le schede abilitate all&#8217;uso del cloud Arduino sono le seguenti:</p>
<ul>
<li>MKR 1000</li>
<li>MKR WiFi 1010</li>
<li>MKR GSM 1400</li>
<li>MKR NB 1500</li>
<li>Nano 33 IoT</li>
<li>MKR WAN 1300</li>
<li>MKR WAN 1310</li>
</ul>
<p>Nel mio caso utilizzerò una MKR GSM 1400.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6281" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_new_board.jpg" alt="Add new booard to cloud" width="700" height="327" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_new_board.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_new_board-300x140.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_new_board-150x70.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/add_new_board-585x273.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Clicchiamo sull&#8217;icona <strong>ADD NEW BOARD</strong>. Verrà caricata una pagina con una procedura guidata che permetterà di associare la nostra scheda al <strong>Device Manager</strong>.</p>
<p>Nella prima pagina della procedura guidata, selezioniamo la scheda da utilizzare:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6282" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/select_board.jpg" alt="select board mkr gsm 1400" width="700" height="368" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/select_board.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/select_board-300x158.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/select_board-150x79.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/select_board-585x308.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>clicchiamo sull&#8217;icona Arduino MKT GSM 1400. Nella schermata successiva, vengono indicate le fasi per configurare la MKR GSM 1400:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6284" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400.jpg" alt="mkr gsm 1400" width="700" height="334" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400-300x143.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400-150x72.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400-585x279.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Clicchiamo sul pulsante START per andare avanti. La prima fase della procedura guidata indica che dobbiamo scaricare il plugin <strong>Arduino Create Agent</strong>, il cui compito è quello di mettere in comunicazione la scheda collegata al pc con la procedura di configurazione on line.</p>
<p>Clicchiamo sul pulsante <strong>DOWNLOAD</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6285" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin.jpg" alt="download arduino create agent" width="700" height="344" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin-300x147.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin-150x74.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin-585x287.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Una volta cliccato sul pulsante, la procedura mostra che dopo aver terminato il download del file, dobbiamo eseguire un doppio click su di esso e seguire le istruzioni:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6286" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin_1.jpg" alt="install arduino agent" width="700" height="324" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin_1.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin_1-300x139.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin_1-150x69.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/download_plugin_1-585x271.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Dopo l&#8217;installazione dell&#8217;<strong>Arduino Create Agent</strong>, la procedura guidata indicherà che la comunicazione con il plugin è avvenuta con successo:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6287" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/ACA_install_ok.jpg" alt="install aca ok" width="700" height="322" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/ACA_install_ok.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/ACA_install_ok-300x138.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/ACA_install_ok-150x69.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/ACA_install_ok-585x269.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Andiamo avanti cliccando sul pulsante <strong>NEXT</strong>. Nella schermata successiva viene richiesto di collegare la scheda al pc. Quindi procediamo collegando, tramite cavo usb, la scheda MKR GSM 1400 al nostro computer:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6288" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/usb_gsm_1400.jpg" alt="usb gsm 1400" width="700" height="286" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/usb_gsm_1400.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/usb_gsm_1400-300x123.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/usb_gsm_1400-150x61.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/usb_gsm_1400-585x239.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Dopo qualche istante il plug <strong>Arduino Create Agent</strong>, aggiornerà la procedura guidata on line che la scheda MKR 1400 è stata collegata al computer.</p>
<p>A questo punto otterremo la seguente schermata dove assoceremmo un nome alla nostra scheda:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6289" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400_name.jpg" alt="gsm 1400 board name" width="700" height="327" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400_name.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400_name-300x140.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400_name-150x70.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_1400_name-585x273.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Inseriamo un nome identificativo, ad esempio gsm_1400 e andiamo avanti cliccando sul pulsante NEXT.</p>
<p>Ora la procedura indica se vogliamo configurare il <strong>Crypto Chip</strong> presente nella MKR GSM 1400. Questa procedura è importante perché aumenta il livello di sicurezza della comunicazione tra la scheda e l&#8217;Arduino Cloud.</p>
<p>Clicchiamo su CONFIGURE e attendiamo la fine della configurazione del Crypto Chip.</p>
<p>Nella schermata successiva ci viene chiesto di inserire la scheda SIM. Io in questa fase ho scollegato la scheda dalla porta usb, ho inserito la sim e ricollegato la scheda alla porta usb.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6290" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/insert_sim.jpg" alt="insert arduino sim" width="700" height="327" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/insert_sim.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/insert_sim-300x140.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/insert_sim-150x70.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/insert_sim-585x273.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Quindi clicchiamo nuovamente sul pulsante NEXT.</p>
<p>Nella schermata successiva viene visualizzato uno sketch di esempio. Lasciamo questo codice invariato e clicchiamo sul pulsante <strong>ENTER GSM DATA</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6291" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_data.jpg" alt="arduino enter gsm data" width="700" height="341" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_data.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_data-300x146.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_data-150x73.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/gsm_data-585x285.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Ora viene richiesta la compilazione dei campi relativi ai parametri della Arduino SIM. <a href="#sim_data">Questi parametri</a> gli abbiamo già incontrati quando abbiamo configurato la Arduino SIM.</p>
<p>Inseriamoli nei relativi campi e clicchiamo sul pulsante UPLOAD</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6295" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/upload.jpg" alt="upload sketch" width="700" height="341" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/upload.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/upload-300x146.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/upload-150x73.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/upload-585x285.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Terminato l&#8217;upload dello sketch sulla Arduino GSM 1400, la procedura guidata prova a stabilire una connessione con la scheda utilizzando la rete gsm:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6296" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/iot_cloud.jpg" alt="iot connection to arduino cloud" width="700" height="283" /></p>
<p>Se tutto funziona correttamente otterremo la schermata del Network Monitor:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6297" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/network_monitor.jpg" alt="Network monitor" width="700" height="337" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/network_monitor.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/network_monitor-300x144.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/network_monitor-150x72.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/network_monitor-585x282.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>In questa schermata possiamo accendere o spegnere il led on board della MKR GSM 1400. Scrivendo sulla textbox la stringa ON e cliccando sul bottone SEND potremo osservare che sulla scheda il led viene effettivamente acceso.<br />
Per spegnerlo sarà sufficiente inserire la stringa OFF e premere nuovamente sul bottone SEND.</p>
<p>Terminiamo la procedura guidata cliccando sul pulsante PLAY.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6299" src="https://logicaprogrammabile.it/wp-content/uploads/2020/04/finish.jpg" alt="arduino cloud " width="700" height="348" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/04/finish.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/finish-300x149.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/finish-150x75.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/04/finish-585x291.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Nel prossimo articolo andremmo a creare una THING utilizzando l&#8217;Arduino cloud e a scrivere del codice per spedire o ricevere dei dati.</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/scopri-come-configurare-arduino-sim-mkr-1400/">Scopri come configurare Arduino sim e MKR 1400</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/scopri-come-configurare-arduino-sim-mkr-1400/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmare usando Python</title>
		<link>https://logicaprogrammabile.it/programmare-utilizzando-python/</link>
					<comments>https://logicaprogrammabile.it/programmare-utilizzando-python/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 26 Mar 2020 11:08:28 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6197</guid>

					<description><![CDATA[<p>Imparare a programmare con Python La maggior parte dei dispositivi elettronici che ci circondano, dal piccolo elettrodomestico alla smartphone, hanno circuiti elettronici che vengono gestiti da un software. Anche se non ci accorgiamo, ogni giorno, direttamente o indirettamente, abbiamo a che fare con dei programmi...</p>
<p>The post <a href="https://logicaprogrammabile.it/programmare-utilizzando-python/">Programmare usando Python</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Imparare a programmare con Python</h1>
<p>La maggior parte dei dispositivi elettronici che ci circondano, dal piccolo elettrodomestico alla smartphone, hanno circuiti elettronici che vengono gestiti da un software. Anche se non ci accorgiamo, ogni giorno, direttamente o indirettamente, abbiamo a che fare con dei programmi che ci permettono di utilizzare in modo semplice, diversi dispositivi.</p>
<p>E&#8217; prevedibile che nel prossimo futuro i software saranno presenti in maniera ancora più massiccia, andando a governare ogni tipo dispositivo elettronico. Se consideriamo solo il mercato IoT, stimato in miliardi di dispositivi installati, capiamo quale sia l&#8217;importanza dello sviluppo software.</p>
<p><span id="more-6197"></span></p>
<p>Di conseguenza, imparare a programmare, ci mette nelle condizioni di capire meglio il funzionamento dei dispositivi elettronici. Questo produce inoltre altri vantaggi, infatti queste competenze potranno essere impiegate anche in altri numerosi campi, dallo sviluppo di applicazioni per pc a quelle per dispositivi mobili o per il web.</p>
<p>Attualmente ci sono decine di linguaggi di programmazione consigliati a chi volesse iniziare a programmare. Non esiste un linguaggio migliore di un altro, tutti hanno dei pro e dei contro e la scelta ricade dal tipo di software che vogliamo sviluppare e dalle risorse che abbiamo a disposizione.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6241" src="https://logicaprogrammabile.it/wp-content/uploads/2020/03/python_logo.png" alt="Logo Python" width="290" height="82" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/03/python_logo.png 290w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/python_logo-150x42.png 150w" sizes="auto, (max-width: 290px) 100vw, 290px" /></p>
<p>Il linguaggio più apprezzato per le persone che vogliono iniziare a programmare, ma che non hanno nessuna esperienza, è certamente <strong>Python</strong>. I vantaggi di questo linguaggio sono riassunti in questi pochi punti:</p>
<ul>
<li>semplice da imparare
<ul>
<li>(la sua sintassi è molto semplice da imparare e la scrittura del codice permette di capire subito la struttura del codice)</li>
</ul>
</li>
<li>multi piattaforma
<ul>
<li>(il software può essere scritto utilizzando diversi sistemi operativi e può girare in tantissimi dispositivi, dai microcontrollori ai pc più potenti)</li>
</ul>
</li>
<li>open source</li>
<li>vasta community
<ul>
<li>(la community Python ci permette di imparare dall&#8217;esperienza fatta da altri utenti)</li>
</ul>
</li>
</ul>
<h2>Installare Python (su Windows)</h2>
<p>La prima cosa da fare è installare Python sul proprio pc. La procedura risulta molto semplice, è sufficiente andare sul sito ufficiale <a href="https://www.python.org/">Python.org</a>, cliccare sul link download e cliccare sul pulsante Download Python. Il pacchetto di installazione deve essere effettuato in base al proprio sistema operativo.</p>
<p>Una volta scaricato il file eseguibile, basta eseguirlo con un doppio clic e seguire le istruzioni del wizard.</p>
<p>Se tutto è andato a buon fine nel menu Start di Windows dovremmo avere una cartella con nome Python 3.8 (Il numero si riferisce alla versione installata e potrebbe differire a seconda della vostra installazione).<br />
All&#8217;interno di questa cartella ci sono due icone che si riferiscono alla documentazione Python e due icone che lanciano due programmi la <strong>REPL</strong> e <strong>l&#8217;Idle</strong>.</p>
<p>Il programma <strong>REPL</strong> è un ambiente a linea di comando che permette di eseguire i comandi Python. Questo è utile per provare dei comandi immediatamente per capirne il funzionamento.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6239" src="https://logicaprogrammabile.it/wp-content/uploads/2020/03/ReplIDE.jpg" alt="Repl python" width="794" height="507" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/03/ReplIDE.jpg 794w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/ReplIDE-300x192.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/ReplIDE-150x96.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/ReplIDE-768x490.jpg 768w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/ReplIDE-585x374.jpg 585w" sizes="auto, (max-width: 794px) 100vw, 794px" /></p>
<p><strong>Idle</strong> invece è un editor che ci permette di scrivere i programmi Python, di poterli salvare ed eseguire.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6240" src="https://logicaprogrammabile.it/wp-content/uploads/2020/03/Idle.jpg" alt="Python IDE Editor" width="687" height="448" srcset="https://logicaprogrammabile.it/wp-content/uploads/2020/03/Idle.jpg 687w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/Idle-300x196.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/Idle-150x98.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2020/03/Idle-585x381.jpg 585w" sizes="auto, (max-width: 687px) 100vw, 687px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/programmare-utilizzando-python/">Programmare usando Python</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/programmare-utilizzando-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Convertitore A/D MCP3201</title>
		<link>https://logicaprogrammabile.it/convertitore-a-d-mcp3201/</link>
					<comments>https://logicaprogrammabile.it/convertitore-a-d-mcp3201/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 04 Feb 2019 07:00:13 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[ADC]]></category>
		<category><![CDATA[MCP3201]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=5958</guid>

					<description><![CDATA[<p>Aggiungere canali ADC ad Arduino UNO Arduino UNO dispone di 6 canali ADC che permettono di acquisire segnali analogici con una risoluzione di 10 bit. Questo significa che il dato analogico può essere espresso con un valore digitale compreso tra 0 e 1024 ( 2^10=1024)....</p>
<p>The post <a href="https://logicaprogrammabile.it/convertitore-a-d-mcp3201/">Convertitore A/D MCP3201</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Aggiungere canali ADC ad Arduino UNO</h1>
<p>Arduino UNO dispone di 6 canali ADC che permettono di acquisire segnali analogici con una risoluzione di 10 bit. Questo significa che il dato analogico può essere espresso con un valore digitale compreso tra 0 e 1024 ( 2^10=1024). Nella maggior parte dei tutorial che ho scritto la risoluzione di 10 bit è stata più che sufficiente per acquisire i segnali proveniente dai sensore analogici che usai.</p>
<p>Capita però che in particolari casi abbiamo bisogno di avere una risoluzione maggiore e piuttosto che cambiare scheda, è possibile utilizzare un convertitore analogico digitale esterno, impiegando un integrato apposito.</p>
<p>Gli ADC possono avere uno o più canali, risoluzioni e velocità di campionamento differenti. Quale scegliere dipende sostanzialmente dalle specifiche di progetto.<br />
In uno degli <a href="https://logicaprogrammabile.it/arduino-usare-integrato-pcf8591/">articoli precedenti</a> ho utilizzato l&#8217;integrato PCF8591. Questo integrato ha 4 porte ADC a 8 bit e 1 porta DAC.</p>
<p>In questo articolo invece andremmo ad utilizzare l&#8217;integrato MCP3201 che ha un canale con risoluzione di 12 bit.</p>
<p><span id="more-5958"></span>Il convertitore A/D MCP3201</p>
<p>Questo convertitore a singolo canale di tipo sample &amp; hold, viene interfacciato con il microcontrollore tramite bus SPI. Nella figura seguente viene illustrato lo schema a blocchi.</p>
<p><figure id="attachment_6018" aria-describedby="caption-attachment-6018" style="width: 442px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6018 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/mcp3201.png" alt="Convertitore analogico digitale MCP3201" width="442" height="396" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/mcp3201.png 442w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/mcp3201-300x269.png 300w" sizes="auto, (max-width: 442px) 100vw, 442px" /><figcaption id="caption-attachment-6018" class="wp-caption-text">Convertitore analogico digitale MCP3201</figcaption></figure></p>
<p>L&#8217;integrato MCP3201 ha un range di tensioni di lavoro che vanno da 2.7 V a 5.5 Vdc, la corrente di lavoro è di circa 300uA mentre in standby assorbe circa 500nA, quindi si presta in molte applicazioni dove il risparmio energetico è fondamentale.</p>
<p>Nella figura seguente viene proposto lo schema elettrico del circuito di prova.</p>
<p><figure id="attachment_6022" aria-describedby="caption-attachment-6022" style="width: 603px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class=" wp-image-6022" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201.png" alt="Collegamenti tra arduino uno e mcp3201" width="603" height="426" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201.png 747w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201-300x212.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/Arduino_mcp3201-585x413.png 585w" sizes="auto, (max-width: 603px) 100vw, 603px" /><figcaption id="caption-attachment-6022" class="wp-caption-text">Collegamenti Arduino UNO MCP3201</figcaption></figure></p>
<p>La prima cosa da notare è che la linea MOSI (pin 11 di Arduino UNO) del bus SPI non viene utilizzata. Questo perchè per ricevere i dati dall&#8217;MCP3201 viene utilizzata la line CS e il segnale di clock del bus SPI. Nella figura seguente viene mostrato il grafico dei timing delle linee CS, CLK e Dout:</p>
<p><figure id="attachment_6026" aria-describedby="caption-attachment-6026" style="width: 590px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-6026" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing.png" alt="MCP3201 timing" width="590" height="184" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing.png 590w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing-300x94.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing-585x182.png 585w" sizes="auto, (max-width: 590px) 100vw, 590px" /><figcaption id="caption-attachment-6026" class="wp-caption-text">Andamento dei segnali MCP3201</figcaption></figure></p>
<p>Il microcontrollore pone a livello basso la linea CS per avviare la comunicazione con l&#8217;integrato MCP3201. A questo punto il segnale di clock generato dal microcontrollore viene utilizzato per avviare la conversione analogico digitale. Nella figura seguente viene illustrato dettagliatamente il ciclo di conversione e di trasferimento dei dati.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6028" src="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato.png" alt="ADC MCP 3201 timing dettagliato" width="724" height="280" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato.png 724w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato-300x116.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/01/MCP3201_Timing_Dettagliato-585x226.png 585w" sizes="auto, (max-width: 724px) 100vw, 724px" /></p>
<p>Osserviamo il segnale di clock, dopo il terzo impulso è disponibile sulla linea Dout il bit più significativo (MSB) del dato analogico. Gli impulsi seguenti del segnale di clock permettono di avere i restanti bit del dato digitale. Da notare che il bit B1 viene ripetuto al sedicesimo clock e deve essere rimosso quando andiamo a ricostruire il dato digitale del segnale analogico. Questo può essere fatto shiftando a destra tutti i bit di una posizione.</p>
<p>Terminata la lettura dei due bute il microcontrollore mette al livello alto la line CS.</p>
<h3>Il codice di esempio</h3>
<p>Il seguente codice permette di leggere il valore della conversione analogico digitale dell&#8217;integrato MCP3201</p>
<pre class="EnlighterJSRAW" data-enlighter-language="avrasm">#define ADC_SELECT 10

int PrimoByte = 0;
int SecondoByte = 0;
int Lettura = 0;

void setup() {

pinMode (ADC_SELECT, OUTPUT);

//init del MCP3201
digitalWrite(ADC_SELECT, 0);
delay(100);
digitalWrite(ADC_SELECT, 1);

//init seriale
Serial.begin(9600);
delay(100);

// init SPI
SPI.begin();
delay(100);
}

void loop() {

digitalWrite(ADC_SELECT, 0);
PrimoByte = SPI.transfer(0);
SecondoByte = SPI.transfer(0);
digitalWrite(ADC_SELECT, 1);

SPI.endTransaction();

Lettura = ((PrimoByte &amp;amp;amp; 0x1F) &amp;amp;lt;&amp;amp;lt; 8) | SecondoByte;

//elimino il bit di ridondanza
Lettura = Lettura &amp;amp;gt;&amp;amp;gt; 1;

Serial.print("Dato analogico= ");
Serial.println(Lettura);

delay(500);

}</pre>
<p>&nbsp;</p>
<p>Il costo dell&#8217;integrato mcp3201 è di circa 2.5€.</p>
<p>The post <a href="https://logicaprogrammabile.it/convertitore-a-d-mcp3201/">Convertitore A/D MCP3201</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/convertitore-a-d-mcp3201/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
