基于物联网平台的智能门禁系统

//通过闪存联网实现 WiFi 开锁、存储指纹信息并识别,识别成功即可开锁 
#include <ESP8266WiFi.h> 
// 本程序使用 ESP8266WiFi 库 
//#include <ESP8266WiFiMulti.h> // 本程序使用 ESP8266WiFiMulti 库 
#include <ESP8266WebServer.h> // 本程序使用 ESP8266WebServer 库 
#include <FS.h> 
// 本程序使用 SPIFFS 库 
#include <Adafruit_Fingerprint.h>//指纹识别 
#include <Wire.h>//12C 数据 
#include "SSD1306.h" 
SSD1306 display(0x3c,5, 4); 
//ESP8266WiFiMulti wifiMulti; 
// 建立 ESP8266WiFiMulti 对象,对象名称是'wifiMulti' 
ESP8266WebServer esp8266_server(80); 
// 建立网络服务器对象,该对象用于响应 HTTP 
请求。监听端口(
80) 
const char* ssid = "redk40"; //客户名 
const char* password = "12345678"; //密码 
void handleLEDControl(); 
void handleUserRequest(); 
SoftwareSerial mySerial(13,15);//D7,D8 
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); 
int k; 
//存入指纹信息 
uint8_t getFingerprintID() { 
uint8_t p = finger.getImage(); 
switch (p) { 
case FINGERPRINT_OK: 
Serial.println("Image taken");//检测成功 
break; 
case FINGERPRINT_NOFINGER: 
Serial.println("No finger detected");//没有指纹信息 
return p; 
case FINGERPRINT_PACKETRECIEVEERR: 
Serial.println("Communication error"); //信息错误 
return p; 
case FINGERPRINT_IMAGEFAIL: 
Serial.println("Imaging error"); //存储失败 
return p; 
default: 
Serial.println("Unknown error"); //其他错误 
return p; 
} 
//信息转换p = finger.image2Tz(); 
switch (p) { 
case FINGERPRINT_OK: 
Serial.println("Image converted"); //转换成功 
break; 
case FINGERPRINT_IMAGEMESS: 
Serial.println("Image too messy"); // 图像混乱 
return p; 
case FINGERPRINT_PACKETRECIEVEERR: 
Serial.println("Communication error"); //通信错误 
return p; 
case FINGERPRINT_FEATUREFAIL: 
Serial.println("Could not find fingerprint features"); //找不到指纹特征 
return p; 
case FINGERPRINT_INVALIDIMAGE: 
Serial.println("Could not find fingerprint features"); 
return p; 
default: 
Serial.println("Unknown error"); //其他错误 
return p; 
} 
//搜索指纹信息进行匹配 
//串口检测 
p = finger.fingerFastSearch(); 
if (p == FINGERPRINT_OK) { 
Serial.println("Found a print match!"); 
} else if (p == FINGERPRINT_PACKETRECIEVEERR) { 
Serial.println("Communication error"); 
return p; 
} else if (p == FINGERPRINT_NOTFOUND) { 
Serial.println("Did not find a match"); 
return p; 
} else { 
Serial.println("Unknown error"); 
return p; 
} 
Serial.print("Found ID #"); Serial.print(finger.fingerID); 
Serial.print(" with confidence of "); Serial.println(finger.confidence); 
return finger.fingerID; 
} 
// 匹配失败返回-1,成功则返回 IDint getFingerprintIDez() { 
uint8_t p = finger.getImage(); 
if (p != FINGERPRINT_OK) { return -1;} 
p = finger.image2Tz(); 
if (p != FINGERPRINT_OK) {return -1;} 
p = finger.fingerFastSearch(); 
if (p != FINGERPRINT_OK) {return -1;} 
// 串口输出信息与屏幕展示 
Serial.print("Found ID #"); Serial.print(finger.fingerID); 
Serial.print(" with confidence of "); Serial.println(finger.confidence); 
Serial.print("已开锁"); 
display.init();//屏幕初始化 
display.setFont(ArialMT_Plain_24); 
display.drawString(0, 0, "open"); 
display.display(); 
delay(5000);//开锁时间 
display.init(); //屏幕初始化 
display.setFont(ArialMT_Plain_24); 
display.drawString(0, 0, " 
"); 
display.display(); 
return finger.fingerID;//返回·1ID 
} 
void setup(){ 
Serial.begin(9600); 
Serial.println(""); 
pinMode(D8, OUTPUT); 
// 初始化 NodeMCU 控制板载 LED 引脚为 OUTPU 
digitalWrite(D8, HIGH); 
//通过 addAp 函数存储 WiFi 名称 WiFi 密码 
WiFi.begin(ssid, password); // 环境查找是否有这里列出的 WiFi ID。//如果有 
Serial.println("Connecting ..."); 
// 则尝试使用此处存储 
的密码进行连接。 
int i = 0; 
while (WiFi.status() != WL_CONNECTED) { // 在当前环境中搜索 addAP 函数所存储的 
WiFi 
delay(1000); 
// 如果搜到多个存储的 WiFi 那么 
NodeMCU 
Serial.print(i++); Serial.print('.'); // 将会连接信号最强的那一个 WiFi 信号。 
finger.begin(57600); 
delay(5);if (finger.verifyPassword()) { 
Serial.println("Found fingerprint sensor!"); 
} else { 
Serial.println("Did not find fingerprint sensor "); 
while (1) { delay(1); } 
} 
finger.getTemplateCount(); 
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); 
Serial.println("Waiting for valid finger..."); 
Wire.begin(5,4); 
} 
// WiFi 连接成功后将通过串口监视器输出连接成功信息 
Serial.println('\n'); 
// WiFi 连接成功后 
Serial.print("Connected to "); 
// NodeMCU 将通过串口监视器输出。 
Serial.println(WiFi.SSID()); 
// 连接的 WiFI 名称 
Serial.print("IP address:\t"); 
// 以及 
Serial.println(WiFi.localIP()); 
// NodeMCU 的 IP 地址 
if(SPIFFS.begin()){ 
// 启动闪存文件系统 
Serial.println("SPIFFS Started."); 
} else { 
Serial.println("SPIFFS Failed to Start."); 
} 
esp8266_server.on("/LED-Control", handleLEDControl); // 告知系统如何处理/LED-Control 请 
求 
esp8266_server.onNotFound(handleUserRequest); 
// 告知系统如何处理其它用户 
请求 
esp8266_server.begin(); 
// 启动网站服务 
Serial.println("HTTP server started"); 
} 
void loop(){ 
esp8266_server.handleClient(); //处理用户请求 
k=0; 
getFingerprintIDez(); 
delay(50); 
} 
// 处理/LED-Control 请求 
void handleLEDControl(){bool ledStatus = digitalRead(D8); 
// 此变量用于储存 LED 状态 
ledStatus == HIGH ? digitalWrite(D8, LOW) : digitalWrite(D4, HIGH); // 点亮或者熄灭 LED 
esp8266_server.sendHeader("Location", "/LED.html"); 
esp8266_server.send(303); 
} 
// 处理/LED-Control 请求 
// 处理用户浏览器的 HTTP 访问 
void handleUserRequest() { 
// 获取用户请求资源(Request Resource) 
String reqResource = esp8266_server.uri(); 
Serial.print("reqResource: "); 
Serial.println(reqResource); 
// 通过 handleFileRead 函数处处理用户请求资源 
bool fileReadOK = handleFileRead(reqResource); 
// 如果在 SPIFFS 无法找到用户访问的资源,则回复 404 (Not Found) 
if (!fileReadOK){ 
esp8266_server.send(404, "text/plain", "404 Not Found"); 
} 
} 
bool handleFileRead(String resource) { 
//处理浏览器 HTTP 访问 
if (resource.endsWith("/")) { 
// 如果访问地址以"/"为结尾 
resource = "/index.html"; 
// 则将访问地址修改为/index.html 便 
于 SPIFFS 访问 
} 
String contentType = getContentType(resource); // 获取文件类型 
if (SPIFFS.exists(resource)) { 
// 如果访问的文件可以在 SPIFFS 中找 
到 
File file = SPIFFS.open(resource, "r"); 
// 则尝试打开该文件 
esp8266_server.streamFile(file, contentType);// 并且将该文件返回给浏览器 
file.close(); 
// 并且关闭文件 
return true; 
// 返回 true 
} 
return false; 
// 如果文件未找到,则返回 false 
} 
// 获取文件类型 
String getContentType(String filename){if(filename.endsWith(".htm")) return "text/html"; 
else if(filename.endsWith(".html")) return "text/html"; 
else if(filename.endsWith(".css")) return "text/css"; 
else if(filename.endsWith(".js")) return "application/javascript"; 
else if(filename.endsWith(".png")) return "image/png"; 
else if(filename.endsWith(".gif")) return "image/gif"; 
else if(filename.endsWith(".jpg")) return "image/jpeg"; 
else if(filename.endsWith(".ico")) return "image/x-icon"; 
else if(filename.endsWith(".xml")) return "text/xml"; 
else if(filename.endsWith(".pdf")) return "application/x-pdf"; 
else if(filename.endsWith(".zip")) return "application/x-zip"; 
else if(filename.endsWith(".gz")) return "application/x-gzip"; 
return "text/plain"; 
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于物联网校园电子锁系统系统模块包括但不限于以下几个方面: 1.硬件模块:包括锁芯、锁体、感应器、控制模块、电源模块等,用于实现锁的物理控制和电气控制。 2.软件模块:包括锁控制软件、服务器软件、APP等,用于实现锁的远程控制、数据采集、管理与分析。 3.通信模块:包括蜂窝通信模块、WIFI通信模块等,用于实现锁的联网功能,保证数据的传输和接收。 4.数据存储模块:包括云端存储和本地存储,用于存储锁的使用记录、权限管理等相关数据。 5.安全模块:包括加密解密模块、认证授权模块等,用于保证锁的安全性和可靠性。 ### 回答2: 基于物联网的校园电子锁系统主要包括以下几个模块: 1. 锁模块:该模块是整个系统的核心部分,负责控制锁的开关以及状态监测。通过物联网技术,锁与服务器进行连接,支持远程控制和管理。锁模块通常由电子锁芯、感应器、执行器等组成,能够实现安全可靠的控制。 2. 通信模块:该模块用于实现校园电子锁系统各个模块之间的信息传递和通信。通过使用无线通信技术,如Wi-Fi、蓝牙、NFC等,实现锁与服务器、卡、手机等设备之间的互联互通。通过通信模块的支持,用户可以远程开锁、查询锁状态等。 3. 服务器模块:该模块是校园电子锁系统的核心控制中心,负责管理锁和用户信息、处理锁操作指令等。服务器模块通常具备数据库管理功能,用于存储和管理所有的锁密码、权限等信息。通过与其他设备的通信,服务器模块能够实现对系统的集中控制和监控。 4. 用户管理模块:该模块用于管理校园电子锁系统中的用户权限和身份认证。通过该模块,用户可以注册、登录,并获得相应的锁使用权限。用户管理模块通常与服务器模块进行密切的配合,通过与服务器的数据交互,实现用户权限的同步和更新。 5. 监控与报警模块:该模块用于实现校园电子锁系统的安全监控和异常报警。通过与锁模块和服务器模块的通信,监控与报警模块能够实时监测锁状态、异常开关等情况,并及时向相关人员发送警报信息。 综上所述,基于物联网的校园电子锁系统主要包括锁模块、通信模块、服务器模块、用户管理模块和监控与报警模块。这些模块协同工作,能够实现校园智能化、安全化管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值