风筝
发表于: 2019-8-16 21:27:29 | 显示全部楼层

如今,由于物联网系统的使用越来越多,了解物联网设备的运行和实施是非常重要的。在本篇文章中,我们将使用Arduino制作指纹考勤设备,除了将日志信息和工作时间存储在存储卡上之外,一旦连接到Internet,就将这些信息上传到Thingspeak平台上。您可以从面板以各种格式(如CSV)下载此信息。


什么是Thingspeak?

Iot(物联网)是一个平台,其中有许多东西连接到互联网,与个人和其他设备交互,并且通常将数据上传到云计算以进行分析。


Thingspeak是一个物联网平台,可让您在云计算中显示和收集实时数据。

att-7.jpg


与Thingspeak连接并上传数据

按照以下步骤启动Thingspeak连接:

步骤1)进入Thingspeak.com网站,然后创建一个帐户。

att-5.jpg

步骤2)激活帐户后登录,然后单击“My Channel”部分中的“New Channel”。

att-4.jpg

步骤3)在打开的新窗口中,在面板写一个名称,如果有必要,写下描述。通过分配名称来确定所需的字段数。其余部分是可选的。完成信息后保存面板。

att-3.jpg

步骤4)现在转到面板中的API Keys

att-2.jpg

步骤5)您需要Channel IDWrite API Key来传输数据,因此请将其写下来。

att-iot.jpg

步骤6)下载Thingspeak库并将其添加到Arduino IDE。Thingspeak库


步骤7)转到Arduino IDE。从示例部分打开WriteMultipleFiels,然后输入SSID、Password、Channel IDWrite API Key值。

  1. /*
  2.   WriteMultipleFields
  3.   
  4.   Description: Writes values to fields 1,2,3,4 and status in a single Thingspeak update every 20 seconds.
  5.   
  6.   Hardware: ESP8266 based boards
  7.   
  8.   !!! IMPORTANT - Modify the secrets.h file for this project with your network connection and Thingspeak channel details. !!!
  9.   
  10.   Note:
  11.   - Requires ESP8266WiFi library and ESP8622 board add-on. See https://github.com/esp8266/Arduino for details.
  12.   - Select the target hardware from the Tools->Board menu
  13.   - This example is written for a network using WPA encryption. For WEP or WPA, change the WiFi.begin() call accordingly.
  14.   
  15.   Thingspeak ( https://www.Thingspeak.com ) is an analytic IoT platform service that allows you to aggregate, visualize, and
  16.   analyze live data streams in the cloud. Visit https://www.Thingspeak.com to sign up for a free account and create a channel.  
  17.   
  18.   Documentation for the Thingspeak Communication Library for Arduino is in the README.md folder where the library was installed.
  19.   See https://www.mathworks.com/help/Thingspeak/index.html for the full Thingspeak documentation.
  20.   
  21.   For licensing information, see the accompanying license file.
  22.   
  23.   Copyright 2018, The MathWorks, Inc.
  24. */

  25. #include "Thingspeak.h"
  26. #include "secrets.h"
  27. #include <ESP8266WiFi.h>

  28. char ssid[] = SECRET_SSID;   // your network SSID (name)
  29. char pass[] = SECRET_PASS;   // your network password
  30. int keyIndex = 0;            // your network key Index number (needed only for WEP)
  31. WiFiClient  client;

  32. unsigned long myChannelNumber = SECRET_CH_ID;
  33. const char * myWriteAPIKey = SECRET_WRITE_APIKEY;

  34. // Initialize our values
  35. int number1 = 0;
  36. int number2 = random(0,100);
  37. int number3 = random(0,100);
  38. int number4 = random(0,100);
  39. String myStatus = "";

  40. void setup() {
  41.   Serial.begin(115200);  // Initialize serial

  42.   WiFi.mode(WIFI_STA);
  43.   Thingspeak.begin(client);  // Initialize Thingspeak
  44. }

  45. void loop() {

  46.   // Connect or reconnect to WiFi
  47.   if(WiFi.status() != WL_CONNECTED){
  48.     Serial.print("Attempting to connect to SSID: ");
  49.     Serial.println(SECRET_SSID);
  50.     while(WiFi.status() != WL_CONNECTED){
  51.       WiFi.begin(ssid, pass);  // Connect to WPA/WPA2 network. Change this line if using open or WEP network
  52.       Serial.print(".");
  53.       delay(5000);     
  54.     }
  55.     Serial.println("\nConnected.");
  56.   }

  57.   // set the fields with the values
  58.   Thingspeak.setField(1, number1);
  59.   Thingspeak.setField(2, number2);
  60.   Thingspeak.setField(3, number3);
  61.   Thingspeak.setField(4, number4);

  62.   // figure out the status message
  63.   if(number1 > number2){
  64.     myStatus = String("field1 is greater than field2");
  65.   }
  66.   else if(number1 < number2){
  67.     myStatus = String("field1 is less than field2");
  68.   }
  69.   else{
  70.     myStatus = String("field1 equals field2");
  71.   }
  72.   
  73.   // set the status
  74.   Thingspeak.setStatus(myStatus);
  75.   
  76.   // write to the Thingspeak channel
  77.   int x = Thingspeak.writeFields(myChannelNumber, myWriteAPIKey);
  78.   if(x == 200){
  79.     Serial.println("Channel update successful.");
  80.   }
  81.   else{
  82.     Serial.println("Problem updating channel. HTTP error code " + String(x));
  83.   }
  84.   
  85.   // change the values
  86.   number1++;
  87.   if(number1 > 99){
  88.     number1 = 0;
  89.   }
  90.   number2 = random(0,100);
  91.   number3 = random(0,100);
  92.   number4 = random(0,100);
  93.   
  94.   delay(20000); // Wait 20 seconds to update the channel again
  95. }
复制代码

上传代码后,您将看到在面板的第1到4栏中上传的一些随机数字。在考勤系统中使用相同的结构代码来上载数据。


注意:每次在Thingspeak面板上上传数据之间至少等待15秒。


所需的材料

●    Arduino Mega 2560 R3开发板

●    R301T指纹传感器

●    Micro SD TF卡适配器模块

●    DS3231 I2C RTC模块

●    3.5“TFT彩色显示屏模块

●    NodeMCU ESP8266 ESP-12E模块

●    公对母跳线

●    Arduino IDE

att-required-material.jpg


使用指纹传感器和Arduino创建考勤系统

在该系统中,通过指纹登记到达和离开后,他的日期、姓名、到达时间、出发时间和工作时间等信息将存储在SD卡上。然后,此信息将在您指定的时间发送到Thingspeak。在没有Internet连接的情况下,未分发的数据将被存储,并在连接到Internet后立即转发到Thingspeak。由于信息存储在微控制器的EEPROM中,因此在断电时不会丢失。


电路连接

IoT-Attendance_bb.jpg

连接好所有模块后,将LCD扩展板插到Arduino开发板上。


代码

本文使用的代码需要以下库:

●    Adafruit-Fingerprint-Sensor-Library

●    Adafruit-GFX-Library

●    MCUFRIEND_kbv

●    RTClib


现在下载以下代码并将其上传到Arduino。此代码是为使用默认姓名的11人编写的,但您可以更改它们并将其从默认模式中删除。要注册新名称,只需将设备连接到计算机,然后按键进入注册模式,然后打开串行监视器并按照串行监视器上显示的注册过程进行操作。


从这里下载代码: Electropeak_Attendance_Code.zip (10.04 KB, 下载次数: 10)



Nodemcu执行在该系统中上传信息的任务。它从Arduino通过串口获取上传信息,并返回上传到Arduino的状态。在Nodemcu上上传以下代码。

  1. #include "Thingspeak.h"
  2. #include ESP8266WiFi.h>


  3. char ssid[] = "YOUR SSID";
  4. char pass[] = "SSID PASSWORD";
  5. WiFiClient  client;

  6. unsigned long myChannelNumber = YOUR CHANNEL ID;
  7. const char * myWriteAPIKey = "YOUR CHANNEL WRITE API KEY";

  8. String Final = "";

  9. String Date = "";
  10. String Enter = "";
  11. String Exit = "";
  12. String Name = "";
  13. String WT = "";

  14. void String_Analyze(String input) {
  15.   int index1, index2, index3, index4;
  16.   index1 =  input.indexOf('*', 0);
  17.   index2 =  input.indexOf('*', index1 + 1);
  18.   index3 =  input.indexOf('*', index2 + 1);
  19.   index4 =  input.lastIndexOf('*');

  20.   Name = input;
  21.   Date = input;
  22.   Enter = input;
  23.   Exit = input;
  24.   WT = input;

  25.   Name.remove(index1);

  26.   Date.remove(index2);
  27.   Date.remove(0, index1 + 1);

  28.   Enter.remove(index3);
  29.   Enter.remove(0, index2 + 1);

  30.   Exit.remove(index4);
  31.   Exit.remove(0, index3 + 1);

  32.   WT.remove(0, index4 + 1);
  33. }

  34. void Get_String()
  35. {
  36.   while (Serial.available()) {

  37.     Final = Serial.readString(); // read the incoming data as string
  38.     //Serial.println(Final);
  39.   }
  40. }
  41. void setup() {

  42.   Serial.begin(9600);
  43.   WiFi.mode(WIFI_STA);
  44.   Thingspeak.begin(client);
  45.   pinMode(LED_BUILTIN, OUTPUT);
  46.   digitalWrite(LED_BUILTIN, HIGH);
  47. }



  48. void loop() {

  49.   if (WiFi.status() != WL_CONNECTED) {
  50.     //Serial.print("Attempting to connect to SSID: ");
  51.     // Serial.println(ssid);
  52.     while (WiFi.status() != WL_CONNECTED) {
  53.       WiFi.begin(ssid, pass);  // Connect to WPA/WPA2 network. Change this line if using open or WEP network
  54.       Serial.print("0");
  55.       delay(5000);
  56.     }
  57.   }
  58.   digitalWrite(LED_BUILTIN, LOW);
  59.   //Serial.println("\nConnected.");

  60.   Get_String();
  61.   String_Analyze(Final);
  62.   if (!Final.equals(""))
  63.   {
  64.     Thingspeak.setField(1, Date);
  65.     Thingspeak.setField(2, Name);
  66.     Thingspeak.setField(3, Enter);
  67.     Thingspeak.setField(4, Exit);
  68.     Thingspeak.setField(5, WT);

  69.     int x = Thingspeak.writeFields(myChannelNumber, myWriteAPIKey);
  70.     if (x == 200) {
  71.       delay(100);
  72.       Serial.print("1");
  73.     }
  74.     else {
  75.       delay(100);
  76.       Serial.print("0");
  77.     }

  78.     delay(17000);
  79.     Final = "";
  80.   }
复制代码

首先,根据您的Thingspeak面板更改Channel IDWrite API Key


此代码中的String_Analuze();函数将Nodemcu输入字符串分为日期、名称、到达和离开时间以及工作时间,并将此信息发送到Thingspeak。然后,如果上传过程成功,则发送字符“1”,否则它将字符“0”发送给Arduino。


组装考勤设备

您可以使用以下图纸和不同颜色的树脂玻璃或任何其他材料来构建考勤设备的机身。

Capture.jpg

从这里下载机身激光切割图: attendance box laser cut.rar (39.93 KB, 下载次数: 7)


放置电子元件并组装整个机身后,将其安装在所需位置。现在,只需将12V适配器插入设备即可开始工作。

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

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-24 23:27 , Processed in 0.042030 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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