Arduino e riconoscimento periferiche

Buonasera a tutti,
avrei bisogno di qualche delucidazione riguardo le differenze nelle schede Arduino.
Vorrei sviluppare un prototipo di mouse (gestito meccanicamente da pulsanti).
Ho fatto qualche ricerca ed ho letto però che mentre Arduino Leonardo monta un microcontrollore ATmel32U4 che ha integrata l'interfaccia USB e quindi permette di "trasformare" la scheda in una periferica come un mouse, in Arduino Uno ciò non dovrebbe essere possibile.
Vi chiedo dunque conferma di ciò che ho letto e quindi se l'unica possibilità per far riconoscere la scheda Arduino come un dispositivo nativo del sistema è utilizzare una scheda Arduino Leonardo oppure se ho qualche altra opzione.

Grazie in anticipo a chiunque vorrà partecipare alla discussione :slight_smile:

Qualcosa si potrebbe fare anche con una Uno, ma è DECISAMENTE più complicato, e non vedo motivi per proseguire su questa strada. Il costo delle schede è simile, e la Leonardo non ha alcuna limitazione rispetto alla Uno, anzi, ha pure 512b di memoria in più!

Vai con la Leonardo, fidati.

Grazie SukkoPera!

Una cosa però non ho ancora capito: la Leonardo poi andrà configurata come periferica mouse? Se si, come (tramite sketch?) ?
[Cioè nel momento in cui la collego al PC (tramite usb) come fa il PC a sapere se è un mouse, una tastiera o una Leonardo?]

Grazie ancora!

È tutto contemporaneamente :).

Non ti preoccupare troppo, alla fine dei conti il tutto si ridurrà ad installare il suo driver lato PC (se usi Windows) e ad usare una apposita libreria lato sketch.

Quindi se voglio utilizzarlo in un altro computer dovrò prima installare i relativi driver?
Non c'è un modo per rendere la Leonardo un mouse a tutti gli effetti?
Se in futuro vorrò vendere questo prototipo mi piacerebbe che venga semplicemente collegato e riconosciuto come un Mouse (periferica HID) e non come una scheda Leonardo che simula un mouse.

Grazie ancora :wink:

Guarda, francamente ho parlato di driver "sulla fiducia", visto che su Windows serve sempre un driver per ogni boiata, anche se è uguale a un'altra già in uso.

Io personalmente sono un Linuxista e lì non serve nessun driver, funziona tutto alla prima connessione. La Leonardo si può presentare come HID a tutti gli effetti, per cui può essere che vada al volo anche su Windows, boh? Qualcun altro potrà forse fare chiarezza!

SukkoPera:
Guarda, francamente ho parlato di driver "sulla fiducia", visto che su Windows serve sempre un driver per ogni boiata, anche se è uguale a un'altra già in uso.

Io personalmente sono un Linuxista e lì non serve nessun driver, funziona tutto alla prima connessione. La Leonardo si può presentare come HID a tutti gli effetti, per cui può essere che vada al volo anche su Windows, boh? Qualcun altro potrà forse fare chiarezza!

Ma su Linux, se vuoi utilizzare la Leonardo come mouse, nella lista delle periferiche ti rileva un semplice mouse collegato oppure ti rileva la Leonardo che tuttavia può utilizzare il cursore del pc?
Grazie mille SukkoPera :slight_smile:

P.S.: se c'è qualcuno che ha Windows+Leonardo si faccia avanti :smiley:

Giudica tu, il mio al momento è configurato come tastiera, ma dovrebbe rendere l'idea:

[20981.330132] usb 1-1: new full-speed USB device number 8 using xhci_hcd
[20981.497326] usb 1-1: New USB device found, idVendor=2341, idProduct=8036
[20981.497331] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[20981.497333] usb 1-1: Product: Arduino Leonardo
[20981.497334] usb 1-1: Manufacturer: Arduino LLC
[20981.497335] usb 1-1: SerialNumber: HIDPC
[20981.498952] input: Arduino LLC Arduino Leonardo as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:2341:8036.0005/input/input17
[20981.549286] hid-generic 0003:2341:8036.0005: input,hidraw2: USB HID v1.01 Keyboard [Arduino LLC Arduino Leonardo] on usb-0000:00:14.0-1/input2
[20981.591927] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
[20981.592480] usbcore: registered new interface driver cdc_acm
[20981.592486] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

Comunque il core che comanda l'interfaccia USB è disponibile a livello sorgente e modificabile, se proprio vuoi metterci le mani.

Ti ringrazio SukkoPera!

Se c'è qualcuno che ha Windows mi può confermare che funziona allo stesso modo? Prima di acquistare (anche) una scheda Leonardo vorrei esser sicuro :smiley:

La Leonardo, ma anche la MICRO (entrambe col ATmega32U4) e altre schede di produttori terzi col 32U4 ma anche la DUE e la ZERO hanno una libreria che li fa sembrare (emula) una tastiera o/e un mouse.
Non serve nessun driver per farli lavorare sul PC. Il PC li riconosce come Mouse e/o Tastiera come qualsiasi mouse o tastiera USB.
https://www.arduino.cc/en/Reference/MouseKeyboard

Ciao Uwe

Perdona la mia carenza di informazione. Significa che ATmega32U4, ha lo stack per l' USB ?

Certo! Quella U per cosa credi stia? :wink:

uwefed:
La Leonardo, ma anche la MICRO (entrambe col ATmega32U4) e altre schede di produttori terzi col 32U4 ma anche la DUE e la ZERO hanno una libreria che li fa sembrare (emula) una tastiera o/e un mouse.
Non serve nessun driver per farli lavorare sul PC. Il PC li riconosce come Mouse e/o Tastiera come qualsiasi mouse o tastiera USB.
Keyboard - Arduino Reference

Ciao Uwe

Ti ringrazio per la risposta.
Non mi è ancora chiaro però come e quando la scheda Leonardo diventa un mouse.
Leggendo la documentazione ho visto che il comando Mouse.begin() da inizio all'emulazione del dispositivo: quindi una volta che invoco questa istruzione la scheda Leonardo verrà letta dal pc come un dispositivo HID e non più come una scheda Leonardo?

Detta in altre parole: quando collego la Leonardo, nella lista dei dispositivi avrò nella relativa porta USB (quindi come controller/dispositivo USB) la scheda Leonardo; una volta invocata la funzione Mouse.begin() sparirà quella voce e avrò nella lista dei dispositivi Mouse un dispositivo HID (immagino con nome del tipo "HID Leonardo") oppure avrò comunque due voci: una che mi segnala che ho un dispositivo USB Leonardo, ed una che mi dice che ho un mouse HID Leonardo?

Grazie!

Non esiste un "dispositivo Leonardo". Ti appare solo una porta seriale, normalmente tutta l'interazione con la scheda avviene tramite quella. Inoltre, a meno di modifiche al core, ti appariranno poi i vari device HID, ovvero tastiera e mouse, ma la porta seriale rimane sempre accessibile.

Esiste il "dispositivo Leonardo": prova a collegare la tua scheda al pc e guarda nella lista dei dispositivi

Ti ho postato sopra la mia "lista dei dispositvi". Vedo solo un mouse una tastiera e una seriale. Su Windows non so di preciso cosa succeda, comunque qualunque cosa compaia dubito scompaia abilitando le funzionalità HID Mouse.

SukkoPera:
Vedo solo un mouse e una seriale.

Hai questo emulando il mouse, giusto? Se si, il mouse e la seriale sono entrambi relativi alla Leonardo? (è la mia domanda iniziale)

Grazie ancora!

Scusa, io ci emulo una tastiera, ma è pur sempre un device HID.

Non capisco bene la tua domanda ma sì, sono entrambi device della Leonardo.

SukkoPera:
Scusa, io ci emulo una tastiera, ma è pur sempre un device HID.

Non capisco bene la tua domanda ma sì, sono entrambi device della Leonardo.

Ok perfetto volevo sapere questo!

[La mia idea era di sviluppare un prototipo di mouse quindi mi sarebbe piaciuto lasciare solamente la "funzionalità HID" e disattivare -per sempre- le funzioni seriali. Non sta infatti molto bene un mouse che viene visualizzato come dispositivo seriale oltre che come HID. Immagino quindi che -probabilmente per evidenti motivi- ciò non sia possibile.]

Grazie mille per le risposte! :wink:

Non credo che dia un gran fastidio una seriale che rimane lì a far niente. Poi beh, se metti mano al core sicuramente la seriale la puoi disabilitare, ma prima devi diventare abbastanza bravo per farlo :).