315Mhz、433Mhz无线遥控信号的解码分析和模拟

摘要
前段时间学习无线电的同时了解到arduino是做为技能还没有成熟技术宅的我继树莓派又一个不错的选择。因而花了200元购得3块arduino开发板(2*nano&1*uno)和其余传感器等,同时看到了315M超再生模块,由于玩无线电的都知道315M是汽车遥控器,防盗闸门,路桥系统等最经常使用的信号频率,因此我就坚决果断的下单了。而后就有了今天的成果。Freebuf也有很多此类文章,关于315,433的解码我已掌握不少方法(其实使用SDR是个不错的选择),对滚码我也有必定研究和破解,本文步骤详细,思路明确,但愿对你们有用。对arduino和315模块熟悉的能够直接进入第三步。
关键词: 315M超再生模块、arduino。
引言:315MHz遥控器使用普遍,学习和深刻了解其原理和实际操做,在得到无限乐趣的同时,能够学会防止本身的车被盗,并能够本身开发更安全的遥控锁设备,在作本项目的过程当中我深入体会到315M遥控系统的不安全性是个严重的问题,主要表如今315遥控系统解码简单,发射条件简单,易拷贝。下面是我在这次学习研究中获得的一些浅陋知识,在此详细描述。
如下是本次学习的原理框架:
Clipboard Image.png
框图说明:接收端接收信号,由arduino单片机解码,并将解码信息经过蓝牙发送到手机,在手机蓝牙串口监视器显示(解码过程);手机发送24位遥控码到单片机,单片机将24位遥控码经过发射端发出,用于遥控模拟接收端经过接收端PT2272芯片解码后在LED信号灯获得反馈,模拟接收端由单片机直接供电,发射端发出的信号也可直接有其余遥控接收端接收达到其余目的。
1、基础知识介绍:
一、Arduino介绍:
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各类型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队最先于2005年冬季开发。其成员包括Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino,David Mellis和Nicholas Zambetti。
它构建于开放原始码simple I/O介面版,而且具备使用相似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是能够用来作电路链接的Arduino电路板;另一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要作些什么了。
Arduino能经过各类各样的传感器来感知环境,经过控制灯光、马达和其余的装置来反馈、影响环境。板子上的微控制器能够经过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,能够只包含Arduino,也能够包含Arduino和其余一些在PC上运行的软件,他们之间进行通讯 (好比 Flash, Processing, MaxMSP)来实现。(摘自百度百科)
2、硬件介绍:
一、Arduino开发板
Arduino是开源硬件中最受IT行业,技术宅,学生喜好的单片机开发板,其编程语言使用C语言,而且不像C51单片机的编程语言那么复杂,因此对于单片机的初学者来讲无疑是最好的选择,本课题为简化实验流程,缩短开发时间,因此选择了简单却强悍的arduino单片机开发板,arduino开发板有不少硬件平台,常见的 arduino有如下两种:
(1) arduino UNO (是本文使用的arduino板卡)  (2)arduino NANO
 
Clipboard Image.png
Clipboard Image.png
二、315M模块如图所示,分为发送端(右)和接收端(左)。
 
Clipboard Image.png
三、用于模拟的遥控器和接收机
Clipboard Image.png
发射模块PT2262
Clipboard Image.png
接收模块PT2272
四、串口蓝牙模块
串口蓝牙模块直接使用蓝牙设备链接并经过接收ASCII码并以串口数据的形式传送至单片机,单片机将数据处理后作出固定反馈,型号为HC-06的蓝牙串口模块的默认名称为“ HC-06“,默认链接密码为“0000”,手机使用蓝牙调试助手等APP 可直接链接并可与手机直接通讯,arduino单片机可直接与电脑进行串口通信,但为了随时演示操做,使用手机直接通信使操做更为方便,HC-06实物图以下:
Clipboard Image.png
3、解码和模拟
一、链接实物图:
Clipboard Image.png
实物图说明:左上角是蓝牙模块HC-06用于手机端链接控制,左边是315接收解码板以及配备遥控器,解码板由arduino供电,链接了5个LED信号灯用于接收的演示,中间是315M超再生模块的发送端和接收端  ,右边是arduino UNO 开发板。
二、315M超再生模块的发送端和接收端链接原理图
Clipboard Image.png
三、模拟测试效果描述:
串口发送A,B,C,D控制发送单次24位遥控二进制码,实现LED编号A,B,C,D的闪烁;
串口发送a,b,c,d控制连续发送24位遥控二进制码,实现LED编号A,B,C,D的常亮。
串口发送除以上任意命令实现LED的关闭。
4、解码验证及源代码
一、解码验证
当按下遥控器A键
●手机串口监视器获得的遥控码为
“010101010101010100001100”
●专业解码器显示的遥控码以下图,实际为24位码(我开始认为最后一位为解码器设计问题所致使的多余位,没有最后一位也能够重放,但后来的学习中我发现好多解码方式都保留了最后一位,实际的信号波形中并无最后一位的高电平出现,因此第25位应该是“0”,对于这个问题我仍是有疑惑,但愿你们帮忙解释)
Clipboard Image.png
逻辑分析仪分析结果
Clipboard Image.png
根据以上三组数据对比,验证单片机解码没有任何问题。
二、arduino源代码以下:
/*本做品使用的例程中包含RCSwitch库文件用于信号的解码和编码发送*/ #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() {   Serial.begin( 9600 ); //串口打印命令帮助信息  Serial. print ( "HELP:A-flash the lamp A\n     B-flash the lamp B\n     C-flash the lamp C\n     D-flash the lamp D\n" );   Serial. print ( "     a-open the lamp A\n     b-open  the lamp B\n     c-open the lamp C\n     d-open  the lamp D\n\n" );     mySwitch.enableReceive( 1 );   mySwitch.enableTransmit( 10 );} 2 void loop() {      if (mySwitch.available())     {     output(mySwitch.getReceivedValue(),mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(),mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());    mySwitch.resetAvailable();     }    /* Same switch as above,but using binary code */    if (Serial.available()> 0 ) //若是串口有数据进入的话   { delay( 10 );            //延时50 能够一次性发送多个命令    char M=Serial.read(); //每次读一个字符,是ASCII码的     if (M== 'A' )     {   Serial. print ( "Thecommand is A\n" );  mySwitch.send( "010101010101010100001100" ); //遥控器-A   Serial. print ( "      OK!!! The LED A has been DONE\n" );     }         if (M== 'a' )     {      Serial. print ( "The command is a\n" );      Serial. print ( "      OK!!! TheLED A has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010100001100" ); //遥控器-A 按下不放       }     }    if (M== 'B' )     {   Serial. print ( "Thecommand is B\n" );  mySwitch.send( "010101010101010111000000" ); //遥控器-B   Serial. print ( "      OK!!! The LED B has been DONE\n" );     }       if (M== 'b' )     {      Serial. print ( "The command is b\n" );       Serial. print ( "      OK!!! The LED B has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010111000000" ); //遥控器-B 按下不放       }     }    if (M== 'C' )     {   Serial. print ( "Thecommand is C\n" );  mySwitch.send( "010101010101010100000011" ); //遥控器-C   Serial. print ( "      OK!!! The LED C has been DONE\n" );     }           if (M== 'c' )     {      Serial. print ( "The command is c\n" );      Serial. print ( "      OK!!! TheLED C has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010100000011" ); //遥控器-C按下不放       }     }    if (M== 'D' )     {   Serial. print ( "Thecommand is D\n" );  mySwitch.send( "010101010101010100110000" ); //遥控器-D   Serial. print ( "      OK!!! The LED D has been DONE\n" );     }           if (M== 'd' )     {      Serial. print ( "The command is d\n" );      Serial. print ( "      OK!!! TheLED D has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010100110000" ); //遥控器-D按下不放       }     }   } }
在整个过程当中为了研究方便用到汽车遥控码解码器,以方便对本次实验解码的正确性进行校验。
Clipboard Image.png Clipboard Image.png
摘要
前段时间学习无线电的同时了解到arduino是做为技能还没有成熟技术宅的我继树莓派又一个不错的选择。因而花了200元购得3块arduino开发板(2*nano&1*uno)和其余传感器等,同时看到了315M超再生模块,由于玩无线电的都知道315M是汽车遥控器,防盗闸门,路桥系统等最经常使用的信号频率,因此我就坚决果断的下单了。而后就有了今天的成果。Freebuf也有很多此类文章,关于315,433的解码我已掌握不少方法(其实使用SDR是个不错的选择),对滚码我也有必定研究和破解,本文步骤详细,思路明确,但愿对你们有用。对arduino和315模块熟悉的能够直接进入第三步。
关键词: 315M超再生模块、arduino。
引言:315MHz遥控器使用普遍,学习和深刻了解其原理和实际操做,在得到无限乐趣的同时,能够学会防止本身的车被盗,并能够本身开发更安全的遥控锁设备,在作本项目的过程当中我深入体会到315M遥控系统的不安全性是个严重的问题,主要表如今315遥控系统解码简单,发射条件简单,易拷贝。下面是我在这次学习研究中获得的一些浅陋知识,在此详细描述。
如下是本次学习的原理框架:
Clipboard Image.png
框图说明:接收端接收信号,由arduino单片机解码,并将解码信息经过蓝牙发送到手机,在手机蓝牙串口监视器显示(解码过程);手机发送24位遥控码到单片机,单片机将24位遥控码经过发射端发出,用于遥控模拟接收端经过接收端PT2272芯片解码后在LED信号灯获得反馈,模拟接收端由单片机直接供电,发射端发出的信号也可直接有其余遥控接收端接收达到其余目的。
1、基础知识介绍:
一、Arduino介绍:
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各类型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队最先于2005年冬季开发。其成员包括Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino,David Mellis和Nicholas Zambetti。
它构建于开放原始码simple I/O介面版,而且具备使用相似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是能够用来作电路链接的Arduino电路板;另一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要作些什么了。
Arduino能经过各类各样的传感器来感知环境,经过控制灯光、马达和其余的装置来反馈、影响环境。板子上的微控制器能够经过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,能够只包含Arduino,也能够包含Arduino和其余一些在PC上运行的软件,他们之间进行通讯 (好比 Flash, Processing, MaxMSP)来实现。(摘自百度百科)
2、硬件介绍:
一、Arduino开发板
Arduino是开源硬件中最受IT行业,技术宅,学生喜好的单片机开发板,其编程语言使用C语言,而且不像C51单片机的编程语言那么复杂,因此对于单片机的初学者来讲无疑是最好的选择,本课题为简化实验流程,缩短开发时间,因此选择了简单却强悍的arduino单片机开发板,arduino开发板有不少硬件平台,常见的 arduino有如下两种:
(1) arduino UNO (是本文使用的arduino板卡)  (2)arduino NANO
 
Clipboard Image.png
Clipboard Image.png
二、315M模块如图所示,分为发送端(右)和接收端(左)。
 
Clipboard Image.png
三、用于模拟的遥控器和接收机
Clipboard Image.png
发射模块PT2262
Clipboard Image.png
接收模块PT2272
四、串口蓝牙模块
串口蓝牙模块直接使用蓝牙设备链接并经过接收ASCII码并以串口数据的形式传送至单片机,单片机将数据处理后作出固定反馈,型号为HC-06的蓝牙串口模块的默认名称为“ HC-06“,默认链接密码为“0000”,手机使用蓝牙调试助手等APP 可直接链接并可与手机直接通讯,arduino单片机可直接与电脑进行串口通信,但为了随时演示操做,使用手机直接通信使操做更为方便,HC-06实物图以下:
Clipboard Image.png
3、解码和模拟
一、链接实物图:
Clipboard Image.png
实物图说明:左上角是蓝牙模块HC-06用于手机端链接控制,左边是315接收解码板以及配备遥控器,解码板由arduino供电,链接了5个LED信号灯用于接收的演示,中间是315M超再生模块的发送端和接收端   ,右边是arduino UNO 开发板。
二、315M超再生模块的发送端和接收端链接原理图
Clipboard Image.png
三、模拟测试效果描述:
串口发送A,B,C,D控制发送单次24位遥控二进制码,实现LED编号A,B,C,D的闪烁;
串口发送a,b,c,d控制连续发送24位遥控二进制码,实现LED编号A,B,C,D的常亮。
串口发送除以上任意命令实现LED的关闭。
4、解码验证及源代码
一、解码验证
当按下遥控器A键
●手机串口监视器获得的遥控码为
“010101010101010100001100”
●专业解码器显示的遥控码以下图,实际为24位码(我开始认为最后一位为解码器设计问题所致使的多余位,没有最后一位也能够重放,但后来的学习中我发现好多解码方式都保留了最后一位,实际的信号波形中并无最后一位的高电平出现,因此第25位应该是“0”,对于这个问题我仍是有疑惑,但愿你们帮忙解释)
Clipboard Image.png
逻辑分析仪分析结果
Clipboard Image.png
根据以上三组数据对比,验证单片机解码没有任何问题。
二、arduino源代码以下:
/*本做品使用的例程中包含RCSwitch库文件用于信号的解码和编码发送*/ #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() {   Serial.begin( 9600 ); //串口打印命令帮助信息  Serial. print ( "HELP:A-flash the lamp A\n     B-flash the lamp B\n     C-flash the lamp C\n     D-flash the lamp D\n" );   Serial. print ( "     a-open the lamp A\n     b-open  the lamp B\n     c-open the lamp C\n     d-open  the lamp D\n\n" );     mySwitch.enableReceive( 1 );   mySwitch.enableTransmit( 10 );} 2 void loop() {      if (mySwitch.available())     {     output(mySwitch.getReceivedValue(),mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(),mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());    mySwitch.resetAvailable();     }    /* Same switch as above,but using binary code */    if (Serial.available()> 0 ) //若是串口有数据进入的话   { delay( 10 );            //延时50 能够一次性发送多个命令    char M=Serial.read(); //每次读一个字符,是ASCII码的     if (M== 'A' )     {   Serial. print ( "Thecommand is A\n" );  mySwitch.send( "010101010101010100001100" ); //遥控器-A   Serial. print ( "      OK!!! The LED A has been DONE\n" );     }         if (M== 'a' )     {      Serial. print ( "The command is a\n" );      Serial. print ( "      OK!!! TheLED A has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010100001100" ); //遥控器-A 按下不放       }     }    if (M== 'B' )     {   Serial. print ( "Thecommand is B\n" );  mySwitch.send( "010101010101010111000000" ); //遥控器-B   Serial. print ( "      OK!!! The LED B has been DONE\n" );     }       if (M== 'b' )     {      Serial. print ( "The command is b\n" );       Serial. print ( "      OK!!! The LED B has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010111000000" ); //遥控器-B 按下不放       }     }    if (M== 'C' )     {   Serial. print ( "Thecommand is C\n" );  mySwitch.send( "010101010101010100000011" ); //遥控器-C   Serial. print ( "      OK!!! The LED C has been DONE\n" );     }           if (M== 'c' )     {      Serial. print ( "The command is c\n" );      Serial. print ( "      OK!!! TheLED C has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010100000011" ); //遥控器-C按下不放       }     }    if (M== 'D' )     {   Serial. print ( "Thecommand is D\n" );  mySwitch.send( "010101010101010100110000" ); //遥控器-D   Serial. print ( "      OK!!! The LED D has been DONE\n" );     }           if (M== 'd' )     {      Serial. print ( "The command is d\n" );      Serial. print ( "      OK!!! TheLED D has hlod ON\n" );       while (Serial.available()<= 0 )       {       mySwitch.send( "010101010101010100110000" ); //遥控器-D按下不放       }     }   } }
在整个过程当中为了研究方便用到汽车遥控码解码器,以方便对本次实验解码的正确性进行校验。
Clipboard Image.png
Clipboard Image.png
相关文章
相关标签/搜索