lunedì 15 luglio 2013

Usb Host Shield sun Arduino Uno

In questo post verra' descritto l'USB Host Shield Keynes che aggiunge la funzionalita' di utilizzare periferiche USB su una Arduino Uno.
Lo shield si monta come tutti gli altri dello stesso tipo e, oltre a replicare i pin della scheda ed il pulsante di reset, aggiunge una porta USB femmina tipo A
C'e' da specificare che esistono due release dell'USB Host shield...nel mio caso e' la versione 2 che necessita della libreria USB_HOST_Shield_2.0 che si recupera a questo link GitHub


Nella cartella esempi vi sono diversi programma ma nel mio caso mi interessava interfacciare solo HID (Human Interface Devices) ovvero mouse e tastiera
Prima di iniziare una precisazione. Gli esempi nella libreria settano la porta seriale alla velocita' di 115200 baud per cui il monitor seriale dovra' essere impostato di conseguenza (di default si apre a 9600 baud)

Il primo esempio e' USBHIDBootMouse



Questo e' l'output in cui sono riportati i movimenti relativi tra due acquisizioni
Output Mouse
Il secondo e' USBHIDBootKbd


con il relativo output
Output Tastiera



Arduino Uno su Windows

In generale uso veramente di rado Windows e cosi' mi sono accorto solo oggi che connettendo una Arduino Uno in una Windows Box il sistema operativo non riconosce la periferica


Il problema si risolve rapidamente andando installando i driver che si trovano nella directory drivers del software Arduino IDE

NOOBS Raspberry

Un metodo per provare (e solo per provare dato che viene rubato spazio sulla SD da immagini che poi non verranno utilizzate) i vari sistemi operativi supportati da Raspberry si puo' utilizzare il pacchetto NOOBS

Una volta  scaricato NOOBS si deve scompattare l'archivio su una SD Card formattata FAT32 vuota di almeno 4 Gb

Al primo avvio si osserva la schermata sottostante che permette di scegliere quale SO provare

Selezione SO

in questo caso e' stato selezionato Pidora che viene installato in automati

Installazione Pidora
ed dopo un paio di riavvi compare Pidora con XFCE


Nel caso si voglia cambiare SO per qualche frazione di secondo ad ogni reboot compare questa schermata che invita a premere il tasto Shift...in questo modo si ritorna alla selezione del SO


Megatools

Attenzione:
al momento di scrivere di questo post sul sito dello sviluppatore e' comparso un messaggio in cui lo sviluppo di questo tool e' sospeso a causa di una modifica alle API di Mega e sono stati rimossi i link per il download degli eseguibili. Risulta tuttora disponibile il link a GitHub per i sorgenti. Per adesso il tool funziona ma non e' chiaro fino a quando le API continueranno a funzionare come adesso


Finalmente iniziano ad essere disponibili i clienti per il servizio Cloud di Mega in particolar modo quello ufficiale per Android e quello non ufficiale per Linux/Windows offerto da Megatools
E' infatti sostanzialemente inutile avere 50 Giga di spazio e dover effettuare tutte le operazioni da interfaccia Web senza la possibilita' di automatizzare l'upload



In Linux, una volta scompattato l'archivio e compilato i sorgenti mediante ./configure make, si hanno a disposizione i seguenti principali comandi (ne ho omessi alcuni di uso meno frequente)

megadf       come df mostra lo spazio disco a disposizione
megals       come ls (Linux)
megamkdir    come mkdir (Linux)
megarm       come rm (Linux)
megamv       come mv (Linux)
megaput      effettua l'upload di un file
megaget      effettua il download di un file
megasync     sincronizza una directory remota con una directory locale

in generale i comandi hanno tutti uno switch
-u nomeutente
-p password

una tipica sessione puo' essere

megadf -u lucainnoc@gmail.com -p password
megamkdir -u lucainnoc@gmail.com -p password Immagini
magesync -u lucainnoc@gmail.com -p password --local /home/luca/Immagini --remote /Root/Immagini

La directory di root del Cloud e' sempre Root 

Le velocita' di upload sono piuttosto modeste e popolare i 50 Gb sara' veramente un'impresa

venerdì 12 luglio 2013

Shutdown Raspberry via pulsante

Questo progetto e' stato copiato da questo link per evitare uno dei problemi piu' fastidiosi della Raspberry (ovvero di Linux) ovvero la corruzione del file system in caso di arresto brutale dell'elaboratore

In questo esempio viene implementato un pulsante fisico che permetta di eseguire (ove possibile) uno shutdown corretto della macchina

Sono possibili due schemi elettrici



Io ho usato il metodo del secondo schema perche' nel primo la porta GPIO e' sempre sottotensione (stato logico 1) mentre nel secondo esempio lo stato logico e' 0

il programma per gestire il pulsante e' il seguente: se il pin 17 acquisisce uno stato logico 1 viene lanciato il comando di shell per lo shtdown. Le resistenze, come nello schema, sono da 1 e 10 KOhm

------------------------------------------------------
import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN)
while True:
if (GPIO.input(17)):
os.system("sudo shutdown -h now")
break
time.sleep(1)
------------------------------------------------------

Nella foto il cavo rosso e' collegato al pin di 3.3 V, il cavo nero al GND mentre il cavo giallo e' collegato alla porta 17


vistodall'alto



Ed ecco un breve video


mercoledì 10 luglio 2013

GPIO su Raspberry (Led Blink)

In Raspberry e' presente una porta una porta GPIO (General Purpose Input Output) che puo' essere utilizzata come in Arduino per interfacciare la scheda con il mondo esterno (attenzione: ci sono controlli digitali e non analogici)

La prima fondamentale differenza rispetto al mondo Arduino e' che i pin sono spesso indicati con un doppio nome; il primo e' il numero ordinale  (da 1 a 26) mentre il secondo prende in considerazione a quale collegamento rispetto alla CPU siano associati

GPIO Pin Rev.1

ad aggiungere confuzione tra la prima e seconda revisione della Raspberry alcuni pin sono stati modificati per cui alcuni progetti girano su una versione e non sull'altra

GPIO Pin Rev.2
Attenzione : la tensione di riferimento della Raspberry e' di 3.3 V sui pin digitali (ad esclusione di una alimentazione a 5 V sul pin 2)

Per programmare in modo semplice l'accesso i/o ai pin e' disponibile una libreria Python (gia' installata di default nelle versioni attuali di Raspbian). Tutti i programmi che usano le porte devono essere eseguiti come super-utente (script python compresi)


Lo script seguente accende e spenge un led connesso al pin 11 (nome GPIO17)
-------------------------------------------------
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

# Set up #17 as an output
print "Setup #17"
GPIO.setup(17, GPIO.OUT)

var=1
print "Start loop"
while var==1:
 print "Set Output False"
 GPIO.output(17, False)
 time.sleep(1)
 print "Set Output True"
 GPIO.output(17, True)
 time.sleep(1)
-------------------------------------------------




Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...