一、项目背景
随着网络技术和嵌入式技术的发展,物联网开始引领新一波热潮。制作这个项目的想法起源于我的宿舍生活。每次进入宿舍都需要找钥匙非常不方便,在网络上看到关于智能门锁的介绍,于是便想制作一个门禁系统,利用随身携带的校园卡或者手机进行解锁开门。
二、硬件平台
根据项目目标,本项目硬件上有以下要求:
- 单片机能进行数据处理
- 实现对舵机的控制
- 接入wifi,并通过HTML接收信息
- 对射频卡进行扫描
根据以上要求,项目选型如下
(一)开发板与wifi模块
项目使用卡发版WeMos D1,其核心使用ESP-8266,具有11个I/O引脚,除D0引脚,均支持PWM、IIC、中断等,具有1个模拟量输入I/O。由于核心为ESP8266,因此具备wifi功能,可以在AP模式、station模式和混合模式下运行。符合要求。
项目开发使用arduino IDE,开发验证简单。
(二)射频读卡模块
PN532是一个高度集成的非接触读写芯片,它包含80C51微控制器内核,集成了13.56MHz下的各种主动/被动式非接触通信方法和协议。支持SPI、IIC、UART通讯方式,支持校园卡标准,性价比高,适合本次项目开发。
本次使用该模块的UART通信方式与单片机连接。
(三)舵机等
机械传动部分使用舵机,选用90g舵机,其功率较小,可以使用单片机I/O直接驱动,扭矩能满足拉开门锁的要求。
三、开发环境
(一)开发板
WeMos D1开发板使用Arduino IDE进行开发,使用C++语言,面向对象的开发方式。
本次项目在windows平台开发,使用Arduino IDE 1.8.5,调试使用串口猎人。系统串口通信运行在比特率115200、无校验位、数据位8bit、停止位1bit状态。
(二)终端控制平台
由于本次使用HTML与架设在路由器内网的路由器进行通信,因此终端设备只需要支持HTML即可。手机等设备可以直接使用浏览器进行控制,因此项目的通用性很强。
(三)网络环境
本系统在学校宿舍wifi环境下测试。我的宿舍使用小米路由器路由校园网络。WeMos D1连接宿舍wifi后会被分配到内网ip,由于未做内网透传并且没有设计校园网登陆部分,因此只有同样连接在宿舍wifi下的设备,才能对系统进行控制。
四、基本原理
(一)物联网
物联网是互联网、传统电信网等信息承载体,让所有能行使独立功能的普通物体实现互联互通的网络。随着网络的快速发展,越来越多的设备开始接入互联网,为人们的生活带来了极大的便利。
(二)射频标签
射频识别,RFID(Radio Frequency Identification)技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。
我们的校园卡是工作在13.56MHZ的IC非接触式射频卡,资料显示,这种射频卡有8KB储存空间,分为16个扇区,每个扇区分为4个块。序号从第0块到第63块,其中第0块未加密,保存着射频卡的序列号(UID),根据UID可以识别射频卡。
(三)HTML 1.1
HTML是用来在Internet上传送超文本的传送协议,运行在TCP/IP协议簇之上的HTTP应用协议,它可以使浏览器更加高效,使网络传输减少。使用此协议,可以很方便开发不同=平台之间的文本传输。
(四)项目目标
本次设计计划制作校园卡门禁系统,可以接入宿舍wifi,当识别到特定校园卡时,或者当使用手机发送固定内容时,控制舵机进行响应。
五、程序实现
六、调试
本项目通过串口进行调试。串口打印状态信息。
有两种开锁方式,扫描学生卡和网页端控制。
我在程序中提前写入了舍友的校园卡UID,当扫描到已知卡放在读卡器上时,串口输出“你好,XXX”,XXX为舍友的名字。此时舵机旋转,表示拉动门锁完成开门。
网页端控制通过HTML1.1协议,可以在手机或电脑等终端运行。当系统以客户端的形式接入宿舍的wifi时,路由器会分配一个局域网ip给ESP8266,如果统一局域网下的设备登陆“10.15.8.42/gpio/0”(10.15.8.42为分配的ip),相当于向设备发送gpio/0的信息,经过识别可以控制舵机运转,同时ESP8266可以通过HTML1.1协议传回一个信息,程序中设计的是传回锁头状态。
七、代码
#if defined(ARDUINO) && ARDUINO >= 100