内容简介:前陣子入手 Mini PC,主要目的是跑 CentOS 當家用伺服器。利用週末 Coding For Fun,完成我的第一項應用,結合 WiFi Aruduino (ESP2688) + MFRC522 RFID 卡片應感模組,我寫了一個家用打卡鐘,「協助」小閃光與小木頭改掉賴床的壞習慣。(怎麼協助?簡單,科技執法外加罰則就可以囉)在 FB 貼完影片引來不少迴響。Arduino 實體接線取自網路教學、程式來自現成範例小幅修改,接收打卡訊息的 ASP.NET Core 網站原理也很單純沒啥學問,原本沒打算獻
前陣子入手 Mini PC,主要目的是跑 CentOS 當家用伺服器。利用週末 Coding For Fun,完成我的第一項應用,結合 WiFi Aruduino (ESP2688) + MFRC522 RFID 卡片應感模組,我寫了一個家用打卡鐘,「協助」小閃光與小木頭改掉賴床的壞習慣。(怎麼協助?簡單,科技執法外加罰則就可以囉)
在 FB 貼完影片引來不少迴響。Arduino 實體接線取自網路教學、程式來自現成範例小幅修改,接收打卡訊息的 ASP.NET Core 網站原理也很單純沒啥學問,原本沒打算獻醜,但陸續接到網友詢問製作細節,想想還是分享經驗,給有興趣的同學加減參考。
首先,我的 Arduino 主板用的是 ESP8266 NodeMcu,有整合 USB 介面並焊好接腳,內建 WiFi 功能可直接插 USB 上傳程式(有些版本需外接模組才能接電腦),支援 Arduino IDE,有現成程式庫及範例,寫起來跟標準 Arduino 沒什麼兩樣,重點台灣網拍就買得到,兩百塊有找就可以玩玩無線網路回報數據或遠端遙控等有趣應用~~,真便宜耶,效果太高了~~。沒接觸過的同學,我推薦 YouTuber 「佑來了」老師這篇給初學者的 ESP8266 入門介紹與冤枉路分享 ,很值得一看。
MFRC 522 RFID 感應模組可讀取日常生活常見的感應卡片,如悠遊卡、iCash、信用卡及各式門禁卡,一樣能在網拍找到,價格一百出頭。
使用 ESP8266 的一項好處是它在創客界應用甚廣,可參考教學資源眾多。MRFC522 讀卡實做我主要參考這篇: WiFi RFID Reader 包含接線說明、照片、程式範例。文章裡用的 ESP8266 接腳代碼是 GPIOn,但電路板標示則是 D1/D2/D3...,需自行依所用主板規格對照 PIN 腳。我用的板子是 LeLion V3,規格如 圖 ,故訊息接腳分別對映到 D1、D2、D5、D6、D7。
MFRC 522 接腳 | ESP8266 NodeMCU v3 接腳 |
---|---|
RST | D1 (GPIO5) |
NSS | D2 (GPIO4) |
MOSI | D7 (GPIO13/HMISO) |
MISO | D6 (GPIO12/HMOSI) |
SCK | D5 (GPIO14/HSCLK) |
GND | G |
VCC(3.3V) | 3V |
IRQ | 未用 |
另外,我接了一個小蜂鳴器,負極接地,正極接 D8 控制輸出 3V 或 0V 控制產生長短嗶聲,提供刷卡結果的聲音回饋。組裝完成,找了個名片盒下方鑽孔透出 USB 插口當成簡易外殼,趕著 12 月起新制上路,專案要上線,就先不想什麼 3D 列印了。
MFRC 522 程式庫取自 Miguel Balboa 的開源專案,將 Github src 目錄 的 .h, .cpp 檔複製到 .ino (Arduino 程式檔)所在目錄,透過 include "MFRC522.h" 載入程式庫,參考 網路範例 完成 RFID 識別碼讀取部分。至於將內容上傳到 ASP.NET Core ,則是參考 ESP8266 程式庫內附範例及另一篇 文章 。總之,我不會 C 語言只能東抄西抄拼裝合成獸,測試成功的一刻我都想歡呼了。(很難想像,光是怎麼將 byte[] 轉成十六進字串就耗了我起過一個小時,有種老拳師被人挑斷手腳筋的悲涼感... Orz)
程式範例如下,自己都覺得醜,但身為 C 語言麻瓜我無力優化,很怕改一改不知為什麼就壞了(重溫程式菜鳥能搞出來就偷笑,步步如履薄冰的滋味),但程式至少能動,大家加減參考。
#include <stdio.h> #include <stdlib.h> #include <Arduino.h> #include "ESP8266WiFi.h" #include <SPI.h> #include "MFRC522.h" #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> ESP8266WiFiMulti WiFiMulti; #define RST_PIN 5 // RST-PIN for RC522 - GPIO5 #define SS_PIN 4 // SDA-PIN for RC522 - GPIO4 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance const char* ssid = "無線AP名稱"; const char* password = "無線AP密碼"; void setup() { Serial.begin(115200); // Set WiFi to station mode and disconnect from an AP if it was previously connected WiFi.mode(WIFI_STA); WiFiMulti.addAP(ssid, password); while (WiFiMulti.run() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP="); Serial.println(WiFi.localIP()); SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 Serial.println("RFID ready"); //Set D8 output mode to control buzzer pinMode(D8, OUTPUT); } void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { delay(50); return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { delay(50); return; } // Show some details of the PICC (that is: the tag/card) Serial.print(F("Card UID:")); to_hex(mfrc522.uid.uidByte, mfrc522.uid.size); send_data(); Serial.println(); } void beep(int len) { digitalWrite(D8, HIGH); delay(len); digitalWrite(D8, LOW); } char hexStr[32]; void to_hex(byte *buffer, byte buffSize) { char* s = &hexStr[0]; for (byte i = 0; i < buffSize; i++) { snprintf(s, 3, "%02x", buffer[i]); s += 2; } hexStr[buffSize * 2] = 0; Serial.print(hexStr); } void send_data() { HTTPClient http; http.begin("http://192.168.1.123:5000/home/punchin"); http.addHeader("Content-Type", "text/plain"); int httpCode = http.POST(hexStr); if(httpCode > 0) { if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); if (strcmp(payload.c_str(), "OK") == 0) { beep(100); delay(50); beep(100); } else if (strcmp(payload.c_str(), "DP") == 0) { //Duplicated beep(80);delay(40);beep(80);delay(40);beep(80);delay(40);beep(80); } else if (strcmp(payload.c_str(), "NT") == 0) { //Invalid beep(200); } else { //Other Response beep(500); } } else { //HTTP Status<>200 beep(500); } } else { Serial.printf("HTT Error: %s\n", http.errorToString(httpCode).c_str()); beep(500); } http.end(); }
ESP8266 + MFRC522 + ASP.NET Core Web Punch Clock
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 爱打卡源码|爱打卡模式系统开发|爱打卡现成版
- 饱受折磨的家用路由器 | 在研究的127个家用路由器中,没有一个路由器幸免
- 大家用过 API 网关吗?
- 微信小程序消息通知-打卡考勤
- ARTS第四周打卡(2019.04.08~2019.04.14)
- 运动时谁还不来个姨妈:打卡小程序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
第二曲线:跨越“S型曲线”的二次增长
[英]查尔斯·汉迪(Charles Handy) / 苗青 / 机械工业出版社 / 2017-6 / 49.00
S型曲线是每个组织和企业在预测未来时一定会参考的工具,一切事物的发展都逃不开S型曲线(“第一曲线”)。 然而,从公司组织、企业治理、市场的变化,到个人职业发展、社会人际关系以及未来的教育与社会价值,多维度地探讨这个世界需要重新以不同的角度来思考问题,不能够总是停留在“第一曲线”的世界。 如果组织和企业能在第一曲线到达巅峰之前,找到带领企业二次腾飞的“第二曲线”,并且第二曲线必须在第一曲......一起来看看 《第二曲线:跨越“S型曲线”的二次增长》 这本书的介绍吧!