[PYTHON] J'ai appris comment la télécommande infrarouge fonctionne avec Raspberry Pi

Je n'avais jamais été au courant du mécanisme de télécommande des téléviseurs et des climatiseurs qui me sont familiers, mais j'ai appris le mécanisme d'utilisation de la télécommande infrarouge dans le travail électronique. J'ai également essayé de vérifier comment la communication se fait en utilisant Raspeye.

** Ce que j'ai utilisé **

Format de communication de la télécommande infrarouge

Tout d'abord, il existe environ trois formats de communication pour la télécommande infrarouge.

La télécommande utilisée cette fois-ci étant au format NEC, nous allons nous concentrer sur cela.

Format NEC

Dans le format NEC, T = 562 [μs] est une unité de temps. Les données «0» et «1» sont représentées de cette manière.

format0&1.jpg

Et toute la communication est à peu près divisée en quatre codes. format.jpg

Maintenant, utilisons une tarte aux râpes et vérifions si c'est le cas.

Analyse de la télécommande infrarouge

Nous analyserons la télécommande infrarouge étiquetée Car mp3, souvent incluse dans les kits de démarrage de travail électronique. <img width="150" alt="carMp3.jpg ", src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551611/1c27be81-e637-922e-e676-f516271f3ba6.jpeg "> Tout d'abord, nous allons faire un circuit.

1. 1. Créer un circuit

Le module récepteur infrarouge utilisé cette fois est VS1838B. vs1838b.jpg Les broches du VS1838B sont OUT à gauche, GND au milieu et VCC à droite. Puisque Min de VCC est de 2,7 V et Max est de 5,5 V, connectez-le à 3,3 V sans insérer de résistance. Cette fois, connectez OUT à la broche 21.

circuit.jpg

2. Créer du code source

Il s'agit du code source qui émet le temps (μs) lorsque le signal est ON / OFF.

irAnalysis.py


import RPi.GPIO as GPIO
import time

IR_PIN = 21

def timeMeasure():
    maxTime = 1 #sec
    prevState = GPIO.input(IR_PIN)
    startTime = time.perf_counter()
    while time.perf_counter() - startTime < maxTime:
        nowState = GPIO.input(IR_PIN)
        if nowState != prevState:
            endTime = time.perf_counter()
            elapsedTime = (endTime - startTime) * 1000000 #microsec
            return round(elapsedTime)
    return None

def analysis():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(IR_PIN, GPIO.IN)
    GPIO.wait_for_edge(IR_PIN, GPIO.BOTH)
    try:
        while True:
            elapsedTime = timeMeasure()
            if elapsedTime is None:
                break
            else:
                print(elapsedTime)

    except KeyboardInterrupt:
        GPIO.cleanup(IR_PIN)
    GPIO.cleanup(IR_PIN)

if __name__ == '__main__':
    analysis()

3. 3. Analyse de sortie

J'ai exécuté le programme précédent et appuyé sur le n ° 0 de la télécommande infrarouge. La télécommande étant au format NEC, vérifiez la sortie en la comparant au format.

Tout d'abord, au format NEC, vous pouvez d'abord recevoir le code du lecteur.

Code du lecteur

Parce que T est 562 μs 16T est 16*562=8992(μs)

8T 8*562=4496(μs) Il devient.

Les deux premières lignes de sortie ressemblent à ceci.

python


9338
4294

Les valeurs sont proches les unes des autres.

Vient ensuite le code personnalisé.

Code personnalisé

'0': 1T ON, 3T OFF Lorsque ON est de 562 μs et OFF est de 562 μs

'1': 1T ON, 1T OFF Lorsque ON est de 562 μs et OFF est de 1686 μs

Donc, cette fois, le code personnalisé est 0000 0000 1111 1111.

De la troisième ligne au milieu de la sortie

python


484 #'0'
461
543 #'0'
478 
546 #'0'
478
543 #'0'
480
545 #'0'
486
548 #'0'
471
538 #'0'
479
546 #'0'
478
544 #'1'
1604
546 #'1'
1596
544 #'1'
1600
544 #'1'
1600
536 #'1'
1602
544 #'1'
1601
485 #'1'
1578
496 #'1'
1596

Vient ensuite le code de données.

Code de données

Le code de données est 0110 1000, suivi du 1001 01111 inversé.

python


520 #'0'
466
529 #'1'
1587
328 #'1'
1543
335 #'0'
426
449 #'1'
1589
527 #'0'
468
512 #'0'
442
463 #'0'
460
------Inverser d'ici--------
521 #'1'
1573
506 #'0'
467
539 #'0'
484
532 #'1'
1586
460 #'0'
438
527 #'1'
1603
479 #'1'
1575
464 #'1'
1588

Répéter le code

Il semble que 1T, 71T, 16T, 4T sont répétés en premier, puis 1T, 172T, 16T, 4T sont répétés. C'est un peu différent du format, mais cela peut être différent pour chaque produit.

python


472
40106 
9203
2024
---------------
234
96804
9194
2128
----répétition----
466
96856
9161
2097
----répétition----
451
96858
9212
2168

Il a été constaté que la communication était effectuée selon le format NEC, bien que les valeurs numériques soient légèrement différentes, à l'exception du code de répétition.

Recommended Posts

J'ai appris comment la télécommande infrarouge fonctionne avec Raspberry Pi
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Commande de servomoteur avec Raspberry Pi
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
Réception de la télécommande infrarouge avec Intel Edison
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
J'ai essayé L-Chika avec Razpai 4 (édition Python)
Observez le groupe de météores Futago avec RaspberryPi4
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
Utilisez le capteur d'éclairement numérique TSL2561 avec Raspberry Pi
GPGPU avec Raspberry Pi
Visualisons la pièce avec tarte aux râpes, partie 1
Comment utiliser Raspeye Relay Module Python
Quand j'ai essayé de faire une communication socket avec Raspberry Pi, le protocole était différent
Contrôlez les moteurs sans balais avec GPIO de Raspberry Pi Zero
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Je voulais faire fonctionner le moteur avec une tarte à la râpe, alors j'ai essayé d'utiliser la carte de commande du moteur de Waveshare
Contrôlez librement l'affichage du tableau d'affichage RGB LED Matirix Lightning avec Raspberry Pi 3B +
C'était génial d'éditer le fichier Python dans Raspberry Pi avec la fonction à distance d'Atom
J'ai essayé de simuler la propagation de l'infection avec Python
Jouez avec le module de caméra Raspberry Pi Zero WH Partie 1
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
J'ai essayé de connecter Raspeye et conect + avec l'API Web
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
J'ai envoyé les données de Raspberry Pi à GCP (gratuit)
Plantes Mutter avec Raspberry Pi
J'ai parlé à Raspberry Pi
J'ai créé un serveur Web avec Razpai pour regarder des anime
Je veux exécuter l'interface graphique Python au démarrage de Raspberry Pi
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
Utilisez vl53l0x avec RaspberryPi (python)
Communication série avec Raspberry Pi + PySerial
Configuration du système d'exploitation avec Raspberry Pi Imager
Essayez L Chika avec raspberrypi
J'ai étudié à quoi ressemble la lunette
J'ai aimé le tweet avec python. ..
Construire un serveur VPN avec Raspberry Pie
Essayez de déplacer 3 servos avec Raspeye
Utiliser une webcam avec Raspberry Pi
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
[J'ai touché le Raspberry Pi (1)] J'ai résumé les opérations de base de Minecraft Pi Edition (2015.5.23 pré-version)
[Travail électronique] J'ai fabriqué un détecteur de son tactile Suica avec Raspberry Pi
Remarque: je souhaite faire de la domotique avec Home Assistant + Raspberry Pi + capteur # 1
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
J'ai essayé de contrôler la bande passante et le délai du réseau avec la commande tc
Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission