Étape 1: Mise en route
Installation pySerial
- Pour obtenir le travail de communication série (UART) besoin d’installer le module de la série.
sudo apt-get installer python-serial
Une fois ceci installé Python code peut l’utiliser en faisant Importer serial.
- Ensuite, besoin de câbler GPIO 14 (TX) et 15 GPIO (RX). Étant donné que mon but est de recevoir l’IR signaux que j’ai câblé uniquement GPIO 15 (RX).
- Le capteur IR nécessitent 5V et GND de connexion. Ensuite le signal de sortie du capteur IR connecté à 15 GPIO.
Le code Python pour lire le signal IR découvert à être très très simple. Comme suit.
import serial ser = serial.Serial ("/dev/ttyAMA0") ser.baudrate = 2400 for i in range (0,15): # usually IR signal for a key is about 12-16 bytes data = ser.read(1) # read 1 byte at a time print ord(data) # the data read in character, ord will convert to ASCII value
Maintenant copiez le code suivant lit signal IR 1 octet à la fois et imprime la valeur.
J’ai essayé les débits en bauds par tâtonnements et s’installa pour 2400 BPS. Si communication série prend en charge jusqu'à 115KBPS elle est intéressant pourquoi IR en utilisant une vitesse plus lente. Ma conjecture est que ce serait plus fiable d’utiliser une vitesse plus faible, puisque moins de possibilité IR lâches 1 ou 2 bits de signaux en direct.
Décoder des clefs à distance IR
Maintenant, l’étape suivante consiste à décoder les valeurs de clés. J’ai utilisé une télécommande Samsung TV IR standard pour cet effort.
Premier point important est de savoir combien d’octets de données pour chaque clé. Il peut varier de 12 à 16 octets. (ceux que j’ai essayé). Longueur en octets est généralement même pour toutes les clés. Ces octets sont octets de l’en-tête, les octets de données (pour identifier la clé) et les octets de queue. Les octets de l’en-tête auront une signature pour le modèle de la télécommande IR. J’ai utilisé une feuille excel pour récupérer les valeurs de clé de données Antzy Carmasaic page suivante
Profonde plongeant dans les valeurs de clés capturées, il montre octet 0-5 se compose d’en-tête, répété pour toutes les clés. Valeurs de données de 6 à 11 octets représentent la valeur de la clé. Il pourrait y avoir certaines valeurs de la queue. Octet 12 est la queue pour le samsung distant.
Mappage de clés
La manière exacte pour cette télécommande consiste à stocker les octets 6-11 dans un tableau et comparez-la avec une nouvelle clé entrante. Au lieu de cela, j’ai fait un algorithme simple comme suit.
KeyIdentity = byte [6] + 2 * octet [7] + 3 * octet [8] + 4 * octet [9] + 5 * octet [10] + 6 * octet [11]
Il donne presque une valeur unique pour chaque clé. Vous pouvez déterminer un algorithme mieux que cela.
J’ai étendu le code Python pour capturer les informations de clé télécommande Samsung. Une fois que j’ai calculé la valeur de clé mappé puis j’ai stocké le programme python lui-même.
Fichier est joint. nom - ir_serial3samsung.py. Samsung distant envoie 2 séries de données. Donc j’ai capturer 24 octets afin de vider les données séries Raspberry Pi capture buffer. Mais j’utilise seul 1er set pour décoder.
Lorsque vous exécutez ce code, il identifie correctement les touches enfoncées. Vous pouvez décoder le reste des touches de la télécommande en regardant la valeur « keyidentity » que le programme imprime. Puis ajouter le programme pour les inclure.
Conclusion
Il s’agit d’un moyen simple et efficace d’utiliser une télécommande avec Raspberry Pi avec Python. Vous avez besoin de comprendre combien nombre total d’octets d’une clé, combien de temps les octets de l’en-tête, octets de données et les octets de queue. Étant donné que vous sauriez de A à Z de ce processus que vous pouvez facilement le modifier pour l’adapter à votre application. Puisqu’il s’agit des codes petit python, il est très facile à déboguer si vous appuyez sur n’importe quel problème.