6/16:考慮到新手有時難以找到源碼位置,故明顯化了源碼位置

----------更新分割線----------

實裝效果:

視頻封面

00:48大門實裝演示,已穩定運行1年+

本地伺服器版本遺留產物
掃碼開門

DEMO:

ChatDACS?

39.108.239.49

-----------項目開源,源碼在此分割線:-----------

Giftia/ChatDACS?

github.com
圖標

------------------源碼在此分割線------------------

概覽:本項目是一個使用Node.js創建的基於socket.io的由esp8266實現的全端物聯網門禁系統,分為web端與硬體端。web端前後端強耦合,實現全端,可拆離作為獨立聊天室運行;硬體端由esp8266或可替換的mcu實現,自建區域網伺服器實現本地開鎖,ide可選NodeMCU或Arduino等;由醬菜物聯提供物聯服務。

//本項目沒有技術難度,ifelse撐起大半代碼行,上不了檯面,只是作為個人小半年的學習展示,順便也是作為本項目的完整開發文檔和給小白的創建教程了,大佬勿噴。

副標題無惡意,真的只是酸了,想想自己長那麼大了沒有做出一個能展示出來的成品,有點卑微(嚶嚶嚶)。??先在最開頭放上這個讓我酸的罪魁禍首 @夏風 (x(啊是大佬我死了(因本人排版死早,本文有參考借鑒該文格式,謝謝作者優秀的排版

夏風:自製宿舍NFC門禁教程——當你老是忘帶寢室鑰匙,並且有一個閑置的充電寶的時候?

zhuanlan.zhihu.com
圖標

0x00 介紹與準備

硬體方面,esp8266是一塊非常優秀的物聯網解決方案mcu,性價比高(~10R/pcs),拓展性強,文檔完善,可選IDE多,非常適合新手學習,老手玩耍。可替代選擇有esp32(wifi藍牙一體),cc2xxx系列(藍牙)等。

語言方面,nodejs大法好!(因為腳本語言相對容易上手,且JavaScript大法好!)

關於電子門鎖的選擇,其實原理都是一樣的,由上位機對門鎖進行開關操作,一般有電磁鎖(本項目採用該方案,適合可以進行大改的內開外開門,無需改動鎖,需要改門)、舵機拉動鎖(夏風大佬選擇的無損方案,適合老式橫拉鎖的門)、電子液壓推桿(直接更換鎖芯,比較有破壞性,且萬一斷電了就涼涼)、磁性推桿(原理與電子液壓推桿類似,有破壞性,但是不像電子液壓推桿一次行程後會自鎖,磁性推桿其實像電磁鎖,需要持續供電以續鎖)等方案。大家可以看自己情況選擇。

為了實現本教程,所需準備的基礎材料有:

  • wifi環境,萬物之源。(esp8266僅可使用2.4GHz頻段的wifi)
  • esp8266一塊,約10元。(建議選擇全引腳引出和自帶串口轉USB的開發板,方便且可用充電寶供電)
  • 繼電器一隻,約2元。(注意需要選擇可由3.3v驅動的5v繼電器,部分5v繼電器無法被mcu的3.3v帶動)
  • 電磁鎖一套,約30元。(可自由選擇門鎖類型,上面有介紹,本教程選擇220v轉12v的小吸力電磁鎖)
  • 杜邦線若干,約2元。(連接用的導線)
  • 靈活細緻且小心的雙手,無價。(安全第一!
杜邦線,esp8266開發版,繼電器

*完整實現還需要:

  • 伺服器或主機一枚,約114元。(為了運行web服務端以實現遠程開鎖,114元為阿里雲學生機優惠價,貴的可能是514元還可能是1919810元就不推薦了)
  • 開關一隻,約1元。(門裡的人想出去,室內按開關開門更方便)
  • 小型UPS一坨,約200元。(UPS為了防止斷電大門失守,可以用充電寶代替)
阿里114元學生機(要素察覺

0x01 硬體組裝

視頻封面

00:28組裝示例

根據你所購買的電磁鎖賣家提供的教程安裝電磁鎖,此處不再贅述。確保門鎖能正常工作吸合,且吸力足夠。可選:接駁UPS。

在繼電器控制端,使用母對公杜邦線將繼電器的VCC和GND與esp8266的5V(或3.3V)和GND相連,通過板載電源輸出供電。使用母對公杜邦線將esp8266的D0口與繼電器IN口相連,如繼電器有觸發模式選擇則將觸發模式設置為高電平觸發(HIGH)。TTL控制信號將由d0口發出,選擇d0口的原因是開發板載led指示燈也由d0口觸發,方便查看運行狀態。

在繼電器另一端(即工作端),使用公對公杜邦線將電磁鎖驅動盒內12V+供電電源線與繼電器公共端COM相連,電磁鎖12V+與繼電器常開端相連。

使用普通電源或充電寶給esp8266供電,現在已完成硬體端連接。將各種線整理好,能放的放入驅動盒內,注意不要短路。可選:連接室內開關,以類似繼電器的連法串聯電磁鎖驅動盒內12V-供電電源線。

0x02 esp8266端代碼燒錄(本地伺服器版)

電腦端訪問:

Giftia/ChaosNodeMCU?

github.com
圖標

點擊Star給我一個小紅花(感謝),然後下載整個zip包,解壓後,進入Tools文件夾內:

  1. CH341SER.EXE 為USB轉串口驅動,運行安裝即可。
  2. ESP8266Flasher_x32(x64).exe 為NodeMCU燒錄軟體,選擇適合自己系統的運行。
  3. nodemcu_float_0.9.6-dev_20150704.bin 為本程序所基於的板子固件(若板子無固件則必需),若板子沒有固件,使用第2條所示軟體刷入該固件。
  4. 現在,將esp8266連接電腦,應該能在設備管理器內被正確識別。若沒有正常識別,需要安裝第1條所示驅動。
  5. ESPlorer.zip 為NodeMCU IDE。現在,解壓它,然後運行run.bat。若無法運行需要安裝java jdk,網上自行搜索下載。
  6. 點擊窗口左側上方功能欄open,選擇最開始的zip包解壓目錄下的init.lua,在代碼中更改wifi的ssid和password為你環境wifi的名字和密碼,保存一下。窗口右側上方com選擇相應com口並連接,console應該會提示板子版本和no init.lua。點擊窗口左下角的upload,選擇剛剛打開的init.lua,將代碼上傳至esp8266。
  7. 進度條走完後,按一下esp8266的reset按鍵重啟板子,此時窗口console應該會顯示wifi連接狀態,等待提示連接成功並顯示板子現在的ip為192.168.xxx.xxx,打開連著wifi的手機瀏覽器,訪問這個ip,你應該能看到一個簡單的網頁,試著點擊開門,板子上的led應該會亮起三秒並熄滅,同時繼電器會吸合,門鎖會打開。現在,恭喜你完成了本地伺服器版的區域網門禁配置。此後你可以通過:連接wifi、瀏覽器訪問板子ip、點擊開鎖的方式來開門。

0x03 進階:esp8266端代碼燒錄(無線物聯網版)

在0x02,你成功搭建了一個無線區域網下的門禁系統,它完全由esp8266自己來建立本地服務端,作為一個有wifi功能的mcu,自行處理所有工作。優點是便捷易維護,一般出現問題都是在wifi斷連,解決容易。但是缺點也顯而易見,它的web前端受限於mcu的處理能力,只能提供非常簡陋的靜態網頁,且顯示網頁速度慢;為了開個門一定要連wifi並且知道板子的ip纔行,麻煩。所以更理想一些的實現是:用戶手機無需連接wifi,直接在任意網路環境下開門。為了達到這種無線物聯網實現效果,這需要一個獨立的前端處理用戶輸入,負責將開門關門指令發送給esp8266,esp8266隻需作為後端,負責開門關門即可,同時本地服務端仍然開啟,作為備用開門手段,盡到它作為mcu的作用。

那麼如何實現前後端的通信呢,大家知道,在互聯網上,兩臺設備之間通信需要知道對方的公網ip地址,而現在由於運營商的原因,大家一般都是拿不到公網ip的,所以就需要內網穿透或者別的實現方法,而內網穿透實現繁瑣且不穩定,這裡我曲線救國,用到了一個物聯網平臺 醬菜物聯:

醬菜物聯-會學習的物聯平臺?

www.jcckiot.com

醬菜物聯的優點是隻需一句post就可以控制設備,沒有其他繁瑣的各種操作,實現相當友好,對比過很多iot方案,還是選擇了醬菜,可以說是最友好的方案了。我吹爆醬菜!

註冊賬戶並獲取apikey,在本地伺服器版代碼基礎上,填入到init.lua相應位置並保存??

用戶界面獲取apikey

回到主頁,添加開關,電燈開關或者門開關都可以,這裡我選了電燈開關,其實都差不多??

感覺電燈開關的icon更適合做門禁開關

獲取設備的sid和nid,填入到init.lua的相應位置並保存??

upload代碼到esp8266,reset一下板子,console應該會出現jcck綁定成功的反饋,現在板子已經成功和醬菜物聯建立連接,你可以參考醬菜通信協議向醬菜物聯發個post就可以控制門禁了??

醬菜創客--通信協議|醬菜創客-通信協議 - 醬菜創客 - Powered by phpwind?

www.jcckiot.com
圖標

接下來纔是最重要但也是最簡單的web前端的搭建??

0x04 搭建ChatDACS(web端)

  1. 在伺服器或者你自己的電腦上下載安裝nodejs運行環境,lts版即可,戳這個??Node.js。
  2. 戳這個??github.com/Giftia/ChatD,點擊Star給我一個小紅花(感謝),然後點release下載1.0.0的預發行版(建議不要直接下最新的暫存,因為beta開發中的代碼有很多bug還沒解決,1.0.0是我發行的基本沒有問題的版本,DEMO現在跑的是1.0.1,暫時有bug所以並未發行),並解壓。
  3. 編輯解壓後目錄下的index.js,將apikey改為你自己的apikey並保存。
  4. 在目錄下運行cmd(Windows可以shift+右鍵資源管理器空白處,在此處打開cmd),輸入??

npm i

來安裝依賴,等待依賴安裝完成後,輸入??

node .

把它跑起來,窗口應該會顯示系統啟動綁定成功的反饋。現在,打開瀏覽器,訪問架設機的ip(用自己電腦搭的可以直接訪問127.0.0.1)並測試開門指令,門禁系統應該可以正常工作了。webUI是花了一晚上模仿的6.x老版本的微信界面,只對移動端進行了優化,PC端訪問建議開發者工具模擬成手機訪問獲取最佳效果。

至此,ChatDACS搭建成功,項目架設完畢。

0x05 其他

這個項目還在開發中,現在只發行了一個相對穩定的版本,部分功能仍將長期處於初級階段,歡迎大家提issue來反饋和建議,近期將於智能機器人小夜聯動加入傻屌聊天,再次感謝 @夏風 大佬給我帶來寫這篇教程的動力??,下次將為大家帶來如何做一個智能車鎖的詳盡教程,菜雞緹娜鞠躬b( ̄▽ ̄)d~


推薦閱讀:
相關文章