مقدمه
آنچه در این آموزش یاد می گیرید
- آشنایی با محیط داده ابری Thingspeak
- ذخیره آنلاین دیتا در Thingspeak با استفاده از Nodemcu
- ساخت یک دستگاه حضور و غیاب IoT با سنسور اثر انگشت و آردوینو
Thingspeak چیست؟
برقراری ارتباط با Thingspeak و آپلود داده
برای شروع برقراری ارتباط با Thingspeak مراحل زیر را دنبال کنید:
گام اول) وارد سایت thingspeak.com شوید و یک اکانت بسازید.
گام ششم) برای راحتی کار با پلتفروم Thingspeak برای آن کتابخانه موجود است آنرا دانلود کرده و به Arduino IDE اضافه کنید.
لینک دانلود کتابخانه Thingspeak
گام هفتم) Arduino IDE را باز کنید. از قسمت مثال ها WriteMultipleFields را باز کرده و SSID، Password، Channel ID و Write API Key را وراد کنید.
فایل secrets.h
/*
WriteMultipleFields
Description: Writes values to fields 1,2,3,4 and status in a single ThingSpeak update every 20 seconds.
Hardware: ESP8266 based boards
!!! IMPORTANT - Modify the secrets.h file for this project with your network connection and ThingSpeak channel details. !!!
Note:
- Requires ESP8266WiFi library and ESP8622 board add-on. See https://github.com/esp8266/Arduino for details.
- Select the target hardware from the Tools->Board menu
- This example is written for a network using WPA encryption. For WEP or WPA, change the WiFi.begin() call accordingly.
ThingSpeak ( https://www.thingspeak.com ) is an analytic IoT platform service that allows you to aggregate, visualize, and
analyze live data streams in the cloud. Visit https://www.thingspeak.com to sign up for a free account and create a channel.
Documentation for the ThingSpeak Communication Library for Arduino is in the README.md folder where the library was installed.
See https://www.mathworks.com/help/thingspeak/index.html for the full ThingSpeak documentation.
For licensing information, see the accompanying license file.
Copyright 2018, The MathWorks, Inc.
*/
#include "ThingSpeak.h"
#include "secrets.h"
#include <ESP8266WiFi.h>
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)
WiFiClient client;
unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;
// Initialize our values
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); // Initialize serial
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client); // Initialize ThingSpeak
}
void loop() {
// Connect or reconnect to 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); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
// set the fields with the values
ThingSpeak.setField(1, number1);
ThingSpeak.setField(2, number2);
ThingSpeak.setField(3, number3);
ThingSpeak.setField(4, number4);
// figure out the status message
if(number1 > number2){
myStatus = String("field1 is greater than field2");
}
else if(number1 < number2){
myStatus = String("field1 is less than field2");
}
else{
myStatus = String("field1 equals field2");
}
// set the status
ThingSpeak.setStatus(myStatus);
// write to the ThingSpeak channel
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(x == 200){
Serial.println("Channel update successful.");
}
else{
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
// change the values
number1++;
if(number1 > 99){
number1 = 0;
}
number2 = random(0,100);
number3 = random(0,100);
number4 = random(0,100);
delay(20000); // Wait 20 seconds to update the channel again
}
توجه
بین هر بار آپلود کردن داده روی پنل Thingspeak حداقل 15 ثانیه زمان لازم است.
ساخت دستگاه حضور و غیاب IoT با سنسور اثر انگشت و آردوینو
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
سیم بندی
توجه
به دلیل آنکه شیلد LCD قسمتی از پایه های آردوینو را می پوشاند در صورت نیاز به آن پایه ها، از زیر بورد به پایه مورد نظر سیم لحیم کنید.
کد
برای ساخت این دستگاه به کتابخانه های زیر نیاز دارید:
Adafruit-Fingerprint-Sensor-Library
حال کد زیر را دانلود کرده و روی آردوینو خود آپلود کنید. در این کد بصورت پیشفرض برای 11 نفر اسم انتخاب شده که می توانید آنها را تغییر داده یا از حالت پیشفرض خارج کنید. برای ثبت نام نفر جدید کافی است دستگاه را به کامپیوتر خود متصل کرده و کلید را فشار دهید تا سیستم به حالت ثبت نام برود سپس Serial Monitor را باز کرده و فرآیند ثبت نام را طبق دستورالعمل نشان داده شده در Serial monitor انجام دهید.
Fingerprint_Attendance_Code
می توانید برای کسب اطلاعات بیشتر راجع به کار با SD کارت آموزش نوشتن و خواندن SD کارت با آردوینو، برای کار با ماژول ساعت آموزش چگونه از ماژول RTC DS1307 با آردوینو استفاده کنیم و یک یادآور هوشمند بسازیم و برای کار با LCD راهنمای کامل مبتدیان برای استفاده از نمایشگرهای TFT LCD با آردوینو را مطالعه کنید.
وظیفه آپلود کردن اطلاعات با Nodemcu می باشد، Nodemcu از طریق درگاه سریال اطلاعات را برای آپلود از آردوینو می گیرد و وضعیت آپلود شدن را به آردوینو بر می گرداند. کد زیر را روی 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('*');
Name = input;
Date = input;
Enter = input;
Exit = input;
WT = input;
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(); // read the incoming data as string
//Serial.println(Final);
}
}
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
//Serial.print("Attempting to connect to SSID: ");
// Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
Serial.print("0");
delay(5000);
}
}
digitalWrite(LED_BUILTIN, LOW);
//Serial.println("\nConnected.");
Get_String();
String_Analyze(Final);
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);
if (x == 200) {
delay(100);
Serial.print("1");
}
else {
delay(100);
Serial.print("0");
}
delay(17000);
Final = "";
}
}
String_Analuze ();
رشته ورودی به Nodemcu را به تاریخ، نام، ساعت ورود، ساعت خروج و جمع کاری تفکیک کرده و این اطلاعات را به Thingspeak ارسال می کند، سپس در صورت موفقیت آمیز بودن فرایند آپلود کاراکتر “1” و در صورت عدم آپلود کاراکتر “0” را به آردوینو ارسال می کند. ساخت بدنه و سر هم بندی دستگاه حضور و غیاب
Download the device body laser cut map from here:
Attendance_Device_Laser_Cut_Map
پس از جاسازی قطعات الکترونیکی و سرهم بندی کامل بدنه، آن را در جای دلخواه نصب کنید. حال تنها کافیست آداپتور 12ولت را به دستگاه متصل کنید تا دستگاه شروع به کار کند.
یک گام جلوتر
- سعی کنید از آیکون های بیشتری روی LCD استفاده کنید.
- سعی کنید سیستم را به RFID نیز مجهز کنید.
- سعی کنید بجای استفاده از Thingspeak داده ها را در google spreadsheets آپلود کنید.
Comments (31)
سلام
ممنون برای آموزش فوق العادتون
یه سوال، امکانش هست به جای NodeMCU و ماژول SD، از یه شیلد شبکه که میکرو SD می خوره استفاده کنیم؟
راستی ای کاش می گفتین که تنها دلیل برای استفاده از Arduino Mega اینه که دو تا سریال داره و میشه همزمان از FingerPrint و RFID استفاده کرد، چون ممکنه خیلی ها نیازی به RFID نداشته باشن.
متاسفانه تمام لینک های دانلود خراب هستن.. اگه ممکنه درستش کنین.
بازم ممنون واسه زحماتتون
با سلام.
بله می تونید.
چشم لینکارو چک می کنیم و اصلاح می کنیم
با سلام برنامه با سخت افزار معرفی شده نمیخونه اول اینکه کتابخانه ال سی دی اونی نیست که اینجا معرفیشده در ثانی کتابخانه سنسور اثرانگشت هم این نیست و کتابخانه اش رو باید بنویسسد که البته یه سرچ بزنید جفتشون رو میابید، در آخر آموزش قدم به قدم نیست و بیشتر میخوره ترجمه باشه،خواهشمندیم خودتون که این مطلب رو گذاشتین یکبار تست میکردید و آموزش رو هم تکمیل میکردین
اگر https://electropeak.com/learn/fingerprint-attendance-system-w-real-time-online-data-backup/ منظورتونه، این سایت هم برای خودمون هست و از این دستگاه بصورت عملی داره استفاده میشه.
سلام وخسته نباشد از موضوع که آموزش دادید تشکر ولی چظور میشه اطلاعات داخل را فراخوانی ونمایش داد البته ماگفته نماند که تا اینجا هم فوق العاده هست
سلام
منظورتون از اطلاعات داخل چی هست؟
سلام ممنون از مطالب جالبتون ، آیا اجازهی استفاده از آموزش هاتون در پروژه های تجاری رو داریم؟
سلام. بله حتما، استفاده از مطالب به هر صورت که تمایل دارید حتی بدون ذکر منبع مجاز است
برنامه نویسیش چطور و با چیه اگه فیلدی بخوام بهش اضافه کنم؟
با سلام
منظورتان را متوجه نشدم. نحوه ی برنامه نویسی کامل در متن آورده شده است.
منظورتان از فیلد را بهتر توضیح دهید.
سلام ممنون از آموزشتون. چطور میشه کاری کرد که از اسامی افراد و ساعت ورود و خروجشون پرینت گرفت؟
سلام،
اطلاعات مربوط به اسامی افراد و ساعات ورود و خروجشون همگی ابتدا در SD card با فرمت csv ذخیره میشه و سپس در فضای thingspeak هم آپلود میشه. برای پرینت کردن این اطلاعات کافیه که اونارو از روی SD card بخونید. برای این کار هم میتونید از خود آردوینو و آموزش با لینک “http://thecaferobot.com/learn/sd-micro-sd-read-write-arduino/” استفاده کنید و هم اینکه مستقیما SD کارت رو به کامپیوتر متصل کنید و فایل درونش رو مشاهده کنید و ازشون پرینت بگیرید.
میشه Nodemcu رو قرار نداد و بدون استفاده از thingspeak و فقط با ماژول میکرو و DS3231 این کار رو انجام داد؟
سلام.
بله میشه. nodemcu به طور خاص برای ارتباط با thingspeak و آپلود اطلاعات روی آن انتخاب شده. اگر فقط قصد داشته باشید که یک دستگاه حضور و غیاب بسازید که با ثبت اثر انگشت، ساعت ثبت شدن اون اثرانشگت رو ذخیره کنه، میتونید با یک میکروکنترلر مثل آردوینو یا هر میکروی دیگه به علاوه سنسور اثر انگشت، ماژول DS3231 و ماژول SD Card این کار رو انجام بدید. برای اطلاعات در مورد نحوه راهاندازی هر کدوم از این ماژولها با آردوینو میتونید از آموزشهای زیر استفاده کنید:
“https://thecaferobot.com/learn/sd-micro-sd-read-write-arduino/”
“https://thecaferobot.com/learn/interfacing-fpm10a-as608-optical-fingerprint-reader-sensor-module-with-arduino/”
سلام متشکر از آموزشتون. به جای برد مگا میشه از uno استفاده کرد؟
سلام، ممنون نظر لطفتونه
بله مشکلی نداره. فقط لازمه که نسبت به سیمبندی جدیدی که دارید، در کد هم تغییرات رو به شماره پایهها اعمال کنید.
سلام متشکر از اموزشتون. ببخشید فابل های پرینت سه بعدی این دستگاه موجود هست؟
سلام… ممنون از لطف شما.
نه متأسفانه فایلهای پرینت سه بعدی این دستگاه موجود نیست.
سلام متشکر از آموزشتون. ببخشید فایل icons که همراه با کد اصلی هست رو باید کجا استفاده کنیم؟
سلام.
بنده فایلی به نام icons جایی از آموزش نمیبینم. اما اگر منظورتون هر فایل دیگهای با پسوند h. هست، اون رو باید تو پوشه اصلی که کد آردوینوتون قرار داره، بذارید. کار دیگهای لازم نیست که انجام بدید.
سلام ممنون بابت آموزش خوبتون. چرا نقشه دانلود نمیشه؟
با سلام خدمت شما و خسته نباشید بابت این پروژه جذابتون اینگه بنده قطعاتو از سایت شما خریداری کردم و قصد دارم برای پروژه دانشگاه ارائه بدم به ی سری مشکل برخورد کردم اینکه چطور میتونم از کمک شما استفاده کنم ممنون میشم راهنمایی کنید
سلام.
میتونید سوالاتتون رو همیجا یا از طریق انجمن کافه ربات بپرسید. آدرس انجمن:
https://thecaferobot.com/forum/
در انجمن امکان قرار دادن عکس، کد و … هم موجود هست.
سلام اگر پروژتونو انجام دادید امکانش هست باهاتون صحبتی داشته باشم
با سلام
سؤال های خودتون رو میتوانید همین جا یا در بخش انجمن سؤال کنید.
سلام … ببخشید میشه خواهش کنم لینک map رو درست کنید ؟؟ چون میخام این رو انجامش بدم ..
سلام
لینک مشکلی نداره و قابل دانلود هست
با سلام
آیا میشه به جای ماژول اثرانگشت R301 از ماژول اثر انگشت AS608 استفاده کرد؟
با سلام
بله از انواع ماژول های اثرانگشت می توانید جای سایر مورد ها استفاده کنید.
فقط توجه داشته باشید که در کد خود در صورت نیاز بادریت را بر اساس مدل مورد استفاده درست انتخاب کنید (البته در این مورد یکسان می باشد)
سلام حتما باید از برد آردوینو مگا استفاده کرد؟
با اردوینو uno نمیشه ؟
با سلام
به دلیل استفاده از نمایشگر تمامی پایه های آردوینو Uno پر می شود و امکان استفاده از سایر قطعات وجود ندارد که بخواهید آنها را نیز راه اندازی کنید.
در نتیجه تنها گزینه آردوینو Mega می باشد، البته شما می توانید نمایشگر را حذف کنید و به جایش از نمایشگر های کارکتری استفاده کنید که پایه ها آزاد بشود و کد را بر اساس همین موضوع تغییر بدهید.