物联网关键技术这门课一听,肯定是技术相连。在我们的印象中物联网是通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通讯,以实现智能化识别、定位、跟踪、监控和管理的一种网络,物联网的三项关键技术与领域包括,关键技术:传感器技术、RFID标签、嵌入式系统技术。领域:公共事务管理(节能环保、交通管理等)、公众社会服务(医疗健康、家居建筑、金融保险等)、经济发展建设(能源电力、物流零售等)。而在这门课上我们也将学习更加深的一部分。
在物联网应用中有三项关键技术:
1.传感器技术,这也是计算机应用中的关键技术。大家都知道,到目前为止绝大部分计算机处理的都是数字信号。
2、RFID标签也是一种传感器技术,RFID技术是融合了无线射频技术和嵌入式技术为一体的综合技术,RFID在自动识别、物品物流管理有着广阔的应用前景。
3、嵌入式系统技术是综合了计算机软硬件、传感器技术、集成电路技术、电子应用技术为一体的复杂技术。如果把物联网用人体做一个简单比喻,传感器相当于人的眼睛、鼻子、皮肤等感官,网络就是神经系统用来传递信息,嵌入式系统则是人的大脑,在接收到信息后要进行分类处理。
在物联网关键技术这门课上我们使用的就是物联网新大陆,运用于嵌入式,无线通信,RFID,传感器的内容。这里我介绍下嵌入式中LED场景实验。
1.物联网新大陆平台
优势:
- 提高效率和节约成本;
- 丰富信息和拓展服务;
- 创新模式和增加价值。物联网是一种将各种物体通过信息传感器和网络技术相连的新型网络,它可以实现对物体的智能化管理和控制。
2.ESP8622
ESP8266是一种强大的WIFI模块,它由ESPRESSIF SYSTEMS公司开发,可以实现与网络通信的功能。ESP8266在物联网中被广泛使用,可以通过串行通信接口连接到微控制器,例如Arduino,以实现智能家居、智能灯光、智能车辆等应用场景。
使用步骤:
1. 连接ESP8266:将ESP8266连接到微控制器的串行通信接口。
2. 设置WIFI:通过AT指令设置ESP8266的WIFI连接信息。
3. 连接服务器:通过AT指令连接到服务器,实现与服务器的通信。
4. 发送数据:通过AT指令发送数据到服务器。
5. 接收数据:通过AT指令从服务器接收数据。
特点:
1. 高度集成:ESP8266集成了TCP/IP协议栈,可以直接连接到WIFI网络,无需额外的外部芯片。
2. 低功耗:ESP8266的功耗非常低,可以在待机模式下耗电仅为20uA,适合用于电池供电的应用场景。
3. 易于编程:ESP8266可以通过AT指令和本进行编程,非常容易上手。
4. 低成本:ESP8266的成本非常低,价格在几美元左右,可以大规模应用于物联网产品中。
指令集的发送:
1.发送AT+CWMODE=1,配置模块为STA模式(参数1,2,3分别对应模式STA,AP和STA/AP)。此模式下,esp8266模块相当于客户端,可以连接其他路由器;
2.发送AT+CWLAP指令扫描当前附近WiFi,模块会返回可用AP列表。
3.使用AT+CWJAP=“WiFi名称”,"WiFi密码"连接到指定的路由器,比如我的手机热点是 “123456”,密码是“q12345”,实际连接WiFi发送的指令就是AT+CWJAP=“123456”,“q12345”.
按键控制ESP8622上灯的亮
1、8266芯片的通用管脚GPIO在使用前需设定该脚的方向,若作为控制脚,比如控制某个LED亮灭,需设为“输出”模式;若连接某个按键,则作为“输入”模式。 先在初始化函数里设置管脚的模式,OUTPUT为输出,INPUT为输入,在Arduino里可以用数字来代替管脚号。
- 当某管脚作为输出脚时,可以通过DigitalWrite()函数来控制该脚的电平大小。
- 如果要读取某个输入脚的状态值,DigitalRead()函数.
- Arduino自带串口工具,但是在使用前先设定初始条件
使用Arduino软件
Arduino是一套便捷、灵活、容易上手的硬件开发平台,它包括多种型号的Arduino控制电路板,和专用编程开发软件。Arduino省略了很多繁琐的底层开发。它构建于开放原始码simple I/O介面版,并且具有使用类似java、C语言的Processing/Wiring。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是通过 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件。
步骤
1. 双击桌面上的快捷方式,打开Arduino IDE编程界面。
2. 通过数据线将板和电脑连接,打开电脑的设备管理器查看端口号。
3. 进入编程界面之后,点击上面菜单栏中的【工具】---【开发板】---【选择Arduino 】
4. 接下来选择【工具】---【端口】---【选择我们设备管理识别到的端口】。
5. 我们可以直接开始编写程序,或者是直接打开一个格式的程序文件。
6. 程序编写完成之后,我们需要单击菜单栏中的“√”编译程序,并在右下角等待“编译完成”字样。
低频卡串口
NewLab平台通信协议
(1)协议格式
SYNC | ID | Command | Size | Data | CRC16 | ||||
ff | 55 | 00 | 00 | 01 | 01 | 00 | xx xx xx xx | 50 | 74 |
SYNC: 通信协议同步帧,
ID:从设备地址
Command:命令
Size:数据段大小
CRC16: 采用CRC16校验方式,是用 ff 55 +( 数据段),将该数据段拷贝到 http://www.ip33.com/crc.html, 在参数模型NAME中选:CRC-16/MODBUS.
例如:ff 55 00 00 01 01 00 50 74--> ( 00 00 01 01 00) -->求出:5074
小测试:
问:“ff 55 00 00 33 33 02 00 12 45 66” 该发送的信息中命令是哪个字段?数据是哪个字段,哪个字段是CRC16,该校验值是否正确?
答:指令:33 33
数据:00
该校验位不正确,正确的是: 8D 31
(2)电子标签通信协议,命令解析
主从命令 | 描述 | 样例 | |
01 01 | 读取低频卡信息 | FF 55 00 00 01 01 00 50 74 | |
响应 | 返回数据长度为01,为错误,返回数据长度为08,说明读取到卡号信息 | FF 55 00 00 81 01 08 07 A8 50 32 49 5A 05 70 42 53 | |
03 03 | 无密码读块数据 | FF 55 00 00 03 03 01 00 CF F1 | |
响应 | 返回数据长度为01,为错误,返回数据长度为04,说明读取到数据 | ||
03 04 | 无密码写块数据 格式:地址(1字节)+数据(4字节) 说明:地址:范围0~7,最高位为0时,不固化,为1时,固化该块数据块 | FF 55 00 00 03 04 05 01 00 00 00 00 47 48 | |
响应 | 返回数据域为0,说明操作成功 | ||
03 05 | 低频保护读操作 | FF 55 00 00 03 05 05 01 12 34 56 78 b3 23 | |
响应 | 返回数据长度为01,为错误,返回数据长度为04,说明读取到数据 | ||
03 06 | 低频保护写操作 格式:地址(1字节)+数据(4字节)+密码(4字节) 说明:地址:范围0~7,最高位为0时,不固化,为1时,固化该块数据块 | FF 55 00 00 03 06 09 01 11 22 33 44 12 34 56 78 08 20 | |
响应 | 返回数据域为0,说明操作成功 | ||
02 04 | 低频初始化卡片(无密码) | FF 55 00 00 02 04 00 00 87 | |
响应 | 返回数据域为0,说明操作成功 | FF 55 00 00 82 04 01 00 EE 33 FF 55 00 00 82 04 01 01 7E 32 | |
02 05 | 低频卡加密 | FF 55 00 00 02 05 04 12 34 56 78 91 A3 | |
响应 | 返回数据域为0,说明操作成功 | ||
02 06 | 低频卡密码清除 | FF 55 00 00 02 06 04 12 34 56 78 A2 A3 | |
响应 | 返回数据域为0,说明操作成功 |
串口助手
-
新建窗体
2.在主窗体添加工具控件
3.容器类的工具控件
控件的属性
根据以上学习的控件,先试行设计下面所展示的主窗体
二、简易设置端口的程序设计:
用户只需要设置端口(串口号)即可,不需要设定波特率、数据位宽、停止位、奇偶校验位等设置
创建串口对象,并简单初始化
在加载窗体时,获取本机端口号,并添加到下拉选项框中
在单击打开串口的方法内重写设置串口号
高频卡
中高频段射频标签的工作频率一般为3MHz ~ 30MHz。典型工作频率为:13.56MHz。该频段的射频标签,从射频识别应用角度来说,因其工作原理与低频标签完全相同,即采用电感耦合方式工作,所以宜将其归为低频标签类中。另一方面,根据无线电频率的一般划分,其工作频段又称为高频,如表2.2所示,所以也常将其称为高频标签。鉴于该频段的射频标签可能是实际应用中最大量的一种射频标签,因而我们只要将高、低理解成为一个相对的概念,即不会在此造成理解上的混乱。为了便于叙述,我们将其称为中频射频标签。
Mifare S50(M1)卡的内部结构
https://blog.csdn.net/text2204
https://blog.csdn.net/qq_44855807/
MIFARE CLASSIC是恩智浦半导体开发的可用于非接触式智能卡,我们一般称为M1卡,是非接触式IC卡的一种。符合ISO/IEC 14443A类标准。
有S20,S50(M1),S70几种规格,主要是根据存储器容量划分,存储器容量分别为320B,1K,4K,直观体现就是S50只有16个扇区,而S70有40个扇区,适用的场景不同。
应用范围:
门禁、考勤、会议签到、身份识别、物流、工业自动化、各种会员卡、如售饭、地铁、公交代币卡、俱乐部等电子消费、电子门票、动物识别、目标跟踪、洗衣管理、各种一卡通等等。
主要性能参数
-
●通讯速率: 106Kbps
-
●读写距离: 0 ~ 100mm
-
●读写时间: 1 ~ 5ms
-
●工作温度: -20℃ ~ +55℃
-
●擦写寿命: >100,000次
-
●数据保存: >10年
-
●外形尺寸: ISO标准卡 85.6x54x0.82
-
●封装材料: PVC、PET、PETG、0.13mm铜线
-
●封装工艺: 超声波自动植线/自动碰焊
-
●执行标准: ISO14443A
-
●可供尺寸: 85.6×54,83×20,70×40,50×50,45×45,45×28,44×20,38×38,35×30
卡片构成
MF1 S50卡片本身是塑料,里面有一块芯片和几匝线圈。集成电路芯片内含1 K byte EEPROM、RF接口和数字控制单元。能量和数据通过天线传输,卡中天线为几匝线圈,直接连接到芯片上。不再需要额外的组件。
RF接口:调制解调器、检波器、时钟发生器、上电复位、稳压器
防冲突:读写范围内的几张卡可以逐一选定和操作,防止干扰。
认证:在所有存储器操作之前进行认证过程,保证必须通过各块指定的密钥才能访问该块。
控制和算术逻辑单元:数值以特定的冗余格式存储,可以增减。
加密单元:域验证的CRYPTO1 数据流加密,保证数据交换的安全。
EEPROM: 1 Kbyte,分16区,每区4块。每一块有16字节,这就是数据存储的模块。
特性
非接触数据传输并提供能源(不需电池)
工作距离:可达100mm (取决于天线尺寸结构)
工作频率:13.56 MHz
快速数据传输:106 kbit/s
高度数据完整性保护:16 Bit CRC,奇偶校验,位编码,位计数
RF接口(ISO/IEC 14443A):根据非接触式智能卡标准实现。两个方向的数据通信在每一帧的开始只有一个起始位。每个字节一位校验位(奇校验)。选择块的最低(LSB)的字节最选传输,最大帧长度为163位(16字节数据+ 2 CRC字节= 16´2´9 + 9 + 1起始位)。
EEPROM:1 Kbyte,分为16个区,每区4个块,每块16字节。
用户可定义内存块的读写条件
数据耐久性10年
写入耐久性100.000次
防卡绕:智能防干扰功能允许同时又多张卡在现场工作。防干扰算法分别选择每一张卡,并确保选定的卡正确执行交易,不会受到现场另一张卡的干扰。
安全性:相互三轮认证(ISO/IEC DIS9798-2),带重现攻击保护的射频通道数据加密,每区(每应用)两个密钥,支持密钥分级的多应用场合,每卡一个唯一序列号,在运输过程中以传输密钥保护对EEPROM的访问权
非接触能源和数据传递:在MIFARE卡中,芯片连接到一个几匝的天线线圈上,并嵌入塑料中,形成了一个无源的非接触卡。不需要电池。当卡接近读写器天线时,高速的RF通讯接口将以106 kBit/s 的速率传输数据。
安全与保护
数据完整性
以下机制在非接触通讯过程中于读卡器和卡片之间实现,卡片确保数据正确性:
每个数据块有16位CRC
为每个字节奇偶校验位
位数检查
位编码区分"1",“0"和"无信息”
监测信道(协议序列和位流分析)
三轮认证
-
1.卡从指定扇区的尾块读出密钥和访问权限,并产生4字节随机数发送给读卡器。
-
2.读卡器使用密钥加密收到的随机数,把加密结果连同字节产生的随机数一起发送给卡(共8字节)
-
3.卡使用第1轮中读出的密钥验证读卡器返回的加密数据,如正确则把收到的随机数加密后发送给读卡器,否则不发送数据。
执行流程
包括三部分,分别是初始化及选择过程,认证过程以及数据操作过程
呼叫:读卡器发送REQA/WUPA命令,卡返回ATQA的过程
防冲突循环:在防冲突循环过程中将读取卡片的ID,如果存在多张卡,则通过ID进行区别,并选择一张卡进一步处理,其他卡回到IDLE状态等待REQA/WUPA命令。
选卡:读写器发送SELECT,卡返回SAK的过程,SAK指示当前卡是否支持14443-4协议和UID是否完整。
三轮认证:选卡后,读卡器指定后续读写的存储器位置,并用相应的密钥进行三轮认证。认证成功后,所有的存储器操作都是加密的。
存储器操作
认证后可执行下列操作:
读块
写块
减值:减少数值块内的值,并将结果保存在数据寄存器中。
加值:增加数值块内的值,并将结果保存在数据寄存器中。
恢复:将数据块内容移入数据寄存器中。
转存:将数据寄存器的内容写入数值块。
存储器组织
厂商代码块:位于第1区的第一块(块0),它含有集成电路制造商数据。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的,只允许读取。
如果是4字节UID,则0~3字节为序列号,第4字节为校验字节(异或值),第5字节为卡片容量,第6、7字节为卡片类型。
数据块:各区均有3个16字节的块用于存储数据(区0只有两个数据块以及一个只读的厂商代码块)。
数据块可以通过读写控制位设置为:
读写块,例如用于非接触门禁管理。
数值块,例如用于电子钱包,另有可直接控制存储值的命令,如增值、减值。(有效命令:read,write,increment,decrement,restore,transfer),有固定的数据格式,以便于错误检测、纠错和备份管理。数值块只能通过以数值块格式的写操作生成。
数据分析
数值:4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。
地址(Adr):1字节地址,当进行备份管理时,可用于保块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer操作中,地址保存不变。它只能通过write命令更改。
举例:
对于10进制数1234567,地址17来说:10进制:1234567 -> 16进制:0012d687
低字节存储在第0字节,高字节为第3字节,可以理解为从右->左写。
补码,也就是取反值,先将16进制:0012d687 -> 转换成2进制:00000000000100101101011010000111
注意这里是32位的,少的位数需要用0来补齐,
再将1和0互换,得到2进制:11111111111011010010100101111000 -> 16进制: ffed2978
同理地址10进制:17 -> 16进制:11,这里是8位,所以转换成2进制就是00010001,取反就是11101110转换成16进制:ee
结果如下图:
上面说的数值块,接下来看下尾块
尾块:
各区均有一个尾块,存有密钥A和B(可选)。卡片发行时,所有的密钥被设置为FFFFFFFFFFFF。如果读密钥的权限不满足则读出的密钥值全为0。该区四个块的读写条件,存储在字节6-9。
读写控制位也指定了数据块的类型(读写块或数值块)。
如果不需要密钥B,块3的最后6字节可以用作数据字节。
尾块的字节9可用于用户数据。因为此字节享有与字节6、7、8相同的读写权限。
如下图所示:
存储器操作
对指定块可以执行的存储器操作取决于所用的密钥和存储在相应尾块中的读写条件。
读写条件:
每个数据块和尾块的读写条件均由3个bit定义,并以非取反和取反形式保存在各个区的尾块中。
读写控制位管理着使用密钥A和B读写的权限。如果知道相关的密钥,并且当前读写条件允许,读写条件是可以更改的。