ASKOOK人工手动解码及重放俺是如何开启车库门得
本文以开启无线管控的电动车库卷帘门为目标,深入研讨测试了ASK/OOK的编/解码,并用树莓派+五元钱的
配景
车库装了电动卷帘门,为了懂得其安全性,也是为了能自立节制,研讨了下其遥控道理。其实在这个过程当中,我测试了家里险些所有的无电线遥控器,包含电动窗帘、投影幕布、电动衣架、车钥匙。除车钥匙,别的都是类似的,即ASK/OOK编码。
ASK,简略的懂得,便是调幅,用分歧的幅度来代表分歧的信息。OOK是ASK的特例,因为只需0和1要表现,能够用有载波来代表1,无载波来代表0。但现实上并非这么间接,平日会加之脉宽调制(PWM)以进步抗滋扰才能。
用HackRF确定可行性
听说有的车库门是转动码的(编码是变更的),咱们能够先用HackRF做个简略的重放进击测试。
录制2秒的旌旗灯号并重放:
hackrf_transfer -f 433920000 -s 2000000 -a 1 -r capture.raw -n 4000000 -g 40 -l 16
hackrf_transfer -f 433920000 -s 2000000 -a 1 -t capture.raw -x 40
部门运转提醒:
call hackrf_set_sample_rate(2000000 Hz/2.000 MHz)
call hackrf_set_hw_sync_mode(0)
call hackrf_set_freq(433920000 Hz/433.920 MHz)
call hackrf_set_amp_enable(1)
samples_to_xfer 4000000/4Mio
Stop with Ctrl-C
3.9 MiB / 1.000 sec = 3.9 MiB/second
3.9 MiB / 1.000 sec = 3.9 MiB/second
0.3 MiB / 1.000 sec = 0.3 MiB/second
Exiting... hackrf_is_streaming() result: streaming terminated (-1004)
实测用录制的旌旗灯号是能够节制的(假如不可,留意调剂HackRF缩小器的增益)。但这个没多大技巧含量,并且本钱高,数据量也大。咱们的目的是解码后再从新编码/重放。
用GNU Radio录制旌旗灯号
用GNU Radio搭一个简略的接管框图,一方面将接管旌旗灯号保留到文件,另一方面将旌旗灯号以瀑布图表现作为及时反应。因为遥控旌旗灯号是433.92MHz,中间频率设在这个邻近都能够;采样率2M就够了。
图1:gnuradio-companion 衔接框图
下图是运转时的瀑布图,此中按了5次遥控器。
图2:gnuradio-companion 运转时的瀑布图
用 Inspectrum 手动解码
用apt-get装配inspectrum,或下载最新的Inspectrum代码,依照文档自行编译。试过Debian和Mac下都没问题(Mac下用MacPorts要装配一堆依附)。编译就未几说了,上面是解码的重要步调:
1. 用Inspectrum关上后面录制的文件,设置采样率为录制时的采样率(2M);
2. 程度拖动,找到有旌旗灯号的地区;
3. 在原始旌旗灯号上右键,Add derived plot => Add sample plot;
4. 此时原始旌旗灯号上会呈现两条程度线,用鼠标拖动,调理中间频率的地位和宽度;
5. 在原始旌旗灯号上右键,Add derived plot => Add amplitude plot;
6. 在Amplitude plot上右键,Add derived plot => Add threshold plot;
7. 勾选”Enable cursors”,此时会呈现两条竖线;
8. Zoom缩小旌旗灯号图,挪动两条竖线,使其宽度包含一个标记。留意跳过前导的高下电平(start1, start0)。数据平日是脉宽编码的,一对高下电平的组合代表一个bit:高电平较宽的代表1,低电平较宽的代表0。从图中应当能看出这个纪律。
9. 转变标记数,使其包含全部旌旗灯号地区(图中是65个标记,这相当于完备的key),并调理首尾对齐(停止时平日有较长的低电平),这时候能够获得标记的速度,即波特率(对OOK,实在等同于比特率)。
图3:用Inspectrum解码的步调
末了,在Amplitude plot或Threshold plot上分离点右键,Extract symbols (to stdout),能够获得解码的数据。此中前者相当于模仿旌旗灯号,简略懂得:正数代表1,正数代表0;后者才是咱们想要的bit流。
图4:用Inspectrum解码的成果
为确认解码准确,能够再选一段旌旗灯号地区,做异样的操纵,看成果能否同等。究竟ASK抗滋扰不强,有时候能够会差一两个bit。平日,按一下遥控器,异样的数据会反复发送几回。
遥控旌旗灯号编码阐发
依据后面的解码,和对更多遥控器的阐发,能够演绎出一个模子。一个ASK旌旗灯号包含以下部门(参数):
start1: 肇端的高电平光阴长度;
start0: 肇端的低电平光阴长度;
stop0: 停止的低电平光阴长度;
period: 每一个bit的周期,在PWM编码中,每一个bit都对应一对高/低电平,并且老是先高后低;
duty: 占空比,好比占空比是75%,则意味着一个周期内假如75%阁下是高电平,则代表1; 而75%阁下是低电平则代表0;
bits: 现实的bit流。
这里的占空比确定是大于50%的,平日在75%阁下比拟适合,如许既能拉开(每一个周期内)两种电平的比例差,削减接管端的误判;又能包管接管时能采样到两种电平,也是为了削减误码。试想对付99%的占空比,1%周期的电平很能够被接管端采样不到,招致采样到199%(乃至更长)周期的同一种电平,如许解码时就会失足。
发射模块
最后,我是想用GNU Radio做ASK/OOK编码并发射的。全能的HackRF和SDR按说能搞定这个小Case。
研讨了下,发明这并非一件轻易的事。必要应用很多的模块。这也许是一个很好的GNU Radio的练习题。但我照样先看下有无更简略的方法。
本文以开启无线管控的电动车库卷帘门为目标,深入研讨测试了ASK/OOK的编/解码,并用树莓派+五元钱的
配景
车库装了电动卷帘门,为了懂得其安全性,也是为了能自立节制,研讨了下其遥控道理。其实在这个过程当中,我测试了家里险些所有的无电线遥控器,包含电动窗帘、投影幕布、电动衣架、车钥匙。除车钥匙,别的都是类似的,即ASK/OOK编码。
ASK,简略的懂得,便是调幅,用分歧的幅度来代表分歧的信息。OOK是ASK的特例,因为只需0和1要表现,能够用有载波来代表1,无载波来代表0。但现实上并非这么间接,平日会加之脉宽调制(PWM)以进步抗滋扰才能。
用HackRF确定可行性
听说有的车库门是转动码的(编码是变更的),咱们能够先用HackRF做个简略的重放进击测试。
录制2秒的旌旗灯号并重放:
hackrf_transfer -f 433920000 -s 2000000 -a 1 -r capture.raw -n 4000000 -g 40 -l 16
hackrf_transfer -f 433920000 -s 2000000 -a 1 -t capture.raw -x 40
部门运转提醒:
call hackrf_set_sample_rate(2000000 Hz/2.000 MHz)
call hackrf_set_hw_sync_mode(0)
call hackrf_set_freq(433920000 Hz/433.920 MHz) 内容来自无奈安全网
call hackrf_set_amp_enable(1)
samples_to_xfer 4000000/4Mio
Stop with Ctrl-C
3.9 MiB / 1.000 sec = 3.9 MiB/second
3.9 MiB / 1.000 sec = 3.9 MiB/second
0.3 MiB / 1.000 sec = 0.3 MiB/second
Exiting... hackrf_is_streaming() result: streaming terminated (-1004)
实测用录制的旌旗灯号是能够节制的(假如不可,留意调剂HackRF缩小器的增益)。但这个没多大技巧含量,并且本钱高,数据量也大。咱们的目的是解码后再从新编码/重放。
用GNU Radio录制旌旗灯号
用GNU Radio搭一个简略的接管框图,一方面将接管旌旗灯号保留到文件,另一方面将旌旗灯号以瀑布图表现作为及时反应。因为遥控旌旗灯号是433.92MHz,中间频率设在这个邻近都能够;采样率2M就够了。
图1:gnuradio-companion 衔接框图
下图是运转时的瀑布图,此中按了5次遥控器。
copyright 无奈人生
图2:gnuradio-companion 运转时的瀑布图
用 Inspectrum 手动解码
用apt-get装配inspectrum,或下载最新的Inspectrum代码,依照文档自行编译。试过Debian和Mac下都没问题(Mac下用MacPorts要装配一堆依附)。编译就未几说了,上面是解码的重要步调:
1. 用Inspectrum关上后面录制的文件,设置采样率为录制时的采样率(2M);
2. 程度拖动,找到有旌旗灯号的地区;
3. 在原始旌旗灯号上右键,Add derived plot => Add sample plot;
4. 此时原始旌旗灯号上会呈现两条程度线,用鼠标拖动,调理中间频率的地位和宽度;
5. 在原始旌旗灯号上右键,Add derived plot => Add amplitude plot;
6. 在Amplitude plot上右键,Add derived plot => Add threshold plot;
7. 勾选”Enable cursors”,此时会呈现两条竖线;
8. Zoom缩小旌旗灯号图,挪动两条竖线,使其宽度包含一个标记。留意跳过前导的高下电平(start1, start0)。数据平日是脉宽编码的,一对高下电平的组合代表一个bit:高电平较宽的代表1,低电平较宽的代表0。从图中应当能看出这个纪律。
9. 转变标记数,使其包含全部旌旗灯号地区(图中是65个标记,这相当于完备的key),并调理首尾对齐(停止时平日有较长的低电平),这时候能够获得标记的速度,即波特率(对OOK,实在等同于比特率)。 www.wnhack.com
图3:用Inspectrum解码的步调
末了,在Amplitude plot或Threshold plot上分离点右键,Extract symbols (to stdout),能够获得解码的数据。此中前者相当于模仿旌旗灯号,简略懂得:正数代表1,正数代表0;后者才是咱们想要的bit流。
图4:用Inspectrum解码的成果
为确认解码准确,能够再选一段旌旗灯号地区,做异样的操纵,看成果能否同等。究竟ASK抗滋扰不强,有时候能够会差一两个bit。平日,按一下遥控器,异样的数据会反复发送几回。
遥控旌旗灯号编码阐发
依据后面的解码,和对更多遥控器的阐发,能够演绎出一个模子。一个ASK旌旗灯号包含以下部门(参数):
start1: 肇端的高电平光阴长度;
start0: 肇端的低电平光阴长度;
stop0: 停止的低电平光阴长度;
period: 每一个bit的周期,在PWM编码中,每一个bit都对应一对高/低电平,并且老是先高后低;
本文来自无奈人生安全网
duty: 占空比,好比占空比是75%,则意味着一个周期内假如75%阁下是高电平,则代表1; 而75%阁下是低电平则代表0;
bits: 现实的bit流。
这里的占空比确定是大于50%的,平日在75%阁下比拟适合,如许既能拉开(每一个周期内)两种电平的比例差,削减接管端的误判;又能包管接管时能采样到两种电平,也是为了削减误码。试想对付99%的占空比,1%周期的电平很能够被接管端采样不到,招致采样到199%(乃至更长)周期的同一种电平,如许解码时就会失足。
发射模块
最后,我是想用GNU Radio做ASK/OOK编码并发射的。全能的HackRF和SDR按说能搞定这个小Case。
研讨了下,发明这并非一件轻易的事。必要应用很多的模块。这也许是一个很好的GNU Radio的练习题。但我照样先看下有无更简略的方法。
无奈人生安全网
本文来自无奈人生安全网