Bonjour
j’ai acheter plusieurs tsop différent (capteur infrarouge) que j’ai connecté aux pins du PI, je reçoit bien des données via lirc mais toutes les données sont aléatoire, en gros je ne reçoit que du charabia a noté que le capteur fonctionne bien sur une arduino
le cat te sort « brutalement » le binaire qu’il reçoit de /dev/lirc0
pour que se soit lisible par un humadoïde, il doit falloir utiliser un programme (ds le paquet lirc ou lirc-x ? ) enfin si j’en crois ce tuto:
ça ok mais a chaque appui d’un bouton identique je devrais recevoir la même trame peu importe que ce soit du binaire ou de l’hexadécimal et la ce n’est pas le cas j’ai tenter de faire des enregistrement avec irrecord mais celui m’indique 700byte reçu et impossible d’avoir plusieurs fois la même trame, a noté que le probleme est le même avec le programme ir de jeedom
dans cette doc il rajoute « dtparam=gpio_in_pull=down » qui si je me rappelle met les gpio a l’état 0
sans cette initialisation l’état instable pourrait expliquer les sorties aléatoires ( ou pas! ça dépasse mon niveau de compétence ! )
j’ai essayé sur un pi4 avec bullseye en 64bit
dans /boot/config.txt: dtoverlay=gpio-ir,gpio_pin=23
pour recevoir le signal sur le pin gpio23
ensuite j’ai passer le programme : lirc-make-devinput /usr/include/linux/input-event-codes.h
parce que le fichier /etc/lirc/lircd.conf.d/devinput.lircd.conf peut ne pas correspondre avec le kernel de la machine mais en fait ça a rien changé !
ensuite j’ai créé un conf avec irrrecord que j’ai testé avec lirc-config-tool mais malgré 0 erreur ça marche toujours pas !
avant de jeter le bouzin j’ai installé ir-keytable (merci pour l’info ) un module python evdev, bidouillé un petit programme python et la effectivement ça fonctionne presque sans problème ! il reste la répétition des touches trop rapide !
#!/usr/bin/python3
import subprocess
# apparementt il faut lancer d'abord ir-keytable
print(subprocess.run("sudo ir-keytable -c -p all", shell=True))
from evdev import InputDevice
irr = InputDevice('/dev/input/event0')
print("Press remote IR buttons, Ctrl-C to quit")
for event in irr.read_loop():
if event.type == 4:
try:
if event.value == 22:
print("button pressed: 0")
elif event.value == 12:
print("button pressed: 1")
elif event.value == 24:
print("button pressed: 2")
elif event.value == 94:
print("button pressed: 3")
# avec la touche "st" code 13 on lance apt update ! why not !
elif event.value == 13:
print("button pressed: st")
print(subprocess.run("sudo apt update", shell=True))
else:
print("button unknown!")
print(event)
except:
print("Problem with button press...")