Taula de continguts:
- Pas 1: Le Montage
- Pas 2: Le Code Arduino
- Pas 3: Informació sobre els codis Infra-Rouge
- Pas 4: Informació sobre els codis RX433
Vídeo: Récupérer Les Codes Infra-Rouge Et 433mhz: 4 Steps
2025 Autora: John Day | [email protected]. Última modificació: 2025-01-12 07:25
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 ceux des télécommandes infra-rouge de télévision au autre.
On pourra donc ensuite, grâce à une autre montage, envoyer ces codes et piloter n’importe quoi!
Pas 1: Le Montage
Simple, un Arduino Nano, un diode réceptrice infra-rouge i un récepteur 433 mhz.
Pas 2: Le Code Arduino
// InfraRouge
#incloure
int recvPin = 11; // pin Arduino pour récepteur InfraRouge (TOSP4838)
IRrecv irrecv (recvPin);
// RX433
#incloure
RCSwitch mySwitch = RCSwitch ();
resultats decode_results;
configuració nul·la ()
{
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
ircode nul (resultats decode_results *)
{
// Panasonic
if (resultats-> decode_type == PANASONIC) {
Serial.print (resultats-> adreça, HEX);
Serial.print (":");
}
Serial.print (resultats-> valor, HEX);
}//buit
// afficahge des codes encodés
codificació nul·la (decode_results * resultats)
{
commutador (resultats-> decode_type) {
per defecte:
cas desconegut: Serial.print ("Inconnu"); trencar;
cas NEC: Serial.print ("NEC"); trencar;
cas SONY: Serial.print ("SONY"); trencar;
cas RC5: Serial.print ("RC5"); trencar;
cas RC6: Serial.print ("RC6"); trencar;
cas DISH: Serial.print ("DISH"); trencar;
cas SHARP: Serial.print ("SHARP"); trencar;
cas JVC: Serial.print ("JVC"); trencar;
cas SANYO: Serial.print ("SANYO"); trencar;
cas MITSUBISHI: Serial.print ("MITSUBISHI"); trencar;
cas SAMSUNG: Serial.print ("SAMSUNG"); trencar;
cas LG: Serial.print ("LG"); trencar;
cas WHYNTER: Serial.print ("WHYNTER"); trencar;
cas AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); trencar;
cas PANASONIC: Serial.print ("PANASONIC"); trencar;
cas DENON: Serial.print ("Denon"); trencar;
}
}
// bolca els resultats
void dumpInfo (resultats decode_results *)
{
// Comproveu si la memòria intermèdia ha desbordat
if (resultats-> desbordament) {
Serial.println ("El codi IR és massa llarg. Editeu IRremoteInt.h i augmenteu RAWBUF");
tornar;
}
// Mostra l'estàndard de codificació
Serial.print ("Codificació:");
codificació (resultats);
Serial.println ("");
// Mostra el codi i la longitud
Serial.print ("Codi:");
ircode (resultats);
Serial.print ("(");
Serial.print (resultats-> bits, DEC);
Serial.println ("bits)");
}
// estructura
void dumpRaw (decode_results * resultats)
{
// Imprimeix dades en brut
Serial.print ("Temporització [");
Serial.print (resultats-> rawlen-1, DEC);
Serial.println ("]:");
for (int i = 1; i rawlen; i ++) {
unsigned long x = results-> rawbuf * USECPERTICK;
if (! (i & 1)) {// fins i tot
Serial.print ("-");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
} else {// imparell
Serial.print ("");
Serial.print ("+");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
if (i rawlen-1) Serial.print (","); // ',' no és necessari per a l'últim
}
if (! (i% 8)) Serial.println ("");
}
Serial.println (""); // Nova línia
}
//+=============================================================================
// Voleu l’estructura decode_results.
//
void dumpCode (resultats decode_results *)
{
// Iniciar declaració
Serial.print ("int signat"); // tipus variable
Serial.print ("rawData ["); // nom de la matriu
Serial.print (resultats-> rawlen - 1, DEC); // mida de la matriu
Serial.print ("] = {"); // Iniciar declaració
// Bolqueu les dades
for (int i = 1; i rawlen; i ++) {
Serial.print (resultats-> rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print (","); // ',' no és necessari a l'últim
if (! (i & 1)) Serial.print ("");
}
// Declaració final
Serial.print ("};"); //
// Comenta
Serial.print ("//");
codificació (resultats);
Serial.print ("");
ircode (resultats);
// Nova línia
Serial.println ("");
// Ara bolqueu els codis "coneguts"
if (resultats-> decode_type! = INCONEGUT) {
// Alguns protocols tenen una adreça
if (resultats-> decode_type == PANASONIC) {
Serial.print ("unsigned int addr = 0x");
Serial.print (resultats-> adreça, HEX);
Serial.println (";");
}
// Tots els protocols tenen dades
Serial.print ("dades sense signar int = 0x");
Serial.print (resultats-> valor, HEX);
Serial.println (";");
}
}
bucle buit ()
/ ************************************************** * InfraRouge ******************************************* /
{
resultats decode_results; // En algun lloc on emmagatzemar els resultats
if (irrecv.decode (& results)) {// Agafa un codi IR
dumpInfo (& resultats); // Sortiu els resultats
dumpRaw (& resultats); // Emet els resultats en format RAW
dumpCode (& resultats); // Sortiu els resultats com a codi font
Serial.println (""); // Línia en blanc entre les entrades
irrecv.resume (); // Prepareu-vos per al següent valor
}
/ ************************************************** *** RX433 ********************************************* /
if (mySwitch.available ())
{
valor int = mySwitch.getReceivedValue ();
Serial.println ("RX433");
if (valor == 0) {
Serial.print ("Codage inconnu");
} més
{
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
} // bucle
Pas 3: Informació sobre els codis Infra-Rouge
Hi ha diversos protocols:
NEC: 32 bits (detalls del protocol)
Sony: 12 o 20 bits (detalls del protocol) (Descripció dels codis remots de Sony IR).
RC5: 12 bits (detalls del protocol)
RC6: 20 o 36 bits (detalls del protocol)
Pour Sony et RC5 / 6, chaque transmission doit être répétition 3 fois!
ATENCIÓ: la llibertat IRremote.h no semble pas pouvoir envoyer des codes codés sur plus de 32bits. Les RC6, 36 doivent donc êtres envoyer en raw, qui prennent plus de taille mémoire.
L’envoie des codes se fera amb la librairie IRremote.h
Exemple: (0x devant le code) i el nombre de bits irsend.sendNEC (0xA55A38C7, 32);
Pas 4: Informació sobre els codis RX433
L’envoie se fera avec la librairie RCSwitch.h
Exemple mySwitch.send (1975778, 24);
On peut facilement piloter amb cela des prises commandés.