• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
tty non da usb tastiera leggere

Leggere tastiera usb non da tty
#1
Ciao.
Premesso che sono nuovo in python (che sto usando esclusivamente per raspberry) volevo aggiungere una tastiera usb.
Questa tastiera però non dovrebbe essere utilizzata come input ad uno script running in console (visto che non ho un monitor attaccato), quindi il programma non la dovrebbe leggere da standard-input ma da usb direttamente.

Tipicamente dovrebbe leggerlo uno script che lancio da ssh o uno che resta come demone (avviato o meno al boot).

A fronte della pressione di un tasto (più che di un testo seguito da INVIO, ma anche questo) magari scriverei su lcd o accenderei qualche led ecc.


Allo stato attuale la tastiera è trappata dalla console standard (agetty tty1), che immagino vada disabilitata per evitare conflitti.

Si può fare?
Risposta
#2
Sai che non ho capito niente?
Io sono una persona semplice.. Facciamo una cosa : dimmi cosa vuoi ottenere, e vediamo un esempio di Come si può fare in Python.. Vuoi intercettare la pressione di un tasto per associarci un evento?
Non devi "pensare" a dove è Cone è collegata la tastiera: Python è più astratto.
Se lanci il programma da ssh, risponderà alla tastiera remota, ad esempio.
Risposta
#3
(12/06/2018, 15:14)Zzed Ha scritto: Se lanci il programma da ssh, risponderà alla tastiera remota, ad esempio.
Esatto, ed io non voglio usare quella tastiera, che potrebbe essere dall'altra parte del mondo o addirittura non esistere se lo script è lanciato in rc.local

Diciamo che lo script è avviato in rc.local

Io voglio che premendo 'A' sulla tastiera usb si accenda un led per esempio. 

Come faccio a fargliela leggere?
Risposta
#4
Python (un po' stranamente) non ha supporto diretto per gli input da tastiera. Però, la forza di Python sono le librerie. Pygame è una di quelle più corpose, è preinstallata su RaspberryPi, e in merito agli input ti permette di usare facilmente tastiera, joystick o joy pad, mouse..
Sto ultimando una guida che comprende anche questo, ma se non vuoi aspettare qualche giorno per vederla pubblicata, ti metto un esempio di utilizzo, preso dalla rete:
Codice:
import pygame
import sys
pygame.init()

pygame.display.set_mode((100, 100))
while True:
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         sys.exit()
      if event.type == pygame.KEYDOWN:
         if event.key == pygame.K_w:
            print('Forward')
         elif event.key == pygame.K_s:
            print('Backward')
Risposta
#5
[quote="Zzed" pid='17441' dateline='1528833423']
Python (un po' stranamente) non ha supporto diretto per gli input da tastiera.
[quote]
strano troppo non direi, almeno nella struttura base. La tastiera - come tutto il resto - per unix è un file e per default è aperto da agetty su console tty1 e tutti dovrebbero passare tramite lui per leggerla. Io credo che al kernel gli vada detto che non deve associarla a tty1.

pygame mi sembra di capire che riesce a fare un accesso un po' più a basso livello.
Quel codice però non mi funziona (ma mi studierò la libreria).
1) display.set_mode inizializza il monitor, che io non ho Smile
2) eliminandolo mi va in error su event.get che (dopo i warning per scheda video non trovata) va in errore perchè ho tolto la riga precedente Smile (video system not initialized)


ma magari gli si può dire di non cercare il controllo COMPLETO della macchina ma solo della porta usb... (quando ho connesso la tastiera ha caricato il modulo kernel e creato il device /dev/hidraw0 e /dev/input/event0)

Approfondisco.
Risposta
#6
Hai ragione, pygame vuole che prima venga aperto un suo screen (e che sia attivo, cioè cliccato). Senza schermo, non va bene.
Risposta
#7
Pare che si può usare un monitor fake, ma è da vedere come fargli associare una tastiera
http://www.pygame.org/wiki/DummyVideoDri...t=CookBook

una idea è questa, ma con tastiera invece del joystick

https://www.winkleink.com/2013/04/raspbe...otors.html

questo funziona (o almeno è un passo avanti)
http://2010-2014.itech-planet.net/conten...x-ubuntu-c
è in C. devo vedere di convertirlo (o adattarlo per essere chiamato da python)

magari però è opportuno che al kernel gli dico che la tastiera non la deve passare a tty1 anche (immagino che se ora attacco il monitor vedo il caos, per non parlare se premo ctrl+alt+canc)

non ho provato ma credo che i due link a piedi di questo post dovrebbero andare
https://stackoverflow.com/questions/5060...nput-event
Risposta
#8
in un vecchio progetto avevo utilizzato qualcosa del genere
Codice:
import keyboard

while True:
    if keyboard.is_pressed("q"):
        print("ciao")
    else:
        pass
Risposta
#9
Grazie 
Come posso gli do una occhiata.
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect