<?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>Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/</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.9.4</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/</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>Il miglior modo per iniziare a programmare Arduino</title>
		<link>https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/</link>
					<comments>https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Fri, 11 Jun 2021 17:45:41 +0000</pubDate>
				<category><![CDATA[CorsoArduino]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[grove]]></category>
		<category><![CDATA[kit]]></category>
		<category><![CDATA[sensori]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6639</guid>

					<description><![CDATA[<p>Arduino Sensor Kit per imparare a programmare Arduino Se hai intenzione di imparare a programmare Arduino e non hai tante nozioni di elettronica puoi acquistare l&#8217;Arduino Sensor Kit. Questo kit permette i dedicarsi totalmente alla stesura del codice senza preoccuparsi di conoscere il modo corretto...</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/">Il miglior modo per iniziare a programmare Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Arduino Sensor Kit per imparare a programmare Arduino</h1>
<p>Se hai intenzione di imparare a programmare <strong>Arduino</strong> e non hai tante nozioni di elettronica puoi acquistare l&#8217;<strong>Arduino Sensor Kit</strong>.</p>
<p>Questo kit permette i dedicarsi totalmente alla stesura del codice senza preoccuparsi di conoscere il modo corretto per collegare i componenti e i sensori alla Arduino UNO.</p>
<p>Un vantaggio enorme che permette di abbassare la curva di apprendimento.</p>
<p>Molte persone hanno il <strong>desiderio di programmare</strong> una scheda Arduino, ma dopo aver comprato l&#8217;hardware necessario, iniziano ben presto a trovare difficoltà nella realizzazione dei collegamenti, per poi finire di abbandonare tutto nel cassetto della propria scrivania.</p>
<p><span id="more-6639"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6648" src="https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default.jpg" alt="Seed Studio Arduino Sensor Kit" width="520" height="330" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default.jpg 520w, https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/06/seeed-bundle_00.default-150x95.jpg 150w" sizes="auto, (max-width: 520px) 100vw, 520px" /></p>
<p>Con l&#8217;<strong>Arduino Sensor Kit</strong> invece, devi dedicarti solamente ad acquisire esperienza nella programmazione e questo permette di avere delle piccole soddisfazioni che non fanno spegnere la voglia di imparare a utilizzare una scheda Arduino.</p>
<p>Il kit sviluppato in collaborazione con <a href="https://www.seeedstudio.com/">Seed Studio</a> viene venduto in <a href="https://store.arduino.cc/sensor-kit-base">versione base al costo di circa 28€</a> e in <a href="https://store.arduino.cc/sensor-kit-bundle">versione bundle con una  scheda Arduino UNO</a> per una spesa di poco inferiore ai 50€. </p>
<p>La Sensor Kit è compatibile con i sistema <a href="https://www.seeedstudio.com/category/Grove-c-1003.html?cat=890">Grove</a> ideato da Seed Studio, rendendola quindi espandibile con centinaia di moduli pre-assemblati pronti all&#8217;uso dandoti così la possibilità di provare ad utilizzare nuovi sensori o attuatori.</p>
<p>Per semplificare ulteriormente l&#8217;uso è stata sviluppata una libreria che con poche righe di codice puoi scrivere subito i primi programmi e se ancora non bastasse puoi trovare tutte le risorse sul sito <a href="https://sensorkit.arduino.cc/">dedicato (Sensor Kit arduino.cc)</a> con tutti gli esempi di codice da utilizzare immediatamente!</p>
<p>Buon divertimento e buon codice!!</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/">Il miglior modo per iniziare a programmare Arduino</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/arduino-sensor-kit-miglior-modo-programmare-arduino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pi Pico usare gli interrupt</title>
		<link>https://logicaprogrammabile.it/pi-pico-usare-gli-interrupt/</link>
					<comments>https://logicaprogrammabile.it/pi-pico-usare-gli-interrupt/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 15 Mar 2021 07:00:49 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[Interrupt]]></category>
		<category><![CDATA[Sistema Allarme]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6605</guid>

					<description><![CDATA[<p>Come gestire un interrupt con la Raspberry Pi Pico In un precedente articolo, utilizzando Arduino UNO avevamo parlato degli interrupt, spiegando cosa sono e come gestirli. Anche la Raspberry Pi Pico, come la maggior parte dei microcontrollori è in grado di gestire gli interrupt. Utilizzando...</p>
<p>The post <a href="https://logicaprogrammabile.it/pi-pico-usare-gli-interrupt/">Pi Pico usare gli interrupt</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Come gestire un interrupt con la Raspberry Pi Pico</h2>
<p>In un precedente articolo, utilizzando <strong>Arduino UNO</strong> avevamo <a href="https://logicaprogrammabile.it/progetti-arduino-gestione-degli-interrupt/">parlato degli interrupt</a>, spiegando cosa sono e come gestirli. Anche la <a href="https://www.raspberrypi.org/products/raspberry-pi-pico/">Raspberry Pi Pico</a>, come la maggior parte dei microcontrollori è in grado di gestire gli interrupt. Utilizzando il linguaggio <a href="http://docs.micropython.org/en/latest/">Micropython</a> questa operazione diventa molto semplice.</p>
<p>Questo meccanismo è molto utile perché sostituisce il <a href="https://it.wikipedia.org/wiki/Polling_(informatica)">meccanismo di polling</a> che in un microcontrollore può essere molto svantaggioso. Ad esempio se devo controllare ciclicamente lo stato di un ingresso non posso mettere il microcontrollore in sleep mode perchè andrei a fermare il controllo del pin mentre un interrupt viene gestito dall&#8217;hardware e quindi è possibile superare questo limite.</p>
<p>Nel caso della Pico, programmata usando Micropython non sono sicuro se questa funzione sia disponibile anche quando il microcontrollore è in sleep mode.</p>
<p><span id="more-6605"></span></p>
<h2>Gestire le interruzioni</h2>
<p>Come accade per Arduino dobbiamo definire una funzione (che verrà richiamata quando avviene l&#8217;evento di interrupt) e definire un pin capace di gestire l&#8217;interrupt.</p>
<p>Nello schema seguente viene mostrato come ho eseguito i collegamenti di un circuito di test.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6610" src="https://logicaprogrammabile.it/wp-content/uploads/2021/03/Pico_irq.png" alt="Pico irq" width="452" height="351" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/03/Pico_irq.png 452w, https://logicaprogrammabile.it/wp-content/uploads/2021/03/Pico_irq-300x233.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/03/Pico_irq-150x116.png 150w" sizes="auto, (max-width: 452px) 100vw, 452px" /></p>
<p>Mentre il codice seguente descrive le istruzioni necessarie a gestire l&#8217;interrupt:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime

#definisco il pin 0 come ingresso
#su questo pin è collegato un pulsante con una
#resistenza di pull down
button = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_DOWN)
#definisco il pin 1 come uscita
#su questo pin collego un led e una resistenza da 330 ohm
led = machine.Pin(1, machine.Pin.OUT)

#definisco una funzione che verrà richiamata quando
#viene scatenato l'interrupt
def ev_handler(pin):
    print("bottone premuto")
    
#associo al pin in ingresso la funzione di interrupt
#l'evento videne generato usando il parametro RISING
button.irq(trigger=machine.Pin.IRQ_RISING, handler=ev_handler)

#loop che fa blinkare il led
while True:
    led.toggle()
    utime.sleep(1)</pre>
<p>Dopo le dichiarazione dei pi e della funzione il codice entra nel <strong>ciclo while</strong> ed esegue continuamente la commutazione del pin 1. Non appena premiamo il pulsante collegato al pin 0 viene generato un evento che interrompe il ciclo e richiamata la funzione <strong>ev_handler()</strong>. Terminata l&#8217;esecuzione del codice nella funzione <strong>ev_handler()</strong> viene ripresa l&#8217;esecuzione del codice del ciclo <strong>while()</strong>.</p>
<p>Da notare che l&#8217;interruzione non è asincrona quindi il codice nella funzione <strong>ev_handler()</strong> deve essere il più rapido possibile per non impattare sul codice del ciclo while().</p>
<p>The post <a href="https://logicaprogrammabile.it/pi-pico-usare-gli-interrupt/">Pi Pico usare gli interrupt</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/pi-pico-usare-gli-interrupt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Il miglior progetto timelapse camera con Raspberry Pi Zero</title>
		<link>https://logicaprogrammabile.it/miglior-progetto-timelapse-camera-raspberry-pi-zero-picam/</link>
					<comments>https://logicaprogrammabile.it/miglior-progetto-timelapse-camera-raspberry-pi-zero-picam/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 01 Mar 2021 07:00:04 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[raspberry]]></category>
		<category><![CDATA[Timelapse]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6334</guid>

					<description><![CDATA[<p>Timplapse con registrazione circolare I progetti timelapse basati su schede Raspberry Pi sono numerosi, ben documentati e replicabili. Perchè quindi creare l&#8217;ennesimo progetto camera timelapse? La mia esigenza è quella di creare un sistema che scatta delle fotografia ad intervalli regolari, ma con la possibilità...</p>
<p>The post <a href="https://logicaprogrammabile.it/miglior-progetto-timelapse-camera-raspberry-pi-zero-picam/">Il miglior progetto timelapse camera con Raspberry Pi Zero</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Timplapse con registrazione circolare</h1>
<p>I progetti timelapse basati su schede Raspberry Pi sono numerosi, ben documentati e replicabili. Perchè quindi creare l&#8217;ennesimo progetto camera timelapse?</p>
<p>La mia esigenza è quella di creare un sistema che scatta delle fotografia ad intervalli regolari, ma con la possibilità di registrarle in modo circolare. Cosa significa registrazione circolare?<br />
Il classico timelapse esegue un numero continuo di scatti. Il timelapse circolare invece, dopo aver raggiunto un numero massimo di scatti continua la sequenza di registrazione sovrascrivendo le foto meno recenti.</p>
<p>Questo sistema ha il vantaggio di non andare mai a saturare la memoria e quindi si adatta in tutte quelle situazioni in cui non possiamo andare spesso a scaricare le fotografie.</p>
<p>Infatti questo sistema è utile quando viene installato in zone remote e quando non abbiamo la certezza di andare a scaricare le foro in maniera regolare avendo la certezza che la registrazione saturerà la memoria del Raspberry.</p>
<p><span id="more-6334"></span></p>
<p>Nel dispositivo che ho realizzato ho inserito anche una serie di pulsanti in modo da avere un sistema gestire il software senza usare l&#8217;interfaccia grafica.</p>
<p>Lo scarico dei dati avviene utilizzando dei pulsanti che permettono di stoppare il timelapse, trasferire i files sulla pen drive e riprendere il ciclo di funzionamento.</p>
<p>Nella figura seguente è possibile osservare lo schema elettrico.</p>
<p><figure id="attachment_6589" aria-describedby="caption-attachment-6589" style="width: 838px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6589 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/Timelapse_schema.png" alt="schema timelapse" width="838" height="471" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/Timelapse_schema.png 838w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/Timelapse_schema-300x169.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/Timelapse_schema-150x84.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/Timelapse_schema-768x432.png 768w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/Timelapse_schema-585x329.png 585w" sizes="auto, (max-width: 838px) 100vw, 838px" /><figcaption id="caption-attachment-6589" class="wp-caption-text"><strong>Schema elettrico di collegamento</strong></figcaption></figure></p>
<p>I quattro ingressi del Raspberry sono normalmente bassi (resistenze da 10k collegate a massa), premendo un pulsante porteremmo la 3.3Vdc sul pin di ingresso. I due led invece servono per avere delle indicazioni luminose sull&#8217;operazione che il software sta eseguendo.</p>
<p><figure id="attachment_6592" aria-describedby="caption-attachment-6592" style="width: 700px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6592 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam1.jpg" alt="pi zero cam" width="700" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam1.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam1-300x172.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam1-150x86.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam1-585x336.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /><figcaption id="caption-attachment-6592" class="wp-caption-text"><strong>Pi Zero cam timelapse &#8211; lato componenti</strong></figcaption></figure></p>
<p><figure id="attachment_6591" aria-describedby="caption-attachment-6591" style="width: 394px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6591 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam.jpg" alt="Pi Zero cam timelapse" width="394" height="700" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam.jpg 394w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam-169x300.jpg 169w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam-84x150.jpg 84w" sizes="auto, (max-width: 394px) 100vw, 394px" /><figcaption id="caption-attachment-6591" class="wp-caption-text"><strong>Pi Zero cam timelapse &#8211; vista frontale</strong></figcaption></figure></p>
<p><figure id="attachment_6594" aria-describedby="caption-attachment-6594" style="width: 700px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6594 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam2.jpg" alt="zero cam" width="700" height="394" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam2.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam2-300x169.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam2-150x84.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam2-585x329.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /><figcaption id="caption-attachment-6594" class="wp-caption-text"><strong>Pi Zero cam timelapse &#8211; lato connettori</strong></figcaption></figure></p>
<p><figure id="attachment_6595" aria-describedby="caption-attachment-6595" style="width: 700px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6595 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam3.jpg" alt="Pi Zero cam timelapse" width="700" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam3.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam3-300x172.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam3-150x86.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam3-585x336.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /><figcaption id="caption-attachment-6595" class="wp-caption-text"><strong>Pi Zero cam timelapse &#8211; interfaccia di controllo</strong></figcaption></figure></p>
<p><figure id="attachment_6597" aria-describedby="caption-attachment-6597" style="width: 700px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6597 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam4.jpg" alt="zero cam timelapse" width="700" height="412" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam4.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam4-300x177.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam4-150x88.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/zero_cam4-585x344.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /><figcaption id="caption-attachment-6597" class="wp-caption-text"><strong>Pi Zero cam timelapse &#8211; montaggio su supporto</strong></figcaption></figure></p>
<p>Il codice scritto in Python permette di acquisisce e memorizzare le foto, gestisce i pulsanti i led e scaricare le foto sulla pen drive.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">from picamera import PiCamera
from os import system
import shutil
import time
import RPi.GPIO as GPIO
import os.path
import os

src_folder = "/home/pi/PythonProject/tl_pics/"
dest_folder = "/media/pi/logicapro/foto"

StartTL = True
AutoStart = True

i = 0
loop = False
newloop = False

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(19, GPIO.IN)
GPIO.setup(26, GPIO.IN)
GPIO.setup(4, GPIO.IN)
GPIO.setup(17, GPIO.IN)

GPIO.setup(27, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)

#led rosso on giallo off
GPIO.output(27, GPIO.HIGH)
GPIO.output(22, GPIO.LOW)

camera = PiCamera()
camera.resolution= (1024,768)

pics_id = open('/home/pi/PythonProject/PicsIndex.dat')
i = int(pics_id.read())
pics_id.close()

if (i&gt;0):
    loop=True

def StopTL(channel):
    global StartTL
    global AutoStart
        
    print("STOP TL")
    
    if StartTL == True:
        StartTL = False
        AutoStart = False
        print ("StartTL =", StartTL)
        print ("AutoStart =", AutoStart)
        GPIO.output(27, GPIO.HIGH)        
        time.sleep(1)    
        
            
def RunTL(channel):
    global StartTL
    global AutoStart
    
    print("START TL")
    
    if StartTL == False:
        StartTL = True
        AutoStart = True
        print ("StartTL =", StartTL)
        print ("AutoStart =", AutoStart)
        pics_id = open('/home/pi/PythonProject/PicsIndex.dat')
        i = int(pics_id.read())
        print ("RunTL i =", i)
        pics_id.close()
        GPIO.output(27, GPIO.LOW)
        GPIO.output(22, GPIO.LOW)        
        time.sleep(1)

GPIO.add_event_detect(17, GPIO.RISING, callback=StopTL, bouncetime=500)
GPIO.add_event_detect(4, GPIO.RISING, callback=RunTL, bouncetime=500)

while True:
    
    #primo pulsante
    if AutoStart == True:
        #start timelapse       
        while (StartTL):
            i += 1
            #print (i)
            if loop==True:
                #print ("i=", i)
                
                try:
                    t = time.localtime()
                    anno = str(t[0])
                    mese = str(t[1])
                    giorno = str(t[3])
                    #print(giorno + "-" + mese + "-" + anno)
                    #se esiste il file lo cancello
                    if (os.path.isfile('/home/pi/PythonProject/tl_pics/image{0:05d}.jpg'.format(i)) == True):
                        print("elimino file esistente ".format(i))
                        os.remove('/home/pi/PythonProject/tl_pics/image{0:05d}.jpg'.format(i))
                    
                    print("Eseguo shot " + str(i))
                    camera.capture('/home/pi/PythonProject/tl_pics/image{0:05d}.jpg'.format(i))
                    time.sleep(0.7)
                    GPIO.output(27, GPIO.HIGH)
                    time.sleep(0.3)
                    GPIO.output(27, GPIO.LOW)
                    #time.sleep(60)
                    pics_id = open('/home/pi/PythonProject/PicsIndex.dat', 'w')
                    pics_id.write(str(i))
                    pics_id.close()
                    print("pic_shot = " + str(i))
                except (e):
                    print("Errore shot " + str(i))
                    f = open('/home/pi/PythonProject/Error.txt', 'a')
                    f.write("Errore shot file " + str(e) + " ")
                    f.write(str(i) + "\n")
                    f.close()
                except:
                    print("Errore generico shot " + str(i))
                    f = open('/home/pi/PythonProject/Error.txt', 'a')
                    f.write("Errore shot file " + str(i) + " \n")
                    f.close()
            
                fc = open('/home/pi/PythonProject/CopyLog.txt', 'a')
                fc.write("Current shot ")
                fc.write(str(i) + "\n")
                fc.close()
            
                #attendi 2 minuti 60x2sec
                for tempo in range (60): #range(60):
                    GPIO.output(22, GPIO.HIGH)
                    time.sleep(0.1)
                    GPIO.output(22, GPIO.LOW)
                    time.sleep(1.9)
                    
                    if StartTL == False:
                        break
            
            #10080 5040
            if i &gt;= 4320:
                i=0                
                loop=True                
                print("NEW LOOP")
                time.sleep(1)
            
            if GPIO.input(17):
                break
            
        print ("Exit loop")    
    
    #terzo pulsante
    if GPIO.input(19):
        #crea un video dai file del timelapse
        print("Terzo Pulsante")
        GPIO.output(22, GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(22, GPIO.LOW)
        time.sleep(0.5)
        GPIO.output(22, GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(22, GPIO.LOW)
        time.sleep(0.5)
        GPIO.output(22, GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(22, GPIO.LOW)
        time.sleep(0.5)
        os.system("sudo reboot")
        
    #quarto pulsante
    #copia le foto nella cartella della pen drive
    if GPIO.input(26):
        GPIO.output(27, GPIO.HIGH)
        GPIO.output(22, GPIO.HIGH)
        time.sleep(1)
        try:
            print("Copia file in corso")
            time.sleep(1)

            src = os.listdir(src_folder)

            for files in src:
                GPIO.output(22, GPIO.HIGH)
                time.sleep(0.1)

                if (files.endswith(".jpg")):
                    shutil.copy("/home/pi/PythonProject/tl_pics/" + files, dest_folder + "/" + files)
                    print(files)
                    
                GPIO.output(22, GPIO.LOW)
                time.sleep(0.1)
            
            #fine copia files
            GPIO.output(27, GPIO.LOW)
            GPIO.output(22, GPIO.LOW)
            
            os.system("sudo umount /media/pi/logicapro")
            time.sleep(3)
            
            print("Copia file terminata")
            AutoStart=True
            StartTL = True
            
        except (IndexError):
            print("Errore copia file")
            AutoStart=False
            GPIO.output(22, GPIO.HIGH)
            GPIO.output(27, GPIO.HIGH)
            time.sleep(3)
            GPIO.output(22, GPIO.LOW)
            GPIO.output(27, GPIO.LOW)
            f = open('/home/pi/PythonProject/Error.txt', 'a')
            f.write("Errore copia file ")
            f.write(str(files) + "\n")
            f.close()
        except  (Exception, e):
            print("Errore generico")
            f = open('/home/pi/PythonProject/Error.txt', 'a')
            f.write("Errore generico " + str(e))
            f.write(str(files) + "\n")
            f.close()
            AutoStart=True
            StartTL = True
        

GPIO.cleanup()
</pre>
<p>I commenti nel codice illustrano come lavorano le istruzione Python.</p>
<p>Per la realizzazione ho scelto di utilizzare una Raspberry Pi ZERO, principalmente per il basso costo e le dimensioni contenute. La Pi camera può essere sostituita con la versione ir.</p>
<p>Per quanto riguarda l&#8217;alimentazione della scheda in zone remote è necessario un pannello solare, un regolatore di carica e una batteria dimensionati opportunamente per fornire la corrente per alimentare la Pi Zero e la Pi Camera.</p>
<p>The post <a href="https://logicaprogrammabile.it/miglior-progetto-timelapse-camera-raspberry-pi-zero-picam/">Il miglior progetto timelapse camera con Raspberry Pi Zero</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/miglior-progetto-timelapse-camera-raspberry-pi-zero-picam/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come usare pin IO digitali della Pico</title>
		<link>https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/</link>
					<comments>https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 15 Feb 2021 07:00:43 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[Pi Pico]]></category>
		<category><![CDATA[Speed Test]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6562</guid>

					<description><![CDATA[<p>Gestire linee IO della Pico La Pi Pico possiede 26 linee GPIO. Per poterle utilizzarle dobbiamo definirle come linee di ingresso o come linee di uscita, come avviene con Arduino con l&#8217;istruzione pinMode(). Realizziamo un semplice circuito come il seguente: In questo caso le istruzioni...</p>
<p>The post <a href="https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/">Come usare pin IO digitali della Pico</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p></p>
<h1>Gestire linee IO della Pico</h1>
<p>La Pi Pico possiede 26 linee GPIO. Per poterle utilizzarle dobbiamo definirle come linee di ingresso o come linee di uscita, come avviene con Arduino con l&#8217;istruzione pinMode().</p>
<figure id="attachment_6577" aria-describedby="caption-attachment-6577" style="width: 592px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6577 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout.jpg" alt="pico pinout" width="592" height="599" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout.jpg 592w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-296x300.jpg 296w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-148x150.jpg 148w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-80x80.jpg 80w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/pipo_pinout-585x592.jpg 585w" sizes="auto, (max-width: 592px) 100vw, 592px" /><figcaption id="caption-attachment-6577" class="wp-caption-text">pinout della raspberry pi pico</figcaption></figure>
<p>Realizziamo un semplice circuito come il seguente:</p>
<figure id="attachment_6579" aria-describedby="caption-attachment-6579" style="width: 395px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6579 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led.jpg" alt="led test gpio" width="395" height="415" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led.jpg 395w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led-286x300.jpg 286w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/blink_test_led-143x150.jpg 143w" sizes="auto, (max-width: 395px) 100vw, 395px" /><figcaption id="caption-attachment-6579" class="wp-caption-text">led collegato al GPIO 15 (pin 20 della scheda)</figcaption></figure>
<p><span id="more-6562"></span></p>
<p>In questo caso le istruzioni da utilizzare fanno parte del modulo machine, quindi la prima istruzione da usare e l&#8217;importazione del modulo:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine</pre>
<p>per definire un pin come uscita digitale utilizzeremo questa istruzione:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">led = machine.Pin(15, machine.Pin.OUT)</pre>
<p>L&#8217;oggetto led possiede il metodo value che permette di portare a livello alto o basso lo stato del pin:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">led.value(1) # mette alto il pin 15
led.value(0) # mette basso il pin 15</pre>
<p>Il classico blink del led si esegue con il seguente codice:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)

while(1):
    led.value(1) # uscita a livello logico alto
    utime.sleep(1) # pausa di 1 secondo
    led.value(0) # uscita a livello logico basso
    utime.sleep(1) # pausa di 1 secondo
    
</pre>
<h2>GPIO Speed Test</h2>
<p>Dal codice precedente, eliminando l&#8217;istruzione sleep() possiamo misurare la velocita massima di commutazione del pin</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">import machine
import utime

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)

while(1):
    led.toggle() # mette l'uscita alta e poi bassa </pre>
<p>ottenendo una frequenza di commutazione di circa 60,5 KHz ma che presenta una continua variazione del livello alto dell&#8217;onda di circa  +- 1.3uS</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6581" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione.jpg" alt="flutuazione" width="416" height="451" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione.jpg 416w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione-277x300.jpg 277w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/flutuazione-138x150.jpg 138w" sizes="auto, (max-width: 416px) 100vw, 416px" /></p>
<p>Questo fenomeno e tipico in tutti i microcontrollori che eseguono codice interpretato, queste latenze sono intrinseche e tipicamente tollerate in questi sistemi. Per avere tempistiche certe nell&#8217;esecuzione dei programmi dobbiamo usare codici compilati e ottimizzati per l&#8217;architettura del microcontrollore.</p>
<h2>Configurare un ingresso digitale</h2>
<figure id="attachment_6582" aria-describedby="caption-attachment-6582" style="width: 440px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6582 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button.jpg" alt="button pin in" width="440" height="498" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button.jpg 440w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button-265x300.jpg 265w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/test_button-133x150.jpg 133w" sizes="auto, (max-width: 440px) 100vw, 440px" /><figcaption id="caption-attachment-6582" class="wp-caption-text">pulsante sul pin 16 con resistenza di pull-up</figcaption></figure>
<p>allo stesso modo delle istruzioni viste in precedenza possiamo definire un pin in ingresso con il seguente codice:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)
#definisco il pin gpio 16 come ingresso
pulsante = machine.Pin(16, machine.Pin.IN)

while(1):
    if pulsante.value() == 0:
        print("pulsante premuto!")

        utime.sleep(0.2)
    <br />    # continuo a commutare il pin 15<br />    #la frequenza ora è di circa 26KHz
    led.toggle()

</pre>
<h2>Utilizzare un thread</h2>
<p>Lo svantaggio di avere delle latenze dovute alla presenza dell&#8217;interprete MicroPython può essere in parte compensato da un linguaggio ad alto livello che permette di scrivere il codice con un approccio moderno come quello dell&#8217;uso dei Thread.</p>
<p>Un thread è un processo che può essere eseguito in contemporanea (o quasi) con l&#8217;esecuzione di altro codice. Nell&#8217;esempio seguente il codice del thread controllerà quando premiamo il pulsante. Mentre il resto del programma continuerà a eseguirà le altre istruzioni.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime
import _thread

#creo una variabile globale che verrà usata in tutte le funzioni
global stato_pulsante
stato_pulsante = False

#definisco il pin gpio 15 come uscita
led = machine.Pin(15, machine.Pin.OUT)
#definisco il pin gpio 16 come ingresso
pulsante = machine.Pin(16, machine.Pin.IN)
<br />#creo una funzione che verrà gestita dal thread
def leggi_stato_pulsante():
    global stato_pulsante
    while True:<br />        # se premo il pulsante cambio il valore della <br />        # variabile globale
        if pulsante.value() == 0:
            stato_pulsante = True
            utime.sleep(0.2)
<br />#creo un thread e lo associo alla funzione precedentemente creata
_thread.start_new_thread(leggi_stato_pulsante, ())
<br />#questo è il codice del thread principale
while True:<br />    #controllo il valore della variabile globale
    if (stato_pulsante == True):
        print("pulsante premuto!")
        #reimposto la variabile globale a False
        global stato_pulsante
        stato_pulsante = False
    <br />    #continuo a eseguire la commutazione del pin 15
    led.toggle()</pre>
<p>L&#8217;effetto di questo codice è uguale al precedente ma la scrittura del codice rimane qualitativamente migliore.</p>
<p>&nbsp;</p><p>The post <a href="https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/">Come usare pin IO digitali della Pico</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/come-usare-pin-gpio-digitali-raspberry-pico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Caricare un programma MicroPython sulla Pi Pico</title>
		<link>https://logicaprogrammabile.it/caricare-programma-micropython-raspberry-pico/</link>
					<comments>https://logicaprogrammabile.it/caricare-programma-micropython-raspberry-pico/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 08 Feb 2021 07:00:42 +0000</pubDate>
				<category><![CDATA[Tutorial Python]]></category>
		<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[Pi Pico]]></category>
		<category><![CDATA[raspberry]]></category>
		<category><![CDATA[Sensore Temperatura]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6563</guid>

					<description><![CDATA[<p>Come programmare la Pi Pico con MicroPython Nello scorso articolo abbiamo visto come configurare la Raspberry Pi Pico per poter essere programmata utilizzando il linguaggio MicroPython. In particolare abbiamo installato e configurato Thonny e caricato l&#8217;interprete MicroPython sulla scheda Pico. In questo articolo vediamo come...</p>
<p>The post <a href="https://logicaprogrammabile.it/caricare-programma-micropython-raspberry-pico/">Caricare un programma MicroPython sulla Pi Pico</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come programmare la Pi Pico con MicroPython</h1>
<p>Nello <a href="https://logicaprogrammabile.it/programmare-configurare-raspberry-pi-pico-micropython/">scorso articolo abbiamo visto</a> come configurare la Raspberry Pi Pico per poter essere programmata utilizzando il linguaggio <strong>MicroPython</strong>. In particolare abbiamo installato e configurato <strong>Thonny</strong> e caricato l&#8217;interprete <strong>MicroPython</strong> sulla scheda <strong>Pico</strong>.</p>
<p>In questo articolo vediamo come scrivere il nostro primo programma <strong>MicroPython</strong> e come caricarlo sulla Pico.</p>
<p>Colleghiamo la Pi Pico alla porta usb del computer e lanciamo l&#8217;ide <strong>Thonny</strong>. Dopo qualche istante sulla finestra shell dovremmo vedere la finestra interattiva di <strong>Python (REPL)</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6566" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl.jpg" alt="" width="650" height="569" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl.jpg 650w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl-300x263.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl-150x131.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl-585x512.jpg 585w" sizes="auto, (max-width: 650px) 100vw, 650px" /></p>
<p>Utilizzando la finestra <strong>Shell</strong> è possibile eseguire direttamente dei semplici comandi. In questo modo è possibile testare delle funzioni o piccole parti di codice in modo molto veloce.</p>
<p><span id="more-6563"></span></p>
<p>Ad esempio digitiamo sulla <strong>Shell</strong> il seguente codice e premiamo invio</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">print("Ciao Mondo!! Questa è la mia prima istruzione in MicroPython")</pre>
<p>otterremo la risposta della <strong>Pico</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6567" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl_print.jpg" alt="" width="700" height="195" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl_print.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl_print-300x84.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl_print-150x42.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/repl_print-585x163.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>niente di entusiasmante! Ma comunque un semplice test per verificare che la scheda stia eseguendo il codice Python.</p>
<h2>Scrivere un semplice programma</h2>
<p>Nell&#8217;editor dei Thonny andiamo a scrivere delle istruzioni un po più utili. Sappiamo che il chip RP2040 è dotato di un sensore di temperature collegato all&#8217;ingresso analogico ADC4, quindi con il codice seguente andiamo a prelevare la tensione sulla linea ADC4 per poi convertirla in un valore espresso in gradi centigradi:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import machine
import utime

sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)

while True:
    reading = sensor_temp.read_u16() * conversion_factor
    temperature = 27 - (reading - 0.706)/0.001721
        
    print(temperature)
    
    utime.sleep(2)</pre>
<p>Il codice è stato copiato dal libro <a href="https://hackspace.raspberrypi.org/books/micropython-pico">Get started with MicroPython</a>.</p>
<p>Premiamo il pulsante<strong> Esegui lo script corrente (F5)</strong> per eseguire il programma. <strong>Thonny</strong> ci chiede dove vogliamo salvare il programma, salviamo sulla <strong>Raspberry Pi Pico</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6570" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/run_program.jpg" alt="" width="700" height="613" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/run_program.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/run_program-300x263.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/run_program-150x131.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/run_program-585x512.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Diamo un nome al nostro programma e premiamo sul pulsante <strong>OK</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6571" src="https://logicaprogrammabile.it/wp-content/uploads/2021/02/temp.jpg" alt="" width="700" height="613" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/02/temp.jpg 700w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/temp-300x263.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/temp-150x131.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/02/temp-585x512.jpg 585w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Non appena premiamo il pulsante <strong>OK</strong> la <strong>Raspberry Pi Pico</strong> inizierà ad eseguire il programma. Sulla finestra <strong>Shell</strong> potremmo osservare il valore della temperatura rilevata dal microprocessore.</p>
<p>&nbsp;</p>
<p>The post <a href="https://logicaprogrammabile.it/caricare-programma-micropython-raspberry-pico/">Caricare un programma MicroPython sulla Pi Pico</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/caricare-programma-micropython-raspberry-pico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmare la Raspberry Pi Pico con MicroPython</title>
		<link>https://logicaprogrammabile.it/programmare-configurare-raspberry-pi-pico-micropython/</link>
					<comments>https://logicaprogrammabile.it/programmare-configurare-raspberry-pi-pico-micropython/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 01 Feb 2021 07:00:55 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Pi Pico]]></category>
		<category><![CDATA[raspberry]]></category>
		<category><![CDATA[thonny]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6522</guid>

					<description><![CDATA[<p>Configurare e programmare la Pi Pico Dopo l&#8217;annuncio della produzione della Raspberry Pi Pico ho acquistato alcuni moduli per poterli testare e capire se questo nuovo microcontrollore potrà ritagliarsi una fetta importante nel mondo dei makers. A prima vista sono rimasto molto contento del form...</p>
<p>The post <a href="https://logicaprogrammabile.it/programmare-configurare-raspberry-pi-pico-micropython/">Programmare la Raspberry Pi Pico con MicroPython</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Configurare e programmare la Pi Pico</h2>
<p>Dopo l&#8217;annuncio della produzione della <strong>Raspberry Pi Pico</strong> ho acquistato alcuni moduli per poterli testare e capire se questo nuovo microcontrollore potrà ritagliarsi una fetta importante nel mondo dei makers.</p>
<p>A prima vista sono rimasto molto contento del form factor della <strong>PI Pico</strong> data la flessibilità di poterlo inserire in un proprio custom pcb,  della mancanza del power led (non capisco perchè nelle schede <strong>Arduino MKR</strong> sia presente questo led che non può essere disabilitato a meno che non si proceda a dissaldarlo!) utile nei progetti a basso consumo. Inoltre un pin del microcontrollore (GPIO23) va a gestire il Power Saving del convertitore DC/DC.</p>
<p>Il led sulla scheda è furbamente collegato ad un pin del microcontrollore, dando la possibilità al programmatore di tenerlo acceso o meno. Non è presente un pulsante di reset integrato certamente escluso per tenere basso il costo del prodotto (per resettare la scheda è sufficiente collegare un pulsante esterno).</p>
<p>Un altro punto di forza della Pi Pico è la possibilità di essere programmata con due linguaggi, <strong>Python (MicroPython)</strong> o <strong>C/C++</strong>.</p>
<p>Con <strong>MicroPython</strong> abbiamo una curva di apprendimento rapida, subito pronti a programmare la PI Pico con ambienti di sviluppo semplici come <strong>Thonny</strong> (disponibile per diversi sistemi operativi e preinstallato su Raspberry OS).</p>
<p>Con <strong>C/C++</strong> e con un completo <strong>SDK</strong>, possiamo spingerci a sviluppare programmi con performance elevate, di sfruttare tutta la potenza del microcontrollore <strong>RP2040</strong> e di avere ambienti più sviluppo professionali come <strong>Visual Studio Code</strong> o <strong>Eclipse</strong>.</p>
<h2>Utilizzare Thonny su Windows 10</h2>
<p><strong>Thonny</strong> è un ambiente di sviluppo integrato per principianti, preinstallato su <strong>Raspberry OS</strong> e disponibile anche per <strong>Windows</strong>, <strong>Mac</strong> e <strong>Linux</strong>. Dal sito <a href="https://thonny.org/">thonny.org</a> procediamo al download del software (versione 3.3.3 al momento in cui scrivo), versione per Windows. Terminato il download avviamo l&#8217;installazione lanciando l&#8217;eseguibile thonny-3.3.3.exe. Seguiamo le semplici istruzioni della procedura guidata:</p>
<p><figure id="attachment_6527" aria-describedby="caption-attachment-6527" style="width: 499px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6527 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-20.png" alt="Installazione di Thonny" width="499" height="392" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-20.png 499w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-20-300x236.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-20-150x118.png 150w" sizes="auto, (max-width: 499px) 100vw, 499px" /><figcaption id="caption-attachment-6527" class="wp-caption-text">Schermata di benvenuto &#8211; Installazione di Thonny IDE</figcaption></figure></p>
<p>&nbsp;</p>
<p><figure id="attachment_6528" aria-describedby="caption-attachment-6528" style="width: 498px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6528 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-21.png" alt="contratto thonny" width="498" height="390" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-21.png 498w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-21-300x235.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-21-150x117.png 150w" sizes="auto, (max-width: 498px) 100vw, 498px" /><figcaption id="caption-attachment-6528" class="wp-caption-text">Contratto di licenza</figcaption></figure></p>
<p>&nbsp;</p>
<p><figure id="attachment_6529" aria-describedby="caption-attachment-6529" style="width: 499px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6529 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-22.png" alt="Percorso installazione di thonny" width="499" height="391" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-22.png 499w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-22-300x235.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-22-150x118.png 150w" sizes="auto, (max-width: 499px) 100vw, 499px" /><figcaption id="caption-attachment-6529" class="wp-caption-text">Scelta del percorso di installazione</figcaption></figure></p>
<p>&nbsp;</p>
<p><figure id="attachment_6530" aria-describedby="caption-attachment-6530" style="width: 497px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6530 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-23.png" alt="creazione icona desktop" width="497" height="390" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-23.png 497w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-23-300x235.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-23-150x118.png 150w" sizes="auto, (max-width: 497px) 100vw, 497px" /><figcaption id="caption-attachment-6530" class="wp-caption-text">Creazione icona desktop di Thonny</figcaption></figure></p>
<p>&nbsp;</p>
<p><figure id="attachment_6531" aria-describedby="caption-attachment-6531" style="width: 498px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6531 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-25.png" alt="riepilogo installazione thonny" width="498" height="390" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-25.png 498w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-25-300x235.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-25-150x117.png 150w" sizes="auto, (max-width: 498px) 100vw, 498px" /><figcaption id="caption-attachment-6531" class="wp-caption-text">Riepilogo installazione di Thonny</figcaption></figure></p>
<p>&nbsp;</p>
<p><figure id="attachment_6532" aria-describedby="caption-attachment-6532" style="width: 497px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6532 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-26.png" alt="installazione" width="497" height="389" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-26.png 497w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-26-300x235.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-26-150x117.png 150w" sizes="auto, (max-width: 497px) 100vw, 497px" /><figcaption id="caption-attachment-6532" class="wp-caption-text">Installazione del programma Thonny</figcaption></figure></p>
<p>&nbsp;</p>
<p><figure id="attachment_6533" aria-describedby="caption-attachment-6533" style="width: 498px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6533 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-28.png" alt="installazione thonny" width="498" height="390" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-28.png 498w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-28-300x235.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-28-150x117.png 150w" sizes="auto, (max-width: 498px) 100vw, 498px" /><figcaption id="caption-attachment-6533" class="wp-caption-text">Installazione del programma Thonny</figcaption></figure></p>
<p>&nbsp;</p>
<p><figure id="attachment_6534" aria-describedby="caption-attachment-6534" style="width: 496px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6534 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-29.png" alt="installazione completata" width="496" height="390" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-29.png 496w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-29-300x236.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-29-150x118.png 150w" sizes="auto, (max-width: 496px) 100vw, 496px" /><figcaption id="caption-attachment-6534" class="wp-caption-text">Termine installazione del programma Thonny</figcaption></figure></p>
<p><figure id="attachment_6535" aria-describedby="caption-attachment-6535" style="width: 497px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6535 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-30.png" alt="conferma installazione" width="497" height="390" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-30.png 497w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-30-300x235.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-30-150x118.png 150w" sizes="auto, (max-width: 497px) 100vw, 497px" /><figcaption id="caption-attachment-6535" class="wp-caption-text">Conferma installazione di Thonny</figcaption></figure></p>
<p>Terminata l&#8217;installazione avviamo Thonny eseguendo un doppio clic sull&#8217;icona nel desktop.</p>
<p>Al primo avvio verrà richiesta la scelta della lingua da utilizzare nell&#8217;interfaccia grafica, selezioniamo quella che preferiamo e andiamo avanti premendo il pulsante <strong>Let&#8217;s go!</strong>:</p>
<p><figure id="attachment_6536" aria-describedby="caption-attachment-6536" style="width: 545px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6536 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-32.png" alt="lengiage selection" width="545" height="289" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-32.png 545w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-32-300x159.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-32-150x80.png 150w" sizes="auto, (max-width: 545px) 100vw, 545px" /><figcaption id="caption-attachment-6536" class="wp-caption-text">Seleziona la lingua dell&#8217;interfaccia</figcaption></figure></p>
<p>Dopo qualche istante vi ritroverete davanti l&#8217;interfaccia grafica di Thonny:</p>
<p><figure id="attachment_6537" aria-describedby="caption-attachment-6537" style="width: 799px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6537 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-33.png" alt="thonny" width="799" height="700" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-33.png 799w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-33-300x263.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-33-150x131.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-33-768x673.png 768w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Screenshot-33-585x513.png 585w" sizes="auto, (max-width: 799px) 100vw, 799px" /><figcaption id="caption-attachment-6537" class="wp-caption-text">interfaccia grafica di Thonny ide</figcaption></figure></p>
<h2>Caricare MycroPython sulla Pi Pico</h2>
<p>Per programmare la <strong>Pi Pico</strong> con <strong>Thonny</strong> è necessario caricare l&#8217;<strong>interprete MicroPython</strong>. Questa procedura è stata eseguita utilizzando Windows 10 versione 20H2. Colleghiamo la PI Pico alla porta usb del computer. La scheda viene riconosciuta dal sistema e viene avviata una procedura automatica di configurazione.</p>
<p>Clicchiamo, col pulsante destro del mouse, sul pulsante <strong>Start</strong>, dal menu contestuale scegliamo la voce <strong>Gestione Dispositivi</strong>. Sotto la voce <strong>Altri dispositivi</strong> dovrà essere presente l&#8217;elemento con nome <strong>RP2 Boot</strong>.</p>
<blockquote><p>In caso contrario rimuoviamo la scheda dalla porta usb, teniamo premuto il pulsante BOOTSEL della Pico e contemporaneamente ricolleghiamo la scheda alla porta usb.</p>
<p>Rilasciate il pulsante BOOTSEL.</p></blockquote>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6542" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Gestione_Dispositivi.png" alt="RP2 Boot" width="251" height="232" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Gestione_Dispositivi.png 251w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Gestione_Dispositivi-150x139.png 150w" sizes="auto, (max-width: 251px) 100vw, 251px" /></p>
<p>In <strong>Esplora risorse</strong> dovremmo anche avere una nuova unita disco chiamata <strong>RPI-RP2</strong>.</p>
<p>Portiamoci sul sito <strong>raspberrypi.org</strong>, nella sezione <a href="https://www.raspberrypi.org/documentation/pico/getting-started/">dedicata alla Pico scarichiamo Micropython</a> cliccando sul pulsante <strong>Download UF2 File</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6559" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/download_mp.jpg" alt="Pi Pico uf2 file" width="732" height="627" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/download_mp.jpg 732w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/download_mp-300x257.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/download_mp-150x128.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/download_mp-585x501.jpg 585w" sizes="auto, (max-width: 732px) 100vw, 732px" /></p>
<p>Ora copiamo il file <strong>pico_micropython_20210121.uf2</strong> sul disco <strong>RPI-RP2</strong>. Attendiamo la copia del file e il riavvio della scheda <strong>Pi Pico</strong>.</p>
<p><figure id="attachment_6548" aria-describedby="caption-attachment-6548" style="width: 380px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6548 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Copy_mp.png" alt="Coping micropython" width="380" height="131" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Copy_mp.png 380w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Copy_mp-300x103.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Copy_mp-150x52.png 150w" sizes="auto, (max-width: 380px) 100vw, 380px" /><figcaption id="caption-attachment-6548" class="wp-caption-text">Copia del file pico_micropython dentro il disco RPI-RP2</figcaption></figure></p>
<p><figure id="attachment_6547" aria-describedby="caption-attachment-6547" style="width: 451px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6547 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Coping_mp.png" alt="copia del file " width="451" height="288" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Coping_mp.png 451w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Coping_mp-300x192.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Coping_mp-150x96.png 150w" sizes="auto, (max-width: 451px) 100vw, 451px" /><figcaption id="caption-attachment-6547" class="wp-caption-text">Copia del file pico_micropython sulla Pi Pico</figcaption></figure></p>
<p>Controllando in gestione dispositivi dovremmo avere che la voce <strong>Altri Dispositivi-&gt; RP2 Boot</strong> viene eliminata e sostituita da una nuova periferica <strong>COM</strong>, nel mio caso la <strong>COM22</strong></p>
<p><figure id="attachment_6549" aria-describedby="caption-attachment-6549" style="width: 432px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6549 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Gestione_Dispositivi_COM.jpg" alt="nuova porta seriale" width="432" height="564" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Gestione_Dispositivi_COM.jpg 432w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Gestione_Dispositivi_COM-230x300.jpg 230w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Gestione_Dispositivi_COM-115x150.jpg 115w" sizes="auto, (max-width: 432px) 100vw, 432px" /><figcaption id="caption-attachment-6549" class="wp-caption-text">Creazione nuova porta seriale per la Pi Pico</figcaption></figure></p>
<h2>Configurazione dell&#8217;ambiente di sviluppo</h2>
<p>La versione 3.3.3 di <strong>Thonny</strong> ha già preinstallato il plug-in per comunicare con la <strong>Raspberry Pi Pico</strong>. E&#8217; sufficiente selezionare l&#8217;interprete dal menu posizionato in basso a destra della finestra principale:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6550" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/micropython.png" alt="micropython" width="850" height="358" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/micropython.png 850w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/micropython-300x126.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/micropython-150x63.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/micropython-768x323.png 768w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/micropython-585x246.png 585w" sizes="auto, (max-width: 850px) 100vw, 850px" /></p>
<p>Selezionando la voce <strong>MicroPython (Raspberry Pi Pico)</strong> permetterà a Thonny di collegarsi alla Pico attivando la comunicazione seriale con la Pico e mostrando l&#8217;interfaccia interattiva REPL.</p>
<p>Per selezionare la scheda e la porta COM manualmente è possibile farlo dal menu<strong> Esegui-&gt;Seleziona Interprete</strong>:</p>
<p><figure id="attachment_6556" aria-describedby="caption-attachment-6556" style="width: 525px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6556 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/seleziona_interprete.png" alt="interprete micropython" width="525" height="465" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/seleziona_interprete.png 525w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/seleziona_interprete-300x266.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/seleziona_interprete-150x133.png 150w" sizes="auto, (max-width: 525px) 100vw, 525px" /><figcaption id="caption-attachment-6556" class="wp-caption-text">Seleziona Interprete</figcaption></figure></p>
<p><figure id="attachment_6553" aria-describedby="caption-attachment-6553" style="width: 589px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6553 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete.png" alt="interprete micropython pi pico" width="589" height="508" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete.png 589w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete-300x259.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete-150x129.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete-585x505.png 585w" sizes="auto, (max-width: 589px) 100vw, 589px" /><figcaption id="caption-attachment-6553" class="wp-caption-text">tab interprete</figcaption></figure></p>
<p>Nel tab <strong>Interprete</strong> possiamo <strong>selezionare l&#8217;interprete</strong> e la <strong>porta COM</strong> della scheda Pi Pico:</p>
<p><figure id="attachment_6555" aria-describedby="caption-attachment-6555" style="width: 589px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6555 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_pico.png" alt="pi pico python" width="589" height="508" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_pico.png 589w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_pico-300x259.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_pico-150x129.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_pico-585x505.png 585w" sizes="auto, (max-width: 589px) 100vw, 589px" /><figcaption id="caption-attachment-6555" class="wp-caption-text">Seleziona interprete micropython per pi pico</figcaption></figure></p>
<p><figure id="attachment_6554" aria-describedby="caption-attachment-6554" style="width: 589px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6554 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_com.png" alt="com interptere" width="589" height="508" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_com.png 589w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_com-300x259.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_com-150x129.png 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/interprete_com-585x505.png 585w" sizes="auto, (max-width: 589px) 100vw, 589px" /><figcaption id="caption-attachment-6554" class="wp-caption-text">Seleziona porta Pi Pico</figcaption></figure></p>
<p>Nel prossimo articolo vedremmo come caricare il primo programma sulla Pi Pico</p>
<p>The post <a href="https://logicaprogrammabile.it/programmare-configurare-raspberry-pi-pico-micropython/">Programmare la Raspberry Pi Pico con MicroPython</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/programmare-configurare-raspberry-pi-pico-micropython/feed/</wfw:commentRss>
			<slash:comments>1</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>
	</channel>
</rss>
