风筝
发表于: 2021-2-4 15:00:34 | 显示全部楼层

RFID全称Radio Frequency Identification,中文名射频识别,它是一项非常简单且便宜的技术,可用于制造基于RFID的门锁、基于RFID的考勤系统的应用。如果在网上搜索基于RFID的项目,您会发现许多与安全性和标签相关的项目,这些项目可能会使这个有趣的模块显得乏味。


为了改变这种情况,我们考虑制作一个基于RFID的物联网事件管理系统,该系统不仅可以监视条目日志,而且可以借助IoT技术将日志和条目数据直接发送到可以处理所有事件的专用服务器。身份验证、授权和管理,使整个过程变得无缝。因此,让我们开始吧。


所需的组件

●    EM18 RFID读卡器

●    RFID卡

●    NodeMCU开发板

●    1602字符型LCD

●    LCD I2C模块

●    面包板

●    连接线


EM18 RFID读卡器模块

RFID-Reader-Module.jpg


上图显示了RFID卡和EM18 RFID读卡器模块。 RFID技术并不是什么新鲜事物,而是一项将数字数据编码在RFID标签中并可以由RFID读卡器使用无线电波解码的技术读取。 RFID与条形码相似,其中标签的数据由设备解码。 RFID技术可用于各种应用,例如安全系统、员工考勤系统、RFID门锁、基于RFID的投票机、收费系统等。


EM18读卡器是一个模块,可以读取存储在RFID标签中的ID信息。 RFID标签存储一个12位的唯一编号,当标签位于读卡器的范围内时,EM18读卡器模块可以将其解码。该模块的工作频率为125 kHz,具有内置天线,并使用5伏直流电源供电。它提供串行数据输出,范围为8-12厘米。串行通信参数为8个数据位、1个停止位和9600波特率。


这是一个非常有用的模块,并具有一些有趣的功能。它具有较宽的工作电压范围,可在+ 4.5V至5.5V DC范围内工作,工作时仅消耗50mA电流,因此可以用电池供电。除此之外,它的工作频率为125Khz,使其与各种类型的RFID卡兼容。借助内置天线,它可以读取8厘米至12厘米的距离。它的工作温度为0-80°C,非常适合在恶劣的环境中使用。


基于RFID的事件管理系统的电路图

基于RFID的物联网事件管理系统的完整电路图如下所示。

RFID-Based-Event-Management-System-Circuit-Diagram.png


从电路图中可以看出,我们通过UART将EM-18模块与NodeMCU连接起来。由于EM-18读卡器模块吸收了50mA峰值电流,因此我们已从Node MCU板上为该板供电,板载电源足以驱动模块。同样,我们已经通过NodeMCU的I2C引脚连接了I2C LCD,并且还通过NodeMCU模块为LCD供电。


为基于RFID的事件管理系统设置ThingSpeak帐户

在按照上述电路图成功完成硬件后,我们必须配置ThingSpeak IoT平台,我们将在其中存储所有数据。在这里,我们使用ThingSpeak来存储用户的信息。然后,我们将数据显示到GUI。要在Thingspeak中创建帐户,请执行以下步骤。


注册一个ThingSpeak帐户:

首先,如果您没有Mathworks帐户,请访问https://thingspeak.com/并创建一个新的免费Mathworks帐户。


登录到ThingSpeak:

使用您的凭据登录ThingSpeak,然后单击“New Channel”。现在,填写项目的详细信息,例如名称、字段名称等。在这里,我们必须创建四个字段名称,例如温度、电压等。此后,单击“Save channel”。

ThingSpeak-Account.png


保存凭据:

选择创建的通道并记录以下凭据。

●    频道ID,位于频道视图的顶部。

●    写入API密钥,可以在您的频道视图的“ API密钥”选项卡上找到。

ThingSpeak-API.png


完成设置并拥有必要的凭证后,就可以进入代码部分。


基于RFID的事件管理系统的Arduino代码

成功设置ThingSpeak帐户并按照电路图进行硬件设置后,就该对NodeMCU板进行编程了。但是,如果您是第一次将代码上传到NodeMCU板,请按照以下步骤操作。


在Arduino IDE中添加对NodeMCU的支持:

打开Arduino IDE,然后转到“File–>Preferences–>Settings”。

在“Additional Board Manager URL”字段中输入https://arduino.esp8266.com/stable/package_esp8266com_index.json,然后单击“OK”。

Additional-Board-Manager-URL_0.png


现在,转到Tools > Board > Boards Manager。在Boards Manager窗口中,在搜索框中键入ESP8266,选择最新版本,然后单击install。

NodeMCU-in-Arduino-IDE.jpg


安装完成后,转到Tools ->Board并选择NodeMCU 1.0(ESP-12E Module)。现在,您可以使用Arduino IDE编程NodeMCU。


在完成用于NodeMCU编程的上述设置后,我们必须将完整的代码上传到ESP8266 NodeMCU。


从RFID标签获取唯一的RFID代码

在对NodeMCU进行编程之前,我们需要找出唯一的12位RFID代码。正如我们之前讨论的那样,RFID标签包含12位唯一代码,可以使用RFID读卡器对其进行解码。当我们在读卡器附近滑动RFID标签时,读卡器将在连接到NodeMCU时通过串行端口为我们提供唯一的代码。为此,我们需要设置一小段代码,一旦获得所有模块的代码,就需要确保它们安全以备后用。


成功上传下面给出的小代码后,打开串口监视器,并将波特率设置为9600。然后在读卡器附近刷卡,您将在串口监视器上看到12位数字的代码。对所有使用过的RFID标签执行此过程,并记下它们以备将来参考。


获取唯一的12位RFID标签代码

  1. int count = 0;
  2. char card_no[12];
  3. void setup()
  4. {
  5.    Serial.begin(9600);
  6. }
  7. void loop()
  8. {
  9.    if(Serial.available())
  10.    {
  11.       count = 0;
  12.       while(Serial.available() && count < 12)
  13.       {
  14.          card_no[count] = Serial.read();
  15.          count++;
  16.          delay(5);
  17.       }
  18.       Serial.print(card_no);
  19.    }
  20. }
复制代码

基于Arduino的事件管理项目的最终代码

首先我们包含所有必需的库文件。我们使用ThingSpeak.h库与ThingSpeak平台进行通信。您可以在板管理器中添加该库。当我们使用基于16x2 I2C的LCD时,我们必须包括“ LiquidCrystal_I2C.h”和“ wire”.h”库。我们还需要包括time库,这将有助于我们获取当前的时间戳。

  1. #include "ThingSpeak.h"
  2. #include <ESP8266WiFi.h>
  3. #include<LiquidCrystal_I2C.h>
  4. #include<Wire.h>
  5. #include <time.h>
复制代码

接下来,我们使用提供的函数初始化LCD。

  1. LiquidCrystal_I2C lcd(0x3f, 16, 2);
复制代码

现在,我们定义所有必要的网络凭据,即SSID和密码。这些是将NodeMCU与Internet连接所必需的。然后,我们定义ThingSpeak帐户的所有凭据(例如通道号)并写入先前记录的API。确保您已编辑凭证代替这些变量。

  1. unsigned long ch_no = 123456
  2. const char * write_api = "MCxxxxxxx";
  3. char ssid[] = "admin";
  4. char pass[] = "12345678";
复制代码

setup()函数中,我们首先启用串口监视器。接下来,我们获得当前时间戳。此后,我们使用wire函数初始化LCD。

  1. Serial.begin(9600);
  2. configTime(11 * 1800, 0, "pool.ntp.org", "time.nist.gov");
  3. Wire.begin(D2, D1);
  4. lcd.begin(16, 2);
  5. lcd.init();
复制代码

为了将nodeMCU连接到Internet,调用了WiFi.begin函数,并传递了网络SSID和密码作为其参数。之后,我们使用WiFi.status()函数检查是否已连接Wi-Fi,并且成功连接后,液晶显示屏上会显示一条消息,指出“WiFi connected”。

  1. WiFi.begin(ssid, pass);
  2.   while (WiFi.status() != WL_CONNECTED)
  3.   {
  4.     delay(500);
  5.     Serial.print(".");
  6.   }
  7.   Serial.println("WiFi connected");
  8.   Serial.println(WiFi.localIP());
  9.   lcd.setCursor(0, 1);
  10.   lcd.print("WiFi connected");
复制代码

在while循环中,我们计算总数。使用lcd.print命令显示在LCD上的访问者数量,如下所示。

  1. lcd.setCursor(0, 0);
  2. lcd.print("No. of Vis:" + String(vis_count));
复制代码

为了获得当前时间戳,使用了time()函数并将输出保存在一个字符数组中,如下所示。

  1. time_t now = time(nullptr);
  2. str = ctime(&now);
复制代码

在此,RFID标签的唯一12位代码被解码并存储在数组中。然后,数组中的元素将与内存中的“存储的标签”编号匹配,以获取访问者的详细信息。记住我们之前保存的标签详细信息。

  1. if (Serial.available())
  2.   {
  3.     count = 0;
  4.     while (Serial.available() && count < 12)
  5.     {
  6.       input[count] = Serial.read();
  7.       count++;
  8.       delay(5);
  9.     }
复制代码

在这里,我们将接收到的数组与存储的标签代码进行比较。如果代码与任何已保存的卡详细信息匹配,则执行此条件,并在LCD上显示访客信息。

  1. if (count == 12)
  2.     {
  3.       if ((strncmp(input, "0B00284F9AF6", 12) == 0) && (a == 0))
  4.       {
  5.         lcd.setCursor(0, 1);
  6.         lcd.print("Welcome Debasis         ");
  7.         vis_count++;
  8.         a = 1;
  9.         delay(2000);
  10.         lcd.clear();
  11.         senddata("Debasis");
  12.       }
  13. }
复制代码

Senddata()函数用于将访问者数据发送到ThingSpeak云。从ThingSpeak,我们可以稍后以excel格式下载此数据,以查看记录的详细信息,例如访问者姓名和进入时间等。

  1. void senddata(String input)
  2. {
  3.   ThingSpeak.setField(1,input);
  4.   ThingSpeak.setField(2, str);
  5.   ThingSpeak.writeFields(ch_no, write_api);
  6. }
复制代码

测试基于RFID和NodeMCU的事件管理系统

为了测试项目,我们给NodeMcu上电,并确保WiFi网络可用,NodeMCU将连接到该WiFi网络。


此后,液晶显示屏上将显示一条消息,显示“WiFi connected”。如果未显示,请尝试检查您的网络连接。


之后,我们在RFID读卡器上刷卡,然后在LCD上显示欢迎消息,提示您如下图所示。我们对所有RFID卡重复此过程,直到对结果满意为止。

RFID-based-Event-Management-System.jpg


最后,要从ThingSpeak云下载此数据,请登录ThingSpeak,然后单击“Data Import/Export”选项卡。在“Export”菜单下,选择正确的时区,然后单击“Download”。它将以.csv格式下载Excel工作表,如下所示。

Event-Management-System-Excel-Sheet.png


希望您喜欢这篇文章并学到新知识。如果您对本文有任何疑问,请随时在本帖下面进行回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 19:19 , Processed in 0.096534 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表