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

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

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Tutorial Raspberry PI Archives</title>
	<link>https://logicaprogrammabile.it/category/tutorial-italiano-raspberry-pi/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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>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 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="(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 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="(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>Aggiungere un RTC al Raspberry PI</title>
		<link>https://logicaprogrammabile.it/aggiungere-rtc-ds3231-ds1307-raspberry-pi-offline/</link>
					<comments>https://logicaprogrammabile.it/aggiungere-rtc-ds3231-ds1307-raspberry-pi-offline/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 18 Jan 2021 07:00:35 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[Clock]]></category>
		<category><![CDATA[DS1307]]></category>
		<category><![CDATA[DS3231]]></category>
		<category><![CDATA[RTC]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6461</guid>

					<description><![CDATA[<p>RTC per applicazioni offline Data e ora del nostro Raspberry vengono sincronizzate all&#8217;avvio del sistema operativo tramite server NTP. In tutte le altre applicazioni dove non avete un accesso ad internet la data e l&#8217;ora sono impostate di default ma non corrisponderanno a valori corretti....</p>
<p>The post <a href="https://logicaprogrammabile.it/aggiungere-rtc-ds3231-ds1307-raspberry-pi-offline/">Aggiungere un RTC al Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>RTC per applicazioni offline</h1>
<p>Data e ora del nostro Raspberry vengono sincronizzate all&#8217;avvio del sistema operativo tramite server NTP. In tutte le altre applicazioni dove non avete un accesso ad internet la data e l&#8217;ora sono impostate di default ma non corrisponderanno a valori corretti. In questi casi una soluzione è utilizzare un rtc che in caso di spegnimento della scheda tenga sempre aggiornato il dato di data e tempo.</p>
<p>Vediamo come fare.</p>
<p>La prima cosa è procurarci un modulo rtc pronto all&#8217;uso oppure realizzarne uno partendo dai singoli componenti. Nel mio caso visto il costo e la praticità di installazione ho scelto un rtc già assemblato. Il modello si basa sul chip DS3231 è ha un pratico connettore che permette l&#8217;installazione connettendolo direttamente sui pin header del raspberry;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6469" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/rtc_pi.jpg" alt="RTC Raspberry PI" width="481" height="460" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/rtc_pi.jpg 481w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/rtc_pi-300x287.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/rtc_pi-150x143.jpg 150w" sizes="auto, (max-width: 481px) 100vw, 481px" /></p>
<p style="text-align: center;"><a href="https://amzn.to/3qk1W70">DS3231 ad Alta precisione modulo di Memoria Orologio RTC per Arduino Raspberry Pi</a></p>
<p>Nell&#8217;immagine seguente potete osservare come deve essere installato il modulo rtc ds3231. </p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6491" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/raspi_rtc.jpg" alt="" width="703" height="355" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/raspi_rtc.jpg 703w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/raspi_rtc-300x151.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/raspi_rtc-150x76.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/raspi_rtc-585x295.jpg 585w" sizes="auto, (max-width: 703px) 100vw, 703px" /></p>
<p><span id="more-6461"></span></p>
<h2>Configurazione del dispositivo</h2>
<p>La comunicazione tra il DS3231 e il Raspberry avviene utilizzando il bus I2C. Procediamo alla sua attivazione eseguendo il comando:</p>
<pre>sudo raspi-config</pre>
<p>Viene avviata la schermata del <strong>Raspberry PI Software Configuration Tool</strong>.  Portiamoci sulla voce <strong>Interface Options</strong> e premiamo invio, nella schermata successiva selezioniamo la voce <strong>I2C</strong>. Confermiamo rispondendo affermativamente e attendiamo l&#8217;attivazione del bus I2C:</p>
<figure id="attachment_6477" aria-describedby="caption-attachment-6477" style="width: 661px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6477 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Raspi_Config.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/Raspi_Config.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Raspi_Config-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Raspi_Config-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Raspi_Config-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/Raspi_Config-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /><figcaption id="caption-attachment-6477" class="wp-caption-text">Interfaccia Raspi-Config</figcaption></figure>
<figure id="attachment_6473" aria-describedby="caption-attachment-6473" style="width: 661px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6473 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable.jpg" alt="Seleziona voce I2C" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /><figcaption id="caption-attachment-6473" class="wp-caption-text">Seleziona voce I2C</figcaption></figure>
<figure id="attachment_6474" aria-describedby="caption-attachment-6474" style="width: 661px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6474 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm.jpg" alt="Conferma attivazione bus i2c" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /><figcaption id="caption-attachment-6474" class="wp-caption-text">Conferma attivazione bus i2c</figcaption></figure>
<figure id="attachment_6475" aria-describedby="caption-attachment-6475" style="width: 661px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6475 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm_ok.jpg" alt="Conferma attivazione bus i2c" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm_ok.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm_ok-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm_ok-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm_ok-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_confirm_ok-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /><figcaption id="caption-attachment-6475" class="wp-caption-text">Conferma attivazione bus i2c</figcaption></figure>
<figure id="attachment_6476" aria-describedby="caption-attachment-6476" style="width: 661px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-6476 size-full" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_finish.jpg" alt="Termina procedura guidata attivazione bus I2C" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_finish.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_finish-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_finish-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_finish-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2c_enable_finish-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /><figcaption id="caption-attachment-6476" class="wp-caption-text">Termina procedura guidata attivazione bus I2C</figcaption></figure>
<p>Dopo aver terminato l&#8217;attivazione del bus, riavviamo il sistema operativo con il comando seguente:</p>
<pre>sudo reboot</pre>
<p>Dopo il riavviamo apriamo una nuova finestra terminale e utilizzando programma i2cdetect possiamo verificare che il modulo rtc e il bus I2C stiano funzionando:</p>
<pre>i2cdetect -y 1</pre>
<p>dovremmo avere una schermata simile alla seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6479" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2cdetect.jpg" alt="programma i2cdetect" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2cdetect.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2cdetect-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2cdetect-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2cdetect-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/i2cdetect-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>il programma i2cdetect non fa altro che scansionare il bus I2C alla ricerca di dispositivi collegati. Nel nostro caso ha trovato un dispositivo all&#8217;indirizzo 0x68 che corrisponde all&#8217;unico dispositivo collegato al raspberry, ovvero il modulo DS3231.</p>
<p>Per sicurezza possiamo verificare sul datasheet dell&#8217;rtc l&#8217;indirizzo del dispositivo.</p>
<p>A questo punto possiamo caricare sul kernel linux il modulo rtc ds3232 (compatibile con il DS3231) eseguendo il seguente commando:</p>
<pre>sudo modprobe rtc-ds3232</pre>
<p>premiamo invio per eseguire il commando:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6481" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/modprobe.jpg" alt="modprobe ds3231" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/modprobe.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modprobe-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modprobe-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modprobe-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modprobe-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>a questo punto dobbiamo creare un nuovo device con indirizzo 0x68 ed inserirlo nel bus I2C. Per eseguire questa serie di commandi dobbiamo loggarci come utente root digitando il comando seguente:</p>
<pre>su</pre>
<p>inseriamo la password per l&#8217;utente root.</p>
<blockquote>
<p>Nel caso in cui non si disponga di una pssword per l&#8217;utente root è necessario crearla digitando il comando:</p>
<p>sudo passwd root</p>
<p>Digitiamo una nuova password per l&#8217;utente root e confermiamo ripetendola nuovamente.</p>
</blockquote>
<p>Ora che abbiamo i privilegi del superuser digitiamo il seguente commando:</p>
<pre>echo ds3232 0x68 &gt; /sys/class/i2c-adapter/i2c-1/new_device</pre>
<p>premiamo invio. Digitiamo il comando <strong>exit</strong> per ritornare all&#8217;utente <strong>pi</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6482" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/new_device.jpg" alt="add new device to bus i2c" width="741" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/new_device.jpg 741w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/new_device-300x169.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/new_device-150x85.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/new_device-585x330.jpg 585w" sizes="auto, (max-width: 741px) 100vw, 741px" /></p>
<h2>Impostare data e ora dell&#8217;RTC</h2>
<p>Dopo le precedenti istruzioni il sistema carica automaticamente i dati correnti di data e ora sull&#8217;RTC. Se questi dati corrispondono ai valori corretti non dobbiamo far altro che leggere i dati con il seguente comando:</p>
<pre>sudo hwclock -r</pre>
<p>in alternativa possiamo settare i valori come desideriamo eseguendo questo comando:</p>
<pre>sudo hwclock --set --date "Fri Jan 1 15:00:00 CET 2021"</pre>
<p>Tutte queste impostazioni non rimangono memorizzate al successivo riavvio del sistema operativo e quindi necessario inserire queste istruzioni su un file che viene lanciato durante le fasi di boot come ad esempio il file rc.local, quindi procediamo ad eseguire le seguenti istruzioni:</p>
<p>Modifichiamo il files modules per caricare sul kernel il modulo rtc-ds3232</p>
<pre>sudo nano /etc/modules</pre>
<p>inseriamo alla fine del file la seguente stringa:</p>
<pre>rtc-ds3232</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6484" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/modules.jpg" alt="file modules" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/modules.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modules-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modules-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modules-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/modules-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>salviamo il file con la combinazione di tasti <strong>crtl+o</strong>  e usciamo con <strong>ctrl+x</strong></p>
<p>Ora apriamo il file <strong>rc.local</strong>:</p>
<pre>sudo nano /etc/rc.local</pre>
<p>portiamoci con puntatore prima dell&#8217;istruzione <strong>exit 0</strong> e aggiungiamo le seguenti istruzioni:</p>
<pre>echo ds3232 0x68 &gt; /sys/class/i2c-adapter/i2c-1/new_device</pre>
<p>inseriamo subito dopo anche l&#8217;istruzione seguente:</p>
<pre>sudo hwclock -s</pre>
<p>in modo da sincronizzare la data e l&#8217;ora del sistema operativo con quella del modulo RTC.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6486" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/rc_local.jpg" alt="file rc.local" width="661" height="562" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/rc_local.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/rc_local-300x255.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/rc_local-150x128.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/rc_local-585x497.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>disconnettiamo il Raspberry dalla rete cablata o WiFi, riavviamo e verifichiamo con il comando <strong>date</strong> che le impostazioni del sistema siano coerenti con quelle impostate precedentemente nell&#8217;rtc.</p>
<p>The post <a href="https://logicaprogrammabile.it/aggiungere-rtc-ds3231-ds1307-raspberry-pi-offline/">Aggiungere un RTC al Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/aggiungere-rtc-ds3231-ds1307-raspberry-pi-offline/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>MQTT, installare Mosquitto sul Raspberry PI</title>
		<link>https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/</link>
					<comments>https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 11 Jan 2021 07:00:45 +0000</pubDate>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[MQTT]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6442</guid>

					<description><![CDATA[<p>Utilizzare MQTT nei progetti iot MQTT (Message Queue Telemetry Transport) è un protocollo di comunicazione progettato per trasferire messaggi occupando una banda molto ridotta. Per questo viene spesso impiegato in ambito IoT. Il metodo di trasmissione e ricezione dei messaggi è asincrono e si basa...</p>
<p>The post <a href="https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/">MQTT, installare Mosquitto sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare MQTT nei progetti iot</h1>
<p>MQTT (Message Queue Telemetry Transport) è un protocollo di comunicazione progettato per trasferire messaggi occupando una banda molto ridotta. Per questo viene spesso impiegato in ambito IoT. Il metodo di trasmissione e ricezione dei messaggi è asincrono e si basa su una architettura publish/subscribe (mittente/destinatario).</p>
<p>Il mittente ed il destinatario non possono però scambiarsi messaggi direttamente tra loro ma necessitano di un intermediario chiamato dispatcher o broker.</p>
<p>Lo scambio di dati avviene in questo modo: il mittente (publisher) invia un messaggio al dispatcher. I destinatari, a loro volta, scelgono quali messaggi ricevere comunicandolo al dispatcher. Il dispatcher quindi invia il messaggio solo ai dispositivi che si nono iscritti (subscribe) per la ricezione dei messaggi.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6446" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt.jpg" alt="" width="603" height="228" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt.jpg 603w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt-300x113.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt-150x57.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/pub_sub_mqtt-585x221.jpg 585w" sizes="auto, (max-width: 603px) 100vw, 603px" /></p>
<p><span id="more-6442"></span></p>
<p>Se al dispatcher sono collegati diversi mittenti e destinatari come è possibile scegliere a chi mandare il messaggio o da chi riceverlo?</p>
<h2>MQTT utilizza i Topics</h2>
<p>Il meccanismo di scambio dati si basa utilizzando i topics, una struttura gerarchica simile a quella per la gestione delle directory in un files system.</p>
<p>Quindi il mittente decide un topic sul quale pubblica un messaggio, ad esempio</p>
<pre>/sensore1</pre>
<p>il destinatario può leggere il messaggio abbonandosi al topics:</p>
<pre>/sensore1</pre>
<p>La figura illustra quanto detto:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6447" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt.jpg" alt="" width="834" height="436" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt.jpg 834w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-300x157.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-150x78.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-768x401.jpg 768w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/send_receiv_mqtt-585x306.jpg 585w" sizes="auto, (max-width: 834px) 100vw, 834px" /></p>
<p>Riepiloghiamo i concetti in questi pochi punti:</p>
<ul>
<li>I messaggi non sono inviati direttamente ai destinatari;</li>
<li>Viene utilizzato un dispatcher o broker che permette lo scambio dei messaggi tra mittenti(publisher) e destinatari(subscriber)</li>
<li>Il dispatcher organizza i messaggi in topics e gli ridistribuisce ai destinatari che si sono abbonati al topic.</li>
<li>Tutti i dispositivi collegati al dispatcher possono inviare o ricevere messaggi.</li>
<li>Solitamente il dispatcher non memorizza i messaggi.</li>
</ul>
<h2>Installare MOSQUITTO</h2>
<p>L&#8217;elemento fondamentale in una architettura <strong>MQTT</strong> è il dispatcher o <strong>broker</strong>. Se i nostri dispositivi sono collegati ad internet possiamo utilizzare un servizio web oppure nei casi di un sistema stand alone, utilizziamo un nostro broker da installare su una scheda Raspberry PI.</p>
<p>Un software open source che potrebbe essere utilizzato per i nostri lavori è <a href="https://mosquitto.org/">Eclipse Mosquitto</a>, un broker molto leggero installabile su single board computer come il Raspberry PI.</p>
<p>Apriamo un terminale sul nostro Raspberry, o colleghiamoci con un client ssh, digitiamo il seguente commando:</p>
<pre>sudo apt-get install mosquitto</pre>
<p>premiamo invio e attendiamo il download e l&#8217;installazione del software.</p>
<p>Testiamo l&#8217;installazione verificando che il broker MQTT sia in esecuzione:</p>
<pre>sudo service mosquitto status</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6451" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status.jpg" alt="" width="757" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status.jpg 757w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status-300x159.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status-150x80.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mosquitto_status-585x311.jpg 585w" sizes="auto, (max-width: 757px) 100vw, 757px" /></p>
<p>in particolare bisogna notare la presenza della stringa Active: active (running).</p>
<p>Per fermare il servizio utilizziamo il seguente comando:</p>
<pre>sudo service mosquitto stop</pre>
<p>mentre per avviarlo digitiamo:</p>
<pre>sudo service mosquitto start</pre>
<p>oppure stoppare e riavviare il servizio con un singolo comando:</p>
<pre>sudo service mosquitto restart</pre>
<h2>Installare client MQTT</h2>
<p>Una volta installato il broker sul Raspberry PI eseguiamo delle prove utilizzando un programma per pubblicare un topic e un programma per abbonarsi.</p>
<p>Digitando il seguente comando installeremo quanto richiesto:</p>
<pre>sudo apt-get install mosquitto-clients</pre>
<p>Attendiamo il completamento dell&#8217;installazione e se non si sono verificati errori dovremmo avere disponibili i seguenti programmi</p>
<pre>mosquitto_sub
mosquitto_pub</pre>
<p>come si intuisce dal nome il primo è il programma che funge da <strong>subscriber</strong> mentre il secondo è il programma che funge da <strong>publisher</strong>.</p>
<p>Per poter eseguire un semplice test apriamo due finestre terminale o, se ci colleghiamo al Raspberry da un altro host, due sessioni ssh.</p>
<p>Sul primo terminale abboniamoci a un topic eseguendo questo commando:</p>
<pre>mosquitto_sub -h localhost -t "mio_topic"</pre>
<p>(ci stiamo abbonando al topic denominato <strong>mio_topic</strong> che viene gestito dal broker che gira sulla macchina <strong>localhost</strong>)</p>
<p>Nella seconda finestra terminale lanciamo il publisher per inviare un messaggio al broker sul topic <strong>mio_topic</strong>:</p>
<pre>mosquitto_pub -h localhost -t "mio_topic" -m "ciamo mondo"</pre>
<p>Nelle immagini seguenti potete osservare lo scambio dei messaggi</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6454" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic.jpg" alt="" width="757" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic.jpg 757w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic-300x159.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic-150x80.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic-585x311.jpg 585w" sizes="auto, (max-width: 757px) 100vw, 757px" /></p>
<p>Nel primo terminale mi metto in ascolto sul topic chiamato <strong>mio_topic</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6455" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1.jpg" alt="" width="661" height="418" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1.jpg 661w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-300x190.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-150x95.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-420x265.jpg 420w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_1-585x370.jpg 585w" sizes="auto, (max-width: 661px) 100vw, 661px" /></p>
<p>sul secondo terminale invio il messaggio &#8220;ciao mondo&#8221; al topic <strong>mio_topic</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6456" src="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2.jpg" alt="" width="757" height="402" srcset="https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2.jpg 757w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2-300x159.jpg 300w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2-150x80.jpg 150w, https://logicaprogrammabile.it/wp-content/uploads/2021/01/mio_topic_2-585x311.jpg 585w" sizes="auto, (max-width: 757px) 100vw, 757px" /></p>
<p>Nel primo terminale osservo la ricezione del messaggio<strong> &#8220;ciao mondo&#8221;</strong>.</p>
<p>Questi due programmi sono molto utili per esercitarci e capire meglio come funziona il protocollo <strong>MQTT</strong>.</p>
<p>The post <a href="https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/">MQTT, installare Mosquitto sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/mqtt-installare-mosquitto-raspberry-pi-progetti-iot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>5 passi per installare un webserver LAMP sul Raspberry PI</title>
		<link>https://logicaprogrammabile.it/5-passi-installare-webserver-lamp-raspberry-pi/</link>
					<comments>https://logicaprogrammabile.it/5-passi-installare-webserver-lamp-raspberry-pi/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 04 Jan 2021 07:00:29 +0000</pubDate>
				<category><![CDATA[Tutorial Raspberry PI]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[Servizio web]]></category>
		<category><![CDATA[Web Server]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=6404</guid>

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

					<description><![CDATA[<p>Come programmare schede Arduino usando un Raspberry PI E&#8217; da diverso tempo che uso un Raspberry Pi come computer per navigare su internet e per imparare a programmare in Python. Con poche decine di euro è possibile creare il proprio desktop replacement. Anche se le...</p>
<p>The post <a href="https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/">Installare Arduino sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come programmare schede Arduino usando un Raspberry PI</h1>
<p>E&#8217; da diverso tempo che uso un <strong>Raspberry Pi</strong> come computer per navigare su internet e per imparare a programmare in <a href="https://www.python.org/"><strong>Python</strong></a>. Con poche decine di euro è possibile creare il proprio desktop replacement.</p>
<p>Anche se le prestazioni non sono entusiasmanti possiamo utilizzare questa scheda come piccolo laboratorio di sviluppo. Nonostante la presenza di diverse linee gpio potremmo avere comunque l&#8217;esigenza di continuare ad utilizzare le schede <strong>Arduino</strong>, quindi perchè non utilizzare il <strong>Raspberry Pi</strong> per programmarle?</p>
<p><span id="more-5953"></span></p>
<h3>Installare l&#8217;Arduino IDE</h3>
<p>La prima cosa da effettuare è quella di scaricare dal sito ufficiale <a href="http://www.arduino.cc/">Arduino</a> il software dell&#8217;ide per piattaforma linux arm. Una volta ottenuto il pacchetto in formato compresso dobbiamo scompattarlo eseguendo il commando seguente</p>
<pre>tar Jxvf arduino-1.8.8-linuxarm.tar.xz</pre>
<p>Verrà creata automaticamente la cartella <strong>arduino-1.8.8</strong> nella stessa directory dove abbiamo salvato il file <strong>arduino-1.8.8-linuxarm.tar.xz</strong></p>
<p>[the_ad id=&#8221;6199&#8243;]</p>
<p>Ora dentro la cartella <strong>arduino-1.8.8</strong> ci sarà il file di installazione install.sh. per eseguirlo dovremmo digitare quanto segue:</p>
<pre>./arduino-linux-setup.sh pi</pre>
<p>Attendiamo qualche istante finché il pacchetto software non viene installato correttamente sul nostro Raspberry Pi.</p>
<p>Ultimata l&#8217;installazione viene richiesto il riavvio del sistema operativo.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6040" src="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling.png" alt="Installazione di arduino su raspberrry pi" width="787" height="676" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling.png 787w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling-300x258.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling-768x660.png 768w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoInstalling-585x502.png 585w" sizes="auto, (max-width: 787px) 100vw, 787px" /></p>
<p>Durante l&#8217;installazione viene creata una voce di menu come potete osservare dalla figura seguente.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6041" src="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu.png" alt="Menu arduino su raspberry pi" width="552" height="742" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu.png 552w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu-223x300.png 223w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoMenu-110x147.png 110w" sizes="auto, (max-width: 552px) 100vw, 552px" /></p>
<h3>Collaudo</h3>
<p>Ora che tutto è stato installato possiamo esegure subito una prova per  verificare se le nostre schede Arduino possano essere programmata attraverso il Raspberry pi.</p>
<p>Colleghiamo alla porta usb del Raspberry Pi una <strong>Arduino UNO</strong>. Avviamo ora l&#8217;Arduino IDE.<br />
Se tutto funziona correttamente nella voce di menu Strumenti-&gt;Porta dovremmo osservare la presenza della scheda Arduino UNO e della relativa porta di comunicazione, come nella figura seguente:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6042" src="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort.png" alt="Arduino porta di comunicazione" width="619" height="602" srcset="https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort.png 619w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort-300x292.png 300w, https://logicaprogrammabile.it/wp-content/uploads/2019/02/ArduinoPort-585x569.png 585w" sizes="auto, (max-width: 619px) 100vw, 619px" /></p>
<p>Dal menu <strong>file-&gt;esempi-&gt;01 Basics</strong> carichiamo il classico sckecth <strong>Blink</strong>, ora dal menu <strong>Sketch</strong> clicchiamo sulla voce <strong>Carica</strong>. Se tutto è andato a buon fine lo sketch verrà caricato correttamente sulla scheda <strong>UNO</strong>.</p>
<p>The post <a href="https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/">Installare Arduino sul Raspberry PI</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/installare-arduino-sul-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
