您可以在上阅读本教程和其他精彩教程 ElectroPeak 的官方网站 。
如今,由于物联网系统的使用越来越多,因此了解物联网设备的操作和实施变得非常重要。在本教程中,我们将使用 Arduino 制作指纹考勤设备,除了将登录信息和工作时间存储在存储卡上之外,只要连接到 Internet 就将这些信息上传到 ThingSpeak 平台您可以从面板下载各种格式的信息,例如 CSV。
IoT(物联网)设想了一个世界,其中许多事物都连接到互联网,与个人和其他设备进行交互,并且通常会将数据上传到云端进行分析。
ThingSpeak 是一个物联网平台,可让您在云计算中显示和收集实时数据。
按照以下步骤启动 ThingSpeak 连接:
第 1 步 ) 进入 ThingSpeak.com 网站并创建一个帐户。
第 2 步 ) 激活您的帐户后登录并点击新频道 在我的频道 部分。
第 3 步 ) 在为您打开的新窗口中,写下面板的名称和任何必要的描述。通过分配名称来确定您需要的字段数。其余部分是可选的。完成信息后保存面板。
第 4 步 ) 现在转到 API 密钥 在您的面板中。
步骤 5 ) 您需要频道 ID 和编写 API 密钥 传输数据,所以写下来。
步骤 6) 下载 ThingSpeak 库并将其添加到您的 Arduino IDE。
ThingSpeak 图书馆
步骤 7) 转到 Arduino IDE。打开 WriteMultipleFiels 从示例部分并输入 SSID、密码、通道 ID 和写入 API 密钥值。
/* WriteMultipleFields 描述:每 20 秒在单个 Thingspeak 更新中将值写入字段 1、2、3、4 和状态。硬件:基于 ESP8266 的开发板!!!重要 - 使用您的网络连接和 Thingspeak 频道详细信息修改此项目的 secrets.h 文件。 !!!注意: - 需要 ESP8266WiFi 库和 ESP8622 开发板插件。有关详细信息,请参阅 https://github.com/esp8266/Arduino。 - 从 Tools->Board 菜单中选择目标硬件 - 此示例是为使用 WPA 加密的网络编写的。对于 WEP 或 WPA,相应地更改 WiFi.begin() 调用。 Thingspeak ( https://www.Thingspeak.com ) 是一项分析物联网平台服务,可让您聚合、可视化和分析云中的实时数据流。访问 https://www.Thingspeak.com 注册一个免费帐户并创建一个频道。 Arduino Thingspeak 通信库的文档位于安装该库的 README.md 文件夹中。有关完整的 Thingspeak 文档,请参阅 https://www.mathworks.com/help/Thingspeak/index.html。有关许可信息,请参阅随附的许可文件。版权所有 2018,The MathWorks, Inc.*/#include "Thingspeak.h"#include "secrets.h"#include char ssid[] =SECRET_SSID; // 您的网络 SSID(名称) char pass[] =SECRET_PASS; // 你的网络密码int keyIndex =0; // 您的网络密钥索引号(仅 WEP 需要)WiFiClient 客户端;unsigned long myChannelNumber =SECRET_CH_ID;const char * myWriteAPIKey =SECRET_WRITE_APIKEY;// 初始化我们的值 int number1 =0;int number2 =random(0,100);int number3 =random (0,100);int number4 =random(0,100);String myStatus ="";void setup() { Serial.begin(115200); // 初始化串口 WiFi.mode(WIFI_STA); Thingspeak.begin(客户端); // 初始化 Thingspeak}void loop() { // 连接或重新连接到 WiFi if(WiFi.status() !=WL_CONNECTED){ Serial.print("Attempting to connect to SSID:"); Serial.println(SECRET_SSID); while(WiFi.status() !=WL_CONNECTED){ WiFi.begin(ssid, pass); // 连接到 WPA/WPA2 网络。如果使用 open 或 WEP 网络,请更改此行 Serial.print(".");延迟(5000); } Serial.println("\n已连接。"); } // 使用值设置字段 Thingspeak.setField(1, number1); Thingspeak.setField(2, number2); Thingspeak.setField(3, number3); Thingspeak.setField(4, number4); // 找出状态信息 if(number1> number2){ myStatus =String("field1 is大于 field2"); } else if(number1 99){ 数字 1 =0; } number2 =随机(0,100); number3 =随机(0,100); number4 =随机(0,100);延迟(20000); // 等待 20 秒再次更新频道}
上传代码后,您会在面板的字段 1 到 4 中看到一些上传的随机数。考勤系统使用相同的结构化代码上传数据。
注意
每次在 ThingSpeak 面板上上传数据之间至少等待 15 秒。
该系统通过指纹登记人员进出后,将员工的日期、姓名、到达时间、出发时间、工作时间等信息存储在SD卡上。然后,此信息将在您指定的时间发送到 ThingSpeak。在没有 Internet 连接的情况下,未发布的数据会被存储起来,一旦连接到 Internet,就会被转发到 ThingSpeak。由于信息存储在微控制器的EEPROM中,因此在停电的情况下不会丢失。
连接好所有模块后,将液晶屏放在Arduino上。
提示
由于 LCD Shield 覆盖了一些 Arduino 引脚,如果您需要这些引脚,您可以将电线从电路板底部连接到特定的引脚。
此代码需要以下库:
Adafruit-指纹-传感器-库
Adafruit-GFX-库
MCUFRIEND_kbv
RTClib
现在下载以下代码并将其上传到您的 Arduino。此代码是为具有默认名称的 11 个人编写的,但您可以更改它们并将其从默认模式中删除。要注册新名称,只需将设备连接到您的计算机并按 键进入注册模式,然后打开串行监视器并按照串行监视器上显示的注册过程进行操作。
从附件下载代码:
您可以在以下链接中了解有关使用 SD 卡、时钟模块和 LCD 的更多信息:
带 Arduino 的 SD 卡模块:如何读/写数据
Arduino DS1307 RTC模块使用方法及注意事项
Arduino TFT LCD 显示器绝对初学者指南。
NodeMCU在本系统中执行上传信息的任务。它通过串口从Arduino获取上传信息并返回上传状态 到阿杜诺。在您的 NodeMCU 上上传以下代码。
#include "Thingspeak.h"#include ESP8266WiFi.h>char ssid[] ="YOUR SSID";char pass[] ="SSID PASSWORD";WiFiClient client;unsigned long myChannelNumber =YOUR CHANNEL ID; const char * myWriteAPIKey ="YOUR CHANNEL WRITE API KEY";String Final ="";String Date ="";String Enter ="";String Exit ="";String Name ="";String WT ="";void String_Analyze(String input) { int index1, index2, index3, index4; index1 =input.indexOf('*', 0); index2 =input.indexOf('*', index1 + 1); index3 =input.indexOf('*', index2 + 1); index4 =input.lastIndexOf('*');名称 =输入;日期 =输入;输入 =输入;退出 =输入; WT =输入; Name.remove(index1); Date.remove(index2); Date.remove(0, index1 + 1); Enter.remove(index3); Enter.remove(0, index2 + 1); Exit.remove(index4); Exit.remove(0, index3 + 1); WT.remove(0, index4 + 1);}void Get_String(){ while (Serial.available()) { Final =Serial.readString(); // 将传入数据读取为字符串 //Serial.println(Final); }}void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); Thingspeak.begin(客户端); pinMode(LED_BUILTIN,输出); digitalWrite(LED_BUILTIN, HIGH);}void loop() { if (WiFi.status() !=WL_CONNECTED) { //Serial.print("Attempting to connect to SSID:"); // Serial.println(ssid);而 (WiFi.status() !=WL_CONNECTED) { WiFi.begin(ssid, pass); // 连接到 WPA/WPA2 网络。如果使用 open 或 WEP 网络,请更改此行 Serial.print("0");延迟(5000); } } 数字写入(LED_BUILTIN,低); //Serial.println("\n已连接。"); Get_String(); String_Analyze(最终); if (!Final.equals("")) { Thingspeak.setField(1, Date); Thingspeak.setField(2, Name); Thingspeak.setField(3, Enter); Thingspeak.setField(4, Exit); Thingspeak.setField(5, WT); int x =Thingspeak.writeFields(myChannelNumber, myWriteAPIKey);如果(x ==200){延迟(100); Serial.print("1"); } else { 延迟(100); Serial.print("0"); } 延迟(17000);最后=“”; }
首先,更改频道 ID 和编写 API 密钥 根据您的 ThingSpeak 面板。
String_Analuze(); 此代码中的函数将 NodeMCU 输入字符串划分为日期、名称、到达和离开时间以及工作时间,并将这些信息发送到 ThingSpeak。然后如果上传成功则发送字符“1”,否则发送字符“0”给Arduino。
String_Analuze();
您可以使用以下地图和不同颜色的有机玻璃或任何其他材料来构建考勤机的主体。
从附件下载设备机身激光切割图:
放置电子元件并组装整个机身后,将其安装在所需的位置。现在,只需将 12V 适配器插入设备即可开始工作。
如果您觉得本教程有用且有趣,请点赞我们 脸书。
/* WriteMultipleFields 描述:每 20 秒在单个 Thingspeak 更新中将值写入字段 1,2,3,4 和状态。硬件:基于 ESP8266 的开发板!!!重要 - 使用您的网络连接和 Thingspeak 频道详细信息修改此项目的 secrets.h 文件。 !!!注意: - 需要 ESP8266WiFi 库和 ESP8622 开发板插件。有关详细信息,请参阅 https://github.com/esp8266/Arduino。 - 从 Tools->Board 菜单中选择目标硬件 - 此示例是为使用 WPA 加密的网络编写的。对于 WEP 或 WPA,相应地更改 WiFi.begin() 调用。 Thingspeak ( https://www.Thingspeak.com ) 是一项分析物联网平台服务,可让您聚合、可视化和分析云中的实时数据流。访问 https://www.Thingspeak.com 注册一个免费帐户并创建一个频道。 Arduino Thingspeak 通信库的文档位于安装该库的 README.md 文件夹中。有关完整的 Thingspeak 文档,请参阅 https://www.mathworks.com/help/Thingspeak/index.html。有关许可信息,请参阅随附的许可文件。版权所有 2018,The MathWorks, Inc.*/#include "Thingspeak.h"#include "secrets.h"#include char ssid[] =SECRET_SSID; // 您的网络 SSID(名称) char pass[] =SECRET_PASS; // 你的网络密码int keyIndex =0; // 您的网络密钥索引号(仅 WEP 需要)WiFiClient 客户端;unsigned long myChannelNumber =SECRET_CH_ID;const char * myWriteAPIKey =SECRET_WRITE_APIKEY;// 初始化我们的值 int number1 =0;int number2 =random(0,100);int number3 =random (0,100);int number4 =random(0,100);String myStatus ="";void setup() { Serial.begin(115200); // 初始化串口 WiFi.mode(WIFI_STA); Thingspeak.begin(客户端); // 初始化 Thingspeak}void loop() { // 连接或重新连接到 WiFi if(WiFi.status() !=WL_CONNECTED){ Serial.print("Attempting to connect to SSID:"); Serial.println(SECRET_SSID); while(WiFi.status() !=WL_CONNECTED){ WiFi.begin(ssid, pass); // 连接到 WPA/WPA2 网络。如果使用 open 或 WEP 网络,请更改此行 Serial.print(".");延迟(5000); } Serial.println("\n已连接。"); } // 使用值设置字段 Thingspeak.setField(1, number1); Thingspeak.setField(2, number2); Thingspeak.setField(3, number3); Thingspeak.setField(4, number4); // 找出状态信息 if(number1> number2){ myStatus =String("field1 is大于 field2"); } else if(number1 99){ 数字 1 =0; } number2 =随机(0,100); number3 =随机(0,100); number4 =随机(0,100);延迟(20000); // 等待 20 秒再次更新频道}
#include "Thingspeak.h"#include ESP8266WiFi.h>char ssid[] ="YOUR SSID";char pass[] ="SSID PASSWORD";WiFiClient client;unsigned long myChannelNumber =YOUR CHANNEL ID;const char * myWriteAPIKey ="YOUR CHANNEL WRITE API KEY";String Final ="";String Date ="";String Enter ="";String Exit ="";String Name ="";String WT ="";void String_Analyze(String输入) { int index1, index2, index3, index4; index1 =input.indexOf('*', 0); index2 =input.indexOf('*', index1 + 1); index3 =input.indexOf('*', index2 + 1); index4 =input.lastIndexOf('*');名称 =输入;日期 =输入;输入 =输入;退出 =输入; WT =输入; Name.remove(index1); Date.remove(index2); Date.remove(0, index1 + 1); Enter.remove(index3); Enter.remove(0, index2 + 1); Exit.remove(index4); Exit.remove(0, index3 + 1); WT.remove(0, index4 + 1);}void Get_String(){ while (Serial.available()) { Final =Serial.readString(); // 将传入数据读取为字符串 //Serial.println(Final); }}void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); Thingspeak.begin(客户端); pinMode(LED_BUILTIN,输出); digitalWrite(LED_BUILTIN, HIGH);}void loop() { if (WiFi.status() !=WL_CONNECTED) { //Serial.print("Attempting to connect to SSID:"); // Serial.println(ssid);而 (WiFi.status() !=WL_CONNECTED) { WiFi.begin(ssid, pass); // 连接到 WPA/WPA2 网络。如果使用 open 或 WEP 网络,请更改此行 Serial.print("0");延迟(5000); } } 数字写入(LED_BUILTIN,低); //Serial.println("\n已连接。"); Get_String(); String_Analyze(最终); if (!Final.equals("")) { Thingspeak.setField(1, Date); Thingspeak.setField(2, Name); Thingspeak.setField(3, Enter); Thingspeak.setField(4, Exit); Thingspeak.setField(5, WT); int x =Thingspeak.writeFields(myChannelNumber, myWriteAPIKey);如果(x ==200){延迟(100); Serial.print("1"); } else { 延迟(100); Serial.print("0"); } 延迟(17000);最后=“”; }
制造工艺
在本 Arduino 教程中,我们将学习如何将 SD 卡模块与 Arduino 板一起使用。此外,结合 DS3231 实时时钟模块,我们将制作一个数据记录示例,将温度传感器的数据存储到 SD 卡中,并将其导入 Excel 以制作图表。您可以观看以下视频或阅读下面的书面教程。 工作原理 首先让我们看一下 SD 卡模块。它适用于工作电压为 3.3 V 的标准 MicroSD 卡。因此,该模块具有稳压器和电平转换器,以便我们可以将其与 Arduino Board 的 5 V 引脚一起使用。 SD 卡模块有六个引脚,两个用于为模块供电、VCC 和 GND 引脚,还有四个用于 SPI 通信的引
在这个项目中,我们将学习如何制作 Arduino 安全和警报系统。您可以观看以下视频或阅读下面的书面教程。 概览 按下 A 按钮 10 秒后,警报启动。为了检测物体,它使用超声波传感器,一旦警报检测到某物,蜂鸣器就会开始发出声音。为了停止警报,我们需要输入一个 4 位数的密码。预设密码是1234,但我们也可以更改。 通过按下 B 按钮,我们进入密码更改菜单,首先我们需要输入当前密码才能继续,然后输入新的 4 位数密码。一旦密码更改,下次我们启动警报时,我们将只能通过输入新密码来停止警报。如果我们输入了错误的密码,我们将收到一条消息,我们需要重试。 必需组件 现在让我们看看这个项目所
Arduino 串行:Arduino 串行通信 串行通信的背景: 当微控制器或微处理器需要与外部世界通信时,它们以 8 位数据包的形式提供数据,因此如果一个系统需要与另一个系统通信,则使用总共 8 线电缆,并不总是实用的解决方案,因为信号在远距离传输时会失真。它也很昂贵,因为8线捆绑的成本很高。这个协议被命名为并行通信,在这之后新协议的需求被唤醒,然后设计者引入了一个新的协议,被命名为串行协议,它只使用了3线传输8行的所有数据。另请阅读:Arduino 编程:什么是 Arduino 以及如何对其进行编程? 串行协议: 在串行协议中,8 位数据由并行输入串行输出移位寄存器转换为串行位流。在接收端
在公共云中保存和使用数据的高昂成本正日益成为公司的交易障碍。组织正在寻找更具成本效益的替代方案,这就是为什么我们看到越来越多的数据遣返案例(提取当前在公共云中的数据并将其重新托管在现场或裸机上的行为)。 本文是数据遣返简介 以及离开公共云以支持本地裸机存储的影响(正面和负面)。继续阅读以了解数据遣返背后的主要驱动因素,看看撤回基于云的数据是否是您的底线的合理举措。 什么是数据遣返? 数据遣返是将数据从公共云移动到自我管理的存储(例如现场专用服务器或私有云)的过程。根据公司决定重新托管多少数据,遣返是: 总计 (当组织提取所有数据并切断与公共云的联系时)。 部分 (当公司决定从云中提取部