Stap 1: Aan de slag
Installeren van pySerial
- Om de seriële (UART) communicatie werken moet om de seriële module te installeren.
sudo ad rem-worden installeren python-serial
Nadat dit is geïnstalleerd kunt Python code gebruiken door het doen van seriële importeren.
- Vervolgens moet draad GPIO 14 (TX) en GPIO 15 (RX). Aangezien mijn doel is om te ontvangen signalen de IR dat ik bedraad alleen GPIO 15 (RX).
- De IR-sensor vereisen 5V en GND verbinding. Dan uitgangssignaal van IR-sensor aangesloten op GPIO 15.
De Python code om te lezen het IR signaal ontdekt als heel erg eenvoudig. Als volgt.
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
Deze code zal nu IR signaal 1 byte lezen op een tijdstip en prenten uit de waarde.
Ik probeerde de baud-rates door trial and error en neergestreken voor 2400 BPS. Hoewel seriële communicatie ondersteunen tot 115KBPS is het interessant waarom IR met een lagere snelheid. Mijn gok is dat het zou betrouwbaarder te gebruiken lagere snelheid, omdat minder mogelijkheid IR losse 1 of 2 bits signaal via de ether.
Decoderen IR externe sleutels
Nu is de volgende stap om te decoderen van de sleutelwaarden. Ik gebruikte een standaard Samsung TV IR externe voor deze inspanning.
Eerste belangrijke punt is om erachter te komen hoeveel bytes aan gegevens voor elke sleutel. 12-16 bytes kan variëren. (degene die ik heb geprobeerd). Bytelengte is gewoonlijk dezelfde voor alle sleutels. Die bytes zijn kop bytes, gegevensbytes (aan de sleutel kan identificeren) en staart bytes. De bytes van de header zal hebben een handtekening voor het model van de externe IR. Ik een blad van het excel gebruikt voor het verzamelen van de waarden van de kerngegevens na Antzy Carmasaic pagina
Diep duiken in de vastgelegde sleutelwaarden, blijkt byte 0-5 bestaat uit een kop, herhaald voor alle sleutels. 6 tot en met 11 gegevens bytewaarden vertegenwoordigen de sleutelwaarde. Er zou sommige waarden van de staart. Byte 12 is staart voor de samsung externe.
Toetsen toewijzen
De exacte manier voor deze afstandsbediening is te slaan bytes 6-11 in een array en vergelijk het met een nieuwe binnenkomende sleutel. In plaats daarvan, ik heb een eenvoudig algoritme als volgt.
keyidentity = byte [6] + 2 * byte [7] + 3 * byte [8] + 4 * byte [9] + 5 * byte [10] + 6 * byte [11]
Het geeft bijna een unieke waarde voor elke sleutel. U kunt een betere algoritme dan dit uitzoeken.
Ik uitgebreid de Python code om vast te leggen van Samsung externe kerngegevens. Zodra ik toegewezen sleutelwaarde berekend dan ik opgeslagen het python programma zelf.
Bestand is gekoppeld. naam - ir_serial3samsung.py. Samsung externe stuurt 2 sets van gegevens. Dus ik vangen vangen 24 bytes om te spoelen van de Raspberry Pi seriële data buffer. Maar ik gebruik alleen 1e instellen om te decoderen.
Wanneer u deze code uitvoert identificeert het correct de toetsen die worden ingedrukt. U kunt de rest van de sleutels in de afstandsbediening decoderen door te kijken van de waarde "keyidentity", dat het programma wordt afgedrukt. Klik toevoegen om hen te nemen.
Conclusie
Dit is een zeer eenvoudige en effectieve manier om een afstandsbediening gebruiken met Raspberry Pi met Python. U wilt berekenen hoeveel het totale aantal bytes voor een sleutel, hoe lang de bytes van de header, gegevensbytes en staart bytes. Aangezien u van A tot Z van dit proces dat kunt u eenvoudig aanpassen aan uw toepassing weten zou. Omdat dit kleine python codes zijn is het zeer gemakkelijk om te debuggen als je enig probleem.