|
几年前,如果你告诉某人家里的热水器和卧室灯可以与互联网连接,他们会感到困惑,甚至可能批评它为过度设计的产品。但是今天随着物联网、智能城市等的出现,这个想法不再听起来很奇怪,我们周围的设备通过能够与互联网进行通信,并且变得更加智能。
在本篇文章中,我们的目标是利用这个物联网实现一个考勤系统,使其更加智能和有效。目前可用的大多数常规考勤系统通过微型SD卡存储信息,并且必须通过计算机连接到软件以访问信息。在这里,我们将使用Arduino构建一个生物识别考勤系统,该系统扫描指纹并成功识别人员,它将使用ESP8266 Wi-Fi模块将信息记录到诸如ThingsBoard之类的云平台。然后,此信息可以显示在ThingsBoard的仪表板中,使其可供所需权限通过Internet查看和分析信息,而无需对硬件进行任何直接物理访问。然而,不涉及物联网的传统考勤系统也可以参考本链接进行制作,指纹传感器可以进一步用于许多其他生物识别应用,如投票机、安全系统等。
需要的硬件 ● Arduino UNO扩展板 ● 1602 LCD显示屏 ● Arduino WiFi Shield ● ESP8266-01 ● GT511C3指纹传感器(FPS) ● 12V适配器
先决条件 我们将为此程序编写两个Arduino脚本。一个用于ESP8266-01模块,另一个用于Arduino UNO。原因是Arduino无法通过软件串口通过AT命令处理GT511C3传感器和ESP8266。因此,我们将编写两个代码,一个用于Arduino,其中它将与FPS通信,并通过软件串口将获得的值发送到ESP8266。其他代码将为ESP8266编写,它将使模块能够连接到Thingsboard服务器,然后通过串行通信从Arduino接收值,以在Thingsboard Dashboard上更新它们。
准备您的Thingsboard帐户 今天有许多开源云平台可用于您的物联网项目集成。每个平台都有自己的专长,对于我们的应用程序,我一直在寻找一些在数据记录和可视化方面很好的东西,并找到了适合这个目的的Thingsboard.io。所以我们首先设置Thingsboard帐户。进入thingboard.io并点击“TRY IT NOW”,然后点击社区版(因为它是免费的)点击Live Demo。您将被带到注册页面,这是一个简单的过程,您必须链接并确认您的电子邮件ID,一旦完成,您将被带到主页,看起来像这样。如果您遇到困难,可以参考这个入门的Thingsboard视频。
在ThingsBoard上,我们有两个重要的术语,Assets(资产)和Devices(设备)。您可以将资产视为建筑物、仓库、工业、农田等,并将设备视为该特定资产中存在的传感器或设备。因此,每个资产将根据项目在其中包含一个或多个设备,这里我们将在资产中拥有一个资产和一个设备。
在物联网上创建资产 让我们首先创建我们的第一个资产,点击左侧面板上的资产,您将注意到与您的帐户相关的所有资产,您可能没有或您可以忽略的一些示例资产。要创建资产,请单击屏幕右下角的添加图标,弹出窗口添加Name、Asset type和Description。您可以提供任何名称和类型,我已经给出了以下内容
输入详细信息后,只需单击“添加”,即可创建资产。请注意,我已经将资产命名为,请记住这一点,因为我们稍后会需要它。创建资产后,您可以注意到它出现在窗口中,如下所示。
将设备添加到资产 现在我们已经创建了一个资产,我们应该添加一个设备。为此,请单击左侧面板上的设备选项卡,然后单击屏幕右下角的添加图标。您将获得一个类似的弹出窗口,您可以在其中将其称为 FPS Main Gate和设备类型的设备命名为默认设置。
单击添加,然后您将在面板上找到正在创建的设备,单击我们刚刚创建的设备,您将看到从右侧滑入的新面板。此面板将包含有关设备的所有信息,只需单击如下所示的复制访问令牌以获取设备的令牌值,我们将在Arduino程序中使用此值来向此设备发送或接收值。
创建资产的设备关系 创建资产和设备后,返回资产选项卡,然后单击刚刚创建的资产。我的资产被命名为“办公室出勤系统”。这将从右侧的弹出窗口中滑动,现在在新弹出窗口中选择关系选项卡,并在出站关系上点击添加(+)符号以获得以下弹出窗口
选择实体类型作为设备,然后输入我们之前创建的设备的名称。我的设备名称是上面输入的“FPS Main Gate”。最后单击“添加”按钮将设备关系添加到资产。
准备ESP8266-01 对于该项目,ESP8266应在AT命令模式和编程模式下运行。我们可以使用LM317调节3.3V为ESP8266模块供电,并将Tx Rx引脚连接到FTDI板,如下所示。
拨动开关可用于在AT命令模式和编程模式之间切换ESP8266,按下按钮可复位模块。请注意,ESP8266必须在每次上传代码之前复位。
该电路仅用于将程序上传到ESP8266,稍后我们将在最终设置中用Arduino UNO替换FTDI板。
使用Arduino IDE对ESP8266进行编程,以便将数据发送到ThingsBoard 我们必须对ESP8266进行编程以连接到我们的Wi-Fi路由器,并使用我们之前获得的令牌地址与我们的ThingsBoard设备同步。一旦完成,它应该主动通过其串行引脚查找来自Arduino板的详细信息,如果它获得数据,它应该短信息并将其发送到Thingsboard仪表板。在继续该程序之前,请确保已使用电路板管理器在Arduino IDE中安装了所需的电路板详细信息,以便使用Arduino对ESP8266进行编程,并使用草图 - >包含库 - >管理库安装以下库。只需搜索所需的库并单击安装即可。 ● Nick O'Leary的PubSubClient。 ● bportaluri的WiFiEsp
一旦IDE准备就绪,我们可以通过添加所需的库并提供Wifi凭证和密码以及我们之前获得的令牌值来开始该程序。然后创建一个连接到Thingsboard演示页面的Wi-Fi客户端。相同的代码如下所示。 - #include <PubSubClient.h> //http://pubsubclient.knolleary.net/
- #include <ESP8266WiFi.h> //https://github.com/bportaluri/WiFiEsp
- #define WIFI_AP "CircuitLoop"
- #define WIFI_PASSWORD "pasword14785"
- #define TOKEN "IFhm5ggJVsEpokiIoQ"
- char thingsboardServer[] = "demo.thingsboard.io";
- WiFiClient wifiClient;
复制代码
重要提示:请确保根据您的设备更改TOKEN和Wi-Fi凭据。
在setup函数中,我们将以9600波特率开始串行通信,并初始化Wi-Fi模块以连接到Wi-Fi路由器。 最后,我们将把我们的Wi-Fi客户端连接到ThingsBoard服务器。 - void setup()
- {
- Serial.begin(9600);
- delay(10);
- InitWiFi();
- client.setServer( thingsboardServer, 1883 );
- lastSend = 0;
- }
复制代码
在loop函数内部,我们将不断检查与服务器的连接是否处于活动状态,如果不是,我们将尝试使用重新连接功能重新连接。 如果客户端连接成功,程序将检查来自串行监视器的传入数据,如果收到数据,它将转换为字符串并存储在名为Name的变量中。 然后使用函数Send_to_Thingsboard()将此变量以json格式发送到ThingsBoard服务器。 如果没有串行数据,那么我们将使用client.loop()代码维护客户端连接。 - void loop()
- {
- if ( !client.connected() ) {
- reconnect();
- }
- if ( Serial.available() ) { // Update and send only after 1 seconds
- char a = Serial.read();
- Name = Name + String(a);
- if (a == 13) //check for new line
- {
- Name.trim(); //Remove /n or /r from the incomind data
- Serial.println(Name);
- Send_to_Thingsboard();
- Name =""; //clear the string if new line is detected
- }
- }
- client.loop();
- }
复制代码
Thingsboard服务器接受JSON形式的信息,因此我们必须以JSON格式从ESP8266构造我们的有效载荷。 我们可以通过简单地在Arduino中使用字符串级联功能来实现。 我们还将有效负载命名为“Name”。 属性必须提到我们发送到Thingsboard的有效负载的大小。 由于每个员工姓名中的字符数会有所不同,我们的有效负载将没有固定的属性值,因此我们将其设置为最大值100.然后,通过ESP8266发送它们,我们必须使用toCharArray方法将String转换为char,最后 使用client.publish选项发送它。 请注意,不应更改v1 / devices / me /遥测。 - void Send_to_Thingsboard()
- {
- Serial.println("Collecting temperature data.");
- String Employee_Name = Name;
- // Prepare a JSON payload string
- String payload = "{";
- payload += ""Name":"; payload += Employee_Name;
- payload += "}";
- // Send payload
- char attributes[100];
- payload.toCharArray( attributes, 100 );
- client.publish( "v1/devices/me/telemetry", attributes );
- Serial.println( attributes );
- }
复制代码
使用ThingsBoard测试ESP8266连接 一旦您的IDE和硬件准备就绪,我们就可以检查ESP8266部件是否运行良好。 在上面讨论的电路中使用FTDI模块将代码保存在编程模式下,将代码上传到ESP8266。 上传代码后,将其连接回AT命令模式并按下复位按钮。 然后打开串行监视器,您应该看到以下内容
此消息确认ESP8266模块能够在Thingsboard服务器上与我们的设备建立通信。 在此阶段,ESP正在等待通过其串行监视器的输入,当它收到某些内容时,它会将该数据发送到服务器。 所以,现在是时候将ESP与Arduino连接起来为ESP提供价值。 |