Bonjour,
j'ai un raspberry Pi Zero 2W (RPIZ2W) equipé d'une mini camera que je souhaite actionner à distance avec ces petits "bluetooth remote shutter" aussi référencé sous le nom de "AB Shutter 3".
L'appareil a été apparié à mon RPIZ2W et il ne me reste plus qu'à créer le code (python) pour l'associer à cette tache sur mon RPIZ2W : à savoir la prise de photo (libcamera-still…).
J'ai trouvé sur un forum cette solution qui à l'air très simple (pas de téléchargement supplémentaire susceptible de planter mon RPIZ2W comme j'ai pu voir dans la majorité des cas […]) et qui apparemment marche bien (consistant à considérer l'AB Shutter" comme un clavier une touche…)
https://forums.raspberrypi.com/viewtopic.php?t=293457#p1776446
Ne connaissant pas du tout le code python, quelqu'un peut il me dire si le code est complet ou seulement partiel, si je dois l'écrire tel-quel, quels sont les "variables" que je dois changer pour l'adapter à mon cas et mon matériel? je crois par exemple comprendre que c'est à la fin après "do" entre les parenthèses que je dois écrire la commande pour la tache à effectuer… mais sur les parenthèses précédentes dois-je entrer qqchose?…
Bref ne le comprenant pas je ne sais pas trop comment l'utiliser, il n'y a que quelques lignes… et monsieur Douglas m'a gentiment répondu d'aller apprendre la programmation python!
Merci pour votre aide
# Oui, il y a tout
Posté par gUI (Mastodon) . Évalué à 6. Dernière modification le 17 octobre 2023 à 18:37.
Oui, ça doit marcher tel quel, et comme t'es un peu perdu je t'explique vite fait :
Ça utilise la librairie
keyboard
. Les fonctions et constantes commençant parkeyboard
sont censé venir de là (dans notre cas c'estkeyboard.read_event()
etkeyboard.KEY_DOWN
)Bien sûr, tu auras au préalable installé la librairie sur ton RPi avec la commande
sudo pip3 install keyboard
(à ne faire qu'une fois puisque c'est une installation)Définition de la constante du numéro de la touche attendue.
Définition d'une fonction. C'est cette fonction qui est appelée lors de l'appui de la touche (elle s'appelle
do
mais elle peut s'appeler n'importe comment c'est une fonction quoi). Je te conseille de la laisser telle quelle ne serait-ce que pour vérifier que tout marche bien. Ensuite tu complexifieras en mettant ce que tu veux faire réellement à chaque appui sur le bouton.Boucle infinie qui attends un événement clavier (read_event), puis qui regarde si c'est la bonne touche et un appui (il y a un autre événement quand on lâche la touche qu'on ne veut pas ici) : elle appelle
do
. Pour info en python les boucle et autreif
n'ont pas d'accolade, c'est l'indentation qui défini la portée des instructions.Tu mets tout ça tel quel dans un fichier
demo.py
par exemple (attention, ne le nomme surtout paskeyboard.py
ça foutra en l'air l'import) et tu l'exécutes parsudo python3 demo.py
(il faut êtreroot
car tu interceptes le clavier).C'est censé afficher "Button was pressed" à chaque fois que tu appuies sur ton bouton.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Oui, il y a tout
Posté par LF4Chris33 . Évalué à 2.
Un grand merci pour cette aide et le temps passé pour les explications très claires.
Je vais suivre tes conseils et le faire tel-quel dans un premier temps pour voir si le "button was pressed" marche; ensuite on vera pour l'action réelle à effectuer sur l'appui du button…
J'ai un peu commencé à regarder, me suis un peu inquiété d'avoir à ré-installer des trucs du style
python3-pip … a priori ca marche toujours (mais faudra que je vois si je peux allouer plus de mémoire au cma pour améliorer les performances en mode rafale notamment…)
prochaine étape création de button.py avec vim button.py je crois!? sur la racine alors…
et test pour voir concrètement comment ca marche l'execution (sudo python3 button.py)
# Echec du test...
Posté par LF4Chris33 . Évalué à 1.
Bonjour,
Si proche du but après tout ces problèmes d'installation…
Comme je l'ai dit dans le précédent commentaire, j'ai vraiment l'impression que le RPIZ2W est "sous-dimensionné" pour la camera ARDUCAM Imx519, et que l'ensemble est très "instable"…
la commande "sudo pip3 install keyboard" ne marchant pas j'ai du faire qq check
"sudo apt install python3" retournant deja installé OK […]
du coup j'ai fait "sudo apt install python3-pip" qui a conduit au téléchargement de fichiers supplémentaires et permis finalement l'installation du "keyboard"…
pour la création du programme(fichier) python j'ai tâtonné également avec les commandes ….
Finalement "touch" button.py pour créer et "nano" button.py pour l'écrire…
une fois tous les petits problèmes réglés "sudo python3 button.py" faisait systématiquement planter le système… non réponse et déconnection du RPI (user@raspberrypi.local) sur mon invite de commande
j'ai après avoir du me reconnecter en ssh à chaque fois j'ai essayé
chmod +x button.py qui a eu pour conséquence de faire passer mon fichier en vert sur le listing… sans changer le résultat sur "sudo python3 button.py"…
du coup le truc c'est que la prise de photo ne marche plus "camera not available"…
écœuré, saoulé…
[^] # Re: Echec du test...
Posté par gUI (Mastodon) . Évalué à 4. Dernière modification le 19 octobre 2023 à 08:17.
Dis-toi que si tout était simple, informaticien ne serait pas un métier ;) Ce que je dis à qui veut l'entendre c'est que en informatique rien n'est compliqué, mais la difficulté vient de l'entassement de petits trucs (pas compliqués en soit) qui fait que au final le système est complexe.
Oui,
pip
est un outil comme un autre, il faut qu'il soit installé et en effet c'est pas toujours le cas par défaut. Tu as fait ce qu'il fallait.Linux est un nouveau système pour toi, il te faut tout apprendre. C'est long et fastidieux, mais ensuite quelle efficacité tu y trouveras ! Courage :)
Là on rentre dans le dur :) La première idée que j'ai c'est que le module
keyboard
accède à un clavier… inexistant ! Peux-tu essayer en branchant un clavier USB sur ton RPi pour voir si ça change de comportement ?Allez, petite explication sur ce que tu as fait et pourquoi ça n'a rien résolu.
Si tu fais
ls
tu peux voir les fichiers de ton répertoire (tu dois le savoir je pense) et si tu faisls -l
tu as quelques détails supplémentaires sur les fichiers, comme la taille, la date, et une suite de trucs style-rw-r--r--
. C'est une description des droits sur ce fichier, qui a le droit (comme chantait le poète) de faire quoi.Ça se lit par paquet de 3 (et en écrivant ceci je vois un tout premier
-
que je sais même pas à quoi il sert, alors oublions-le). Il y a 3 paquets de 3 caractères.Dans un paquet :
Et les paquets sont :
Dans mon tout premier exemple on a
rw-r--r--
c'est à dire que moi j'ai le droit de lire et écrire le fichier (mais pas de l'exécuter), ceux de mon groupe juste de le lire, et le reste du monde juste de le lire également.En ajoutant un
chmod +x
je rends le fichier exécutable (ce qui pour un fichier texte ne sert à rien en fait) et du coup je vois maintenantrwxr-xr-x
.Ça ne sert à rien parce que quand tu lances la commande
python3 demo.py
(avec ou sans sudo ça importe peu pour l'explication), l'exécutable c'est bienpython
, qui va aller lire le fichierdemo.py
. Et il a juste besoin des droits en lecture.Tu peux t'amuser à faire des
chmod +x
etchmod -x
et faire lesls -l
à chaque fois pour bien voir la différence.(J'anticipe quelques éventuels commentaires : oui on peut en fait rendre ce fichier directement exécutable, mais ne compliquons pas les choses et restons-en là).
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Echec du test...
Posté par gUI (Mastodon) . Évalué à 4.
Pour voir si ça peut venir de là (et apprendre encore et encore…)
Sur la page du module
keyboard
je vois écrit : To avoid depending on X, the Linux parts reads raw device files (/dev/input/input*
) but this requires root.Du coup, avec et sans clavier USB branché, fais un
ls -l /dev/input/input*
pour voir ce qu'il s'y passe. Ça peut expliquer des choses…En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# re-essais
Posté par LF4Chris33 . Évalué à 2.
Merci pour l'investissement les explications et les encouragements,
Je vais essayé de faire un petit retour sur ce que j'ai pu essayer et voir avec le peu de temps que j'ai eu ce soir… Bon:
ls -l /dev/input/input* = ls: cannot access '/dev/input/input*': No such file or directory
ls /dev/input = mice
ls /dev/input (BT shutter allumé) = mice event0 (il me semble que j'avais plus de trucs quand j'ai checké cette commande il y a quelques jours, en tous cas pas de keyboard ici!?)
re tentative d'installation du keyboard (bien plus tard)
sudo pip3 install keyboard = Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: keyboard in /usr/local/lib/python3.9/dist-packages (0.13.5)
sinon ls -l /dev/input =
total 0
crw-rw---- 1 root input 13, 64 Oct 19 18:22 event0
crw-rw---- 1 root input 13, 63 Oct 18 20:17 mice
check sur le bluetooth devices OK (=Device 54:98:0B:BF:BE:F0 AB shutter3)
du coup par la suite j'ai essayé de suivre une autre procédure (qui m'a l'air assez proche , mais non plus avec le keyboard mais avec evdev et les "inputs" du coup…) expliquée ici
https://helloraspberrypi.blogspot.com/2020/06/detect-bluetooth-remote-shutter-ab.html
qui m'a mené un peu plus loin…
sudo apt install input-utils = OK mais command lsinput ne marche pas comme dans la demo
sudo apt install evdev = successffuly installed
du coup j'essaye cet autre programme python dans pyABS3.py (touch , nano etc une hésitation dans la synthaxe du fichier - espace ou pas apres print?)
mais la commande python3 pyABS3.py a renvoyé quelque chose =
device /dev/input/event0, name "AB shutter3", phys "b8:27:eb:71:5b:7c"
(comme dans la démo) du coup j'essaye le clicker (mon BT ABShutter3) et la pas de réponse immédiate; après un certain moment:
Traceback (most recent call last):
File "/home/lapor/pyABS3.py", line 11, in
for event in ABShutter3.read_loop():
File "/usr/local/lib/python3.9/dist-packages/evdev/eventio.py", line 46, in read_loop
for event in self.read():
File "/usr/local/lib/python3.9/dist-packages/evdev/eventio.py", line 71, in read
events = _input.device_read_many(self.fd)
OSError: [Errno 19] No such device
[^] # Re: re-essais
Posté par gUI (Mastodon) . Évalué à 4.
Ne t'éparpille pas !
Je t'ai peut-être raconté une connerie, même chez moi à l'instant où je tape, j'ai pas de
input
mais bien desevent0
,event1
,event2
…Tu n'installes pas un keyboard, tu installes une librairie python de manipulation de keyboard. Elle était déjà installée, donc ça n'a rien fait. C'est complètement indépendant de la présence d'un keyboard ou pas. Le keyboard, c'est le kernel Linux qui s'en occupe (tous les drivers nécessaires sont présents dans le kernel, il se débrouille comme un grand).
C'est bien dans
event0
que ça va se passer.Du coup on va la jouer simple, choper tous les événements qu'on voit passer. Une fois ton bouton associé en BT, lances ce script et clique sur le bouton :
Bon on dirait que le device a disparu, style désassociation BT ? Bon, on regardera ça après, un problème à la fois :)
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# code pyABS3.py
Posté par LF4Chris33 . Évalué à 2. Dernière modification le 20 octobre 2023 à 09:07.
# Suite des tests
Posté par LF4Chris33 . Évalué à 1. Dernière modification le 20 octobre 2023 à 21:06.
alors OK nouveau script dans scriptest.py
je le fais lire avec sudo python3 scriptest.py
retour immediat: device /dev/input/event0, name "AB Shutter3", phys "b8:27:eb:71:5b:7c"
appui sur le button BT Shutter retourne a chaque clic: (3 series de valeurs séparées par --- (j'arrive pas à le mettre en forme tel qu'il m'apparait sur l'invite de commande dans le texte ici)
Là il y a une réponse au "lancement de programme"
Là il y a une réponse (premiere fois) au clic sur mon BT shutter!…
[^] # Re: Suite des tests
Posté par gUI (Mastodon) . Évalué à 4.
Ça me plaît ça :
Du coup tu reprends tes essais du tout début (le script avec "Button was pressed") sauf que tu mets 114 comme valeur dans le script.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Suite des tests
Posté par LF4Chris33 . Évalué à 1.
users@raspberrypi:~ $ python3 button.py (modifié just avec la valeur 114)
Traceback (most recent call last):
File "/home/lapor/button.py", line 9, in
ev = keyboard.read_event()
File "/usr/local/lib/python3.9/dist-packages/keyboard/init.py", line 924, in read_event
hooked = hook(queue.put, suppress=suppress)
File "/usr/local/lib/python3.9/dist-packages/keyboard/init.py", line 461, in hook
append(callback)
File "/usr/local/lib/python3.9/dist-packages/keyboard/generic.py", line 67, in add_handler
self.start_if_necessary()
File "/usr/local/lib/python3.9/dist-packages/keyboard/_generic.py", line 35, in start_if_necessary
self.init()
File "/usr/local/lib/python3.9/dist-packages/keyboard/init_.py", line 196, in init
_os_keyboard.init()
File "/usr/local/lib/python3.9/dist-packages/keyboard/_nixkeyboard.py", line 113, in init
build_device()
File "/usr/local/lib/python3.9/dist-packages/keyboard/_nixkeyboard.py", line 109, in build_device
ensure_root()
File "/usr/local/lib/python3.9/dist-packages/keyboard/_nixcommon.py", line 174, in ensure_root
raise ImportError('You must be root to use this library on linux.')
ImportError: You must be root to use this library on linux.
Sur l'installation de ma librarie keyboard j'avais keyboard in /usr/local/lib/python3.9/dist-packages (0.13.5), du coup le probleme ne vient-il pas de la premiere ligne import keybord : introduire un From ou mettre un chemin d'acces?
[^] # Re: Suite des tests
Posté par gUI (Mastodon) . Évalué à 4. Dernière modification le 21 octobre 2023 à 13:39.
Souviens-toi, il te faut faire
sudo python3 button.py
parce que ça attaque directement des périphériques système :)En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# Suite des tests
Posté par LF4Chris33 . Évalué à 1.
J'y comprend RIEN!!!!!!!! quand je parlais "d'instabilité" du système […] lol
sudo python3 button.py = pas de réponse /blocage
je me ré-oriente sur l'autre programme (evdev … pyABS3.py dans lequel j'ai également modifié la valeur 114)
sudo python3 pyABS3.py = gros paragraphe d'erreur avec notamment "no such file in directory"
je re-essaye la commande lsinput (qui ne marchait pas) et là bim:
/dev/input/event0
bustype : BUS_BLUETOOTH
vendor : 0x5ac
product : 0x22c
version : 283
name : "AB shutter3"
phys : "b8:27:eb:71:5b:7c"
uniq : "54:98:0b:bf:be:f0"
bits ev : EV_SYN EV_KEY EV_MSC
derriere je re-essaye sudo python3 pyABS3.py (qui ne marchait pas il y a une minute) et là bim réponse du lancemant de programme OK
device /dev/input/event0, name "AB shutter3", phys "b8:27:eb:71:5b:7c"
j'appuie sur le clicker AB SHUTTER3 et là BINGO
Shutter3 pressed
event at 1697888681.629218, code 114, type 01, val 01
Shutter3 pressed
event at 1697888689.987540, code 114, type 01, val 01
Shutter3 pressed
event at 1697888697.805622, code 114, type 01, val 01
je reviens vers mon invite de commande et là après mes lignes shutter pressed
j'ai à nouveau:
Traceback (most recent call last):
File "/home/lapor/pyABS3.py", line 11, in
for event in ABShutter3.read_loop():
File "/usr/local/lib/python3.9/dist-packages/evdev/eventio.py", line 46, in read_loop
for event in self.read():
File "/usr/local/lib/python3.9/dist-packages/evdev/eventio.py", line 71, in read
events = _input.device_read_many(self.fd)
OSError: [Errno 19] No such device
Avec un arret du programme retour à users@raspberrypi: ~$
je relance le programme : CA MARCHE… mais le même message d'erreur ré-apparait après un temps d'inactivité et le programme s'arrète avec toujours un retour sur users@raspberrypi: ~$
Il SEMBLE qu'on avance un peu mais dans l'objectif du projet je vois de nouveaux problèmes
Il faut que ce programme soit actif à l'allumage du PI (le module est concu pour être autonome et opéré dans la nature loin de mon laptop et d'une éventuelle session ssh pour lancer le programme
Par ailleurs celui-ci ne doit pas se désactiver après 1 minute du coup
et il doit activer la caméra et non plus simplement écrire shutter PRESSED (camera not available)
[^] # Re: Suite des tests
Posté par gUI (Mastodon) . Évalué à 4. Dernière modification le 21 octobre 2023 à 20:33.
Bon, à distance ça commence à être compliqué de te donner des conseils, mais tu vois que en insistant, en simplifiant au maximum (une chose à la fois comme je dis toujours), en procédant étape par étape tu dois arriver à faire ce que tu veux.
"La route est longue mais la voie est libre" (elle est pas de moi).
root
, donc un service système et pas user)dmesg
si t'as des messages particuliers lors de la déconnexion (à première vue je soupçonne un truc autour de l'économie d'énergie qui fait qu'il se déconnecte)Bon courage :)
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# Bonjour
Posté par LF4Chris33 . Évalué à 3.
Encore un grand merci pout ton aide, j'aurais pas pu avancer comme ca sans toi! :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.