Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Le but est d'afficher les codes des télécommandes du style commande de lampe, porte de garage et autre fonctionnant sous 433 mhz (RX433) mais aussi celles des télécommandes infra-rouge de la télévision au autre.
On pourra donc ensuite, grâce à un autre montage, envoyer ces codes et piloter n'importe quoi !
Étape 1: Le Montage
Simple, un Arduino Nano, une diode réceptrice infra-rouge et un récepteur 433 mhz.
Étape 2: Le Code Arduino
//InfraRouge
#comprendre
int recvPin = 11; //pin Arduino pour récepteur InfraRouge (TOSP4838)
IRrecv irrecv(recvPin);
//RX433
#comprendre
RCSwitch monSwitch = RCSwitch();
decode_results résultats;
void setup ()
{
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);//allume la LED interne lors de l'envoie InfraRouge
mySwitch.enableReceive(0); // Récepteur RX433 (XY-MK-5V) sur pin 2 de Arduino Uno et Nano
}
// affichage des codes InfraRouge
annuler l'ircode (decode_results *results)
{
// Panasonic
if (results->decode_type == PANASONIC) {
Serial.print(résultats->adresse, HEX);
Serial.print(":");
}
Serial.print(résultats->valeur, HEX);
}//annuler
// afficahge des codes encodés
encodage vide (decode_results *results)
{
switch (results->decode_type) {
défaut:
case INCONNU: Serial.print("Inconnu"); Pause;
case NEC: Serial.print("NEC"); Pause;
case SONY: Serial.print("SONY"); Pause;
case RC5: Serial.print("RC5"); Pause;
case RC6: Serial.print("RC6"); Pause;
case DISH: Serial.print("DISH"); Pause;
case SHARP: Serial.print("SHARP"); Pause;
case JVC: Serial.print("JVC"); Pause;
case SANYO: Serial.print("SANYO"); Pause;
case MITSUBISHI: Serial.print("MITSUBISHI"); Pause;
case SAMSUNG: Serial.print("SAMSUNG"); Pause;
cas LG: Serial.print("LG"); Pause;
case POURQUOI: Serial.print("WHYNTER"); Pause;
case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); Pause;
case PANASONIC: Serial.print("PANASONIC"); Pause;
case DENON: Serial.print("Denon"); Pause;
}
}
// vidage des résultats
void dumpInfo (decode_results *results)
{
// Vérifie si le buffer a débordé
if (résultats-> débordement) {
Serial.println("Code IR trop long. Modifiez IRremoteInt.h et augmentez RAWBUF");
revenir;
}
// Afficher la norme d'encodage
Serial.print("Encodage: ");
encodage(résultats);
Serial.println("");
// Afficher le code et la longueur
Serial.print("Code: ");
ircode(résultats);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
}
//structure
void dumpRaw (decode_results *results)
{
// Imprimer les données brutes
Serial.print("Timing[");
Serial.print(results-> rawlen-1, DEC);
Serial.println("]: ");
pour (int i = 1; i rawlen; i++) {
non signé long x = résultats->rawbuf * USECPERTICK;
if (!(i & 1)) { // pair
Serial.print("-");
if (x < 1000) Serial.print(" ");
if (x < 100) Serial.print(" ");
Serial.print(x, DEC);
} else { // impair
Serial.print(" ");
Serial.print("+");
if (x < 1000) Serial.print(" ");
if (x < 100) Serial.print(" ");
Serial.print(x, DEC);
if (i rawlen-1) Serial.print(", "); //', ' pas nécessaire pour le dernier
}
if (!(i % 8)) Serial.println("");
}
Serial.println(""); // Nouvelle ligne
}
//+=============================================================================
// Videz la structure decode_results.
//
void dumpCode (decode_results *results)
{
// Début de la déclaration
Serial.print("unsigned int "); // type de variable
Serial.print("rawData["); // nom du tableau
Serial.print(results-> rawlen - 1, DEC); // taille du tableau
Serial.print("] = {"); // Début de la déclaration
// Vider les données
pour (int i = 1; i rawlen; i++) {
Serial.print(results->rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print(", "); // ', ' pas nécessaire sur le dernier
if (!(i & 1)) Serial.print(" ");
}
// Fin de la déclaration
Serial.print("};"); //
// Commenter
Serial.print(" // ");
encodage(résultats);
Serial.print(" ");
ircode(résultats);
// Nouvelle ligne
Serial.println("");
// Maintenant, videz les codes "connus"
if (results->decode_type != UNKNOWN) {
// Certains protocoles ont une adresse
if (results->decode_type == PANASONIC) {
Serial.print("unsigned int addr = 0x");
Serial.print(résultats->adresse, HEX);
Serial.println(";");
}
// Tous les protocoles ont des données
Serial.print("données entières non signées = 0x");
Serial.print(résultats->valeur, HEX);
Serial.println(";");
}
}
boucle vide ()
/****************************************************** * InfraRouge ******************************************/
{
decode_results résultats; // Quelque part pour stocker les résultats
if (irrecv.decode(&results)) { // Saisir un code IR
dumpInfo(&results); // Sortir les résultats
dumpRaw(&results); // Sortir les résultats au format RAW
dumpCode(&results); // Sortir les résultats sous forme de code source
Serial.println(""); // Ligne vide entre les entrées
irrecv.resume(); // Préparer la prochaine valeur
}
/****************************************************** *** RX433 **************************************************/
if (mySwitch.available())
{
valeur int = mySwitch.getReceivedValue();
Serial.println("RX433");
si (valeur == 0) {
Serial.print("Code inconnu");
} autre
{
Serial.print("Reçu ");
Serial.print(mySwitch.getReceivedValue());
Serial.print(" / ");
Serial.print(mySwitch.getReceivedBitlength());
Serial.print("bit ");
Serial.print("Protocole: ");
Serial.println(mySwitch.getReceivedProtocol());
}
mySwitch.resetAvailable();
}//RX433
}//boucle
Étape 3: Infos Sur Les Codes Infra-Rouge
Il y a plusieurs protocoles:
NEC: 32 bits (détails du protocole)
Sony: 12 ou 20 bits (détails du protocole) (Comprendre les codes des télécommandes IR Sony.)
RC5: 12 bits (détails du protocole)
RC6: 20 ou 36 bits (détails du protocole)
Pour Sony et RC5/6, chaque transmission doit être répétée 3 fois !
ATTENTION: la librairie IRremote.h ne semble pas pouvoir envoyer des codes codés sur plus de 32bits. Les RC6, 36 doivent donc être envoyés en raw, qui prennent plus de taille mémoire.
L'envoie des codes se fera avec la librairie IRremote.h
Exemple: (0x devant le code) et le nombre de bits irsend.sendNEC(0xA55A38C7, 32);
Etape 4: Infos Sur Codes RX433
L'envoie se fera avec la librairie RCSwitch.h
Exemple mySwitch.send(1975778, 24);
On peut facilement piloter avec cela des prises commandées.