Guide du débutant M5Stack : capacités infrarouges PLUS2
-
Sélectionnez un module IR : par exemple, le module Grove IR Receiver.
-
Connexion matérielle : utilisez l'interface Grove ou des câbles de démarrage pour connecter le module IR aux broches GPIO appropriées du M5StickC Plus2.
-
Support logiciel : écrivez du code dans Arduino ou MicroPython pour lire les signaux IR. Les bibliothèques Arduino, telles que IRremote, peuvent facilement décoder les protocoles IR courants (par exemple, le protocole NEC).
Caractéristiques clés de la fonction infrarouge
Commentaires de code et descriptions de fonction
/** * @file ir_nec.ino * @auteur SeanKwok (shaoxiang@m5stack.com) * @brief Test IR NEC M5StickCPlus2 * @version 0.1 * @date 2023-12-09 * * * @Matériels: M5StickCPlus2 * Version @Platform : Arduino M5Stack Board Manager v2.0.9 * @Bibliothèque Dépendante : * M5GFX : https://github.com/m5stack/M5GFX * M5Unifié : https://github.com/m5stack/M5Unified * M5StickCPlus2 : https://github.com/m5stack/M5StickCPlus2 * IRremote : https://github.com/Arduino-IRremote/Arduino-IRremote */ #define DISABLE_CODE_FOR_RECEIVER // Désactive le redémarrage du récepteur après chaque // send. Saves 450 bytes program memory and // 269 bytes RAM if receiving functions are // not used. #define ENVOYER_PWM_PAR_TIMER #define IR_TX_PIN 19 uint8_t sCommand = 0x34; uint8_t sRepeats = 0; vide configuration() { auto cfg = M5.config(); //To understand the underlying logic of the initialization with begin(), you can refer to the Dependent Library. StickCP2.begin(cfg); //Display rotation directions StickCP2.Display.setRotation(1); // The color of the text displayed on the screen. StickCP2.Display.setTextColor(VERT); //Text alignment middle_center means aligning the center of the text to the specified coordinate position. StickCP2.Display.setTextDatum(middle_center); //Font Styles StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24); //Font size StickCP2.Display.setTextSize(1); IrSender.begin(DISABLE_LED_FEEDBACK); // Commencez par IR_SEND_PIN comme code PIN d'envoi IrSender.setSendPin(IR_TX_PIN);//Paramètres de la broche de transmission du signal infrarouge } vide boucle() { Serial.println();//Imprime une ligne vierge pour formater la sortie et rendre les informations suivantes plus claires. Serial.print(F('Envoyer maintenant : adresse=0x1111, command=0x'));//Imprimer une chaîne. Serial.print(sCommand, HEX);//Affichage au format hexadécimal. 'Serial.print(F(', repeats='));//Indiquez le nombre de transmissions répétées. Serial.print(sRepeats);//Le nombre de fois que la commande est envoyée. Serial.println();//Imprime une autre ligne vierge pour rendre la sortie plus organisée. StickCP2.Display.clear();//Mettre à jour l'affichage de l'écran. //drawString A method used to draw a string at a specified position. StickCP2.Display.drawString('IR NEC SEND', StickCP2.Display.width() / 2, StickCP2.Display.height() / 2 - 40); StickCP2.Display.drawString('ADDR:0x1111', StickCP2.Display.width() / 2, StickCP2.Affichage.hauteur() / 2); StickCP2.Display.drawString('CMD:0x' + String(sCommand, HEX), StickCP2.Display.width() / 2, StickCP2.Display.height() / 2 + 40); Serial.println(F('Envoyer un NEC standard avec une adresse 16 bits')); StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Dessinez un cercle. IrSender.sendNEC(0x1111, sCommand, sRepeats);//Envoyer un signal infrarouge suivant le protocole NEC. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Incrémenter les valeurs d'envoi */ sCommand += 1;//Incrémente la valeur de la commande. retard(500);//Délai de 500 millisecondes. StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Dessinez un cercle rempli. delay(500); }
1. IrSender.begin(DÉSACTIVER_LE_FEEDBACK_LED);
IrSender.begin(DISABLE_LED_FEEDBACK); // Commencez par IR_SEND_PIN comme code PIN d'envoi
begin
de l'objet IrSender
pour initialiser la fonction de transmission infrarouge.-
DISABLE_LED_FEEDBACK
: il s'agit d'un paramètre utilisé pour désactiver le retour LED. Si le retour est activé, la LED clignote lors de la transmission des signaux infrarouges.
IrSender
utilisera une broche de transmission infrarouge prédéfinie (telle que IR_SEND_PIN
) pour envoyer des signaux infrarouges. Cette ligne de code active l'émetteur infrarouge et le prépare à envoyer des signaux infrarouges.2. IrSender.setSendPin(IR_TX_PIN);
IrSender.begin(DISABLE_LED_FEEDBACK); // Commencez par IR_SEND_PIN comme code PIN d'envoi
Appelez la méthode setSendPin
de l'objet IrSender
pour définir la broche de transmission du signal infrarouge sur IR_TX_PIN
.
-
IR_TX_PIN
est un numéro de broche défini qui spécifie la broche exacte utilisée pour transmettre les signaux infrarouges.
En utilisant cette ligne de code, vous pouvez personnaliser le code PIN de transmission infrarouge au lieu d'utiliser celui par défaut. Ceci est particulièrement utile lorsqu'il y a des changements dans les connexions matérielles ou le mappage des broches.
3. Serial.print(F('Envoyer maintenant : adresse=0x1111, commande=0x'));
Serial.println();//Imprime une ligne vierge pour formater la sortie et rendre les informations suivantes plus claires. Serial.print(F('Envoyer maintenant : adresse=0x1111, command=0x'));//Imprimer une chaîne. Serial.print(sCommand, HEX);//Affichage au format hexadécimal. 'Serial.print(F(', repeats='));//Indiquez le nombre de transmissions répétées. Serial.print(sRepeats);//Le nombre de fois que la commande est envoyée. Serial.println();//Imprime une autre ligne vierge pour rendre la sortie plus organisée.
-
Utilisez
Serial.print()
pour imprimer la chaîne 'Envoyer maintenant : adresse=0x1111, command=0x'
. La macroF()
est utilisée ici pour stocker la chaîne dans la mémoire Flash, aidant ainsi à conserver la RAM.
StickCP2.Display.drawString(' ', , );
//drawString A method used to draw a string at a specified position. StickCP2.Display.drawString('IR NEC SEND', StickCP2.Display.width() / 2, StickCP2.Display.height() / 2 - 40); StickCP2.Display.drawString('ADDR:0x1111', StickCP2.Display.width() / 2, StickCP2.Display.height() / 2); StickCP2.Display.drawString('CMD:0x' + String(sCommand, HEX), StickCP2.Display.width() / 2, StickCP2.Display.height() / 2 + 40);
Affichez « IR NEC SEND » à l'aide de la méthode drawString
pour restituer la chaîne à une position spécifiée sur l'écran.
-
StickCP2.Display.width() / 2
: Cela garantit que la chaîne est centrée horizontalement sur l'écran. -
StickCP2.Display.height() / 2 - 40
: Ceci place la chaîne 40 pixels au-dessus du centre vertical de l'écran.
drawString
pour afficher les informations d'adresse.-
StickCP2.Display.width() / 2
: Centre le texte horizontalement sur l'écran. -
StickCP2.Display.height() / 2
: Centre le texte verticalement, en le plaçant en plein milieu de l'écran.
Affichez les informations sur la commande en rendant la chaîne 'CMD:0x' avec la représentation hexadécimale du Variable sCommand
.
-
String(sCommand, HEX)
: convertit la variablesCommand
en une chaîne hexadécimale. -
StickCP2.Display.width() / 2
: Centre le texte horizontalement sur l'écran. -
StickCP2.Display.height() / 2 + 40
: Place le texte 40 pixels en dessous du centre vertical de l'écran.
5. Serial.println(F('Envoyer un NEC standard avec une adresse 16 bits'));
Serial.println(F('Envoyer un NEC standard avec une adresse 16 bits')); StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Dessinez un cercle.
Serial.println()
pour imprimer des informations sur le **moniteur série**, en ajoutant une nouvelle ligne à la fin pour garantir que la sortie suivante commence sur une nouvelle ligne.-
F('Envoyer NEC standard avec une adresse 16 bits')
: La macroF()
stocke la chaîne ' Envoyez un NEC standard avec une adresse 16 bits dans la mémoire Flash (stockage du programme) au lieu de la **RAM**, ce qui permet d'économiser de la mémoire. -
La sortie « Envoyer NEC standard avec une adresse 16 bits » indique qu'un signal infrarouge du protocole NEC standard est transmis avec une **adresse 16 bits**.
6. IrSender.sendNEC()
IrSender.sendNEC(0x1111, sCommand, sRepeats);//Envoyer un signal infrarouge suivant le protocole NEC. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Incrémenter les valeurs d'envoi */
0x1111
: Il s'agit de l'adresse du signal infrarouge, représentant une valeur d'adresse de 16 bits utilisée pour identifier le périphérique cible ou destination de la commande.sCommand
: Il s'agit de la valeur de commande à envoyer. Il peut s'agir d'une valeur 8 bits ou 16 bits, spécifiant l'opération exacte que le périphérique cible doit effectuer.sRépétitions
: indique le nombre de fois où le signal est répété, généralement pour améliorer la fiabilité du signal ou répondre à des exigences spécifiques de l'appareil à contrôler.IrSender.sendNEC(0x1111, sCommand, sRepeats);//Envoyer un signal infrarouge suivant le protocole NEC. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Incrémenter les valeurs d'envoi */
-
0x1111
: Il s'agit de l'adresse de l'appareil du signal infrarouge, utilisée pour identifier un appareil spécifique. -
0x2223
: Il s'agit du code de commande envoyé à l'appareil, précisant l'opération à effectuer. -
sRépétitions
: représente le nombre de fois où le signal est répété, généralement pour garantir la fiabilité du signal ou répondre aux exigences de l'appareil cible.
Programmation Facile
Scénarios d'application flexibles
Pin infrarouge préconfiguré