本帖最后由 windgo 于 2018-3-29 10:33 编辑
2018.03.29更新(只針對ESP32模組)
1.修正wifi斷線自動重連功能,如果沒有連成功也會進行指紋判斷,而不會連不上就卡死
2.增加與MQTT server連線保持功能,穩定MQTT通訊
3.加入透過指紋模組回傳的id來判斷是誰開門的功能,並回傳到MQTT server來給HA做自動化使用
2018.02.22更新
1.增加wifi斷線自動重連功能,wifi連線成功後才會進行指紋偵測
2.增加ESP32的指紋程式碼,接線方式與硬體清單請參考程式內註解
安裝說明:
請將對應的附件檔案放到
資料夾\arduino-1.8.5\hardware\ESPXXXX_FINGER_MQTT_OTA_noOLED\下開啟即可
2018.02.14更新
1.優化指紋辨識速度,效能提昇20%
2.加上OTA遠端上傳韌體功能,只要燒錄過含OTA程式碼,未來透過arduino無線上傳最新版本,不用再接USB線了
OTA操作說明請參考下面連結
https://swf.com.tw/?p=1034 安裝說明:
請將附件的ESP8266_FINGER_MQTT_Control_OTA.ino放到
資料夾\arduino-1.8.5\hardware\ESP8266_FINGER_MQTT_Control_OTA\下開啟即可
今天要跟大家介紹的是如何導入指紋辨識到HA成功開鎖的功能
但第一步你必須要先將你的門鎖導入home-assistant,使HA可以控制開鎖
或是拆掉遙控器用繼電器或GPIO腳位方式短路的方式來遙控開鎖
指紋模組的意義只在於辨識指紋是否在指紋資料庫內
比對成功的話就使用MQTT通知HA
HA再使用自動化偵測到狀態改變而開鎖
要注意差別喔,先上個指紋辨識視頻
移動端或手機點選觀看連結
移動端或手機點選觀看Finger程式執行影片
你可以選擇home-assistant已經支援的lock組件,或是購買可以使用遙控器開關的門鎖
以下舉幾個淘寶能買到的參考商品,要哪一種請自行評估選擇
滾動射頻隱形鎖(可搭配broadlink rm pro+去遠端手機開鎖)
https://item.taobao.com/item.htm?id=39224163576
滾動射頻+藍牙隱形鎖(聽上面的店家說無法搭配broadlink rm pro+,未證實)
https://detail.tmall.com/item.htm?id=5200534737423
電控鎖
https://detail.tmall.com/item.htm?id=41182896584&ns=1
電磁鎖
https://detail.tmall.com/item.htm?id=9399868506
以及其他支援射頻遙控開鎖的都行
好了,你已經有一個門鎖可以開門了,接下來讓我們看一下指模辨識所需要的硬體清單
其中指紋模組你可以跟我買一樣的,也可以買支援UART輸出輸入方式的指紋模組皆可
硬體購買清單:
FPC1020AM+QS808 UART輸出輸入指紋模組
(記得要買接單片機的轉接線,USB的轉接線要不要買看個人)
https://item.taobao.com/item.htm?id=545528806282
ESP8266-NodeMcu 8266 wifi模組
https://detail.tmall.com/item.htm?id=44766400092
USB-TTL:非必須,但建議購買,可以用來在PC上連接指紋模組註冊指紋給未來搜尋資料庫使用
https://detail.tmall.com/item.htm?id=536700034613
Dupont Line 杜邦線:連接指紋模組與NodeMcu用
https://detail.tmall.com/item.htm?id=41065178536
220歐姆電阻:使LED較穩定
https://item.taobao.com/item.htm?id=5653998305
LED:拿來表示辨識成功或失敗用
https://item.taobao.com/item.htm?id=38869571577
如果你購買的是上面連結裡的指紋辨識模組
店家會給你開發文件,如果你沒買也沒關係,我都會放在最下方附件給你下載
1.模組開發說明文件與規格書
2.Demo程式 for windows使用
3.Demo for windows程式碼 <--沒啥用
最重要的就是1和2,非常重要,如果要改我的程式碼,請依照開發說明文件去修改
打開說明文件IDWD1020用户使用手册(20140730增加休眠指令)-fix.docx
依照文件內最後的腳位說明,利用杜邦線將USB-TTL和指紋模組連接
Finger USB-TTL
TX RX
RX TX
GND GND
VIN 3.3V
复制代码
請注意 電壓接錯的話可能導致模組損毀!!
USB-TTL接上PC後,我們要先註冊指紋進資料庫
利用裝置管理員查詢USB-TTL接上PC後的COM port數字
打開demo程式,選擇你開裝置管理員所查詢到的COM port,速率預設值選115200,然後點擊打開設備
這時候就會連線到指紋模組了
你可以看到ID:1
點擊登記 然後手指接觸指紋模組 放下提起三次後 成功登記指紋到 ID 1
你可以登記多組指紋(記得換ID)到資料庫最好每個人用不同的分組,例如1-10 是爸爸 11-20是媽媽 以此類推
未來可以從比對成功的ID來看是誰開鎖(尚未完成此功能)
登記指紋完成後,可使用連續比對做指紋測試
測試也都沒問題的話,就可以繼續下一步
用杜邦線將NodeMcu依照下面說明與指紋模組連接
請注意 電壓接錯的話可能導致模組損毀!!
Finger指紋+算法板連接NodeMCU的接腳方式
Finger NodeMCU
RX = GPIO 13=D7
TX = GPIO 15=D8
GND = GND
3.3V = 3.3V , 不能接5V,接錯模組會燒掉!
LED NodeMCU
+ = GPIO 16=D2
- = GND
如果要加上用遙控器開鎖的腳位接法,並請移除程式內遙控器程式碼標記
遙控器 NodeMCU
Open = GPIO 04=D2
GND = GND
复制代码
接好後,打開附件內的免安裝arduino.exe
選擇開啟\arduino-1.8.5\hardware\ESP8266_FINGER_MQTT_Control\ESP8266_FINGER_MQTT_Control.ino
修改程式碼內的這幾個參數為你的環境參數
const char *mqtt_server = "your_mqtt_server_ip";
const char *ssid = "your_ssid"; // WIFI名稱
const char *password = "your_password"; // WIFI密碼
const char *mqtt_topic = "finger"; // mqtt_topic
const char *mqtt_unlock_payload = "unlock"; // mqtt_unlock_payload
const char *mqtt_lock_payload = "lock"; // mqtt_lock_payload
開發版的設定參數請依照下圖修改,並開啟Serial Monitor去查看開發板執行的結果
然後選擇 Upload 進行程式燒錄
燒錄完成後,開機進行測試
手指放上指紋模組
成功的話會看到LED常亮到開門 ,Serial Monitor會看到
Your finger is in database! Open door! 已找到指紋!開門!
搜尋指紋資料庫失敗的話LED會快速閃動 ,Serial Monitor會看到
Your finger is not in database! 你的指紋不在資料庫內!
辨識指紋成功時NodeMcu會發送一個MQTT訊息給HA主機
請在HA的 configuration.yaml 加入一個sensor
sensor:
- platform: mqtt
name: "finger"
state_topic: "finger"
value_template: '{{ value }}'
复制代码
在automations.yaml加入以下自動化
switch.doorlock : 這是你門鎖的開關名稱,記得改成你的名稱
- action:
- data:
entity_id: switch.doorlock
service: switch.turn_on
alias: Finger_Open_Door
condition: []
id: '1515659572077'
trigger:
- entity_id: sensor.finger
platform: state
to: unlock
复制代码
在 customize.yaml 加入以下設定 可以讓 sensor.finger在HA剛啟動完就得到一個初始值lock
sensor.finger:
friendly_name: 指紋
templates:
state: if (state === 'unknown') return 'lock'; else return state;
复制代码
這樣就完成當指紋辨識成功後,NodeMcu透過MQTT通知HA開鎖的功能了
另外如果你買的不是跟我一樣的指紋模組,需要修改程式碼中的 command 內容
可使用 USBPcap 抓demo程式的封包來看,來決定程式碼該如何改
附件內的 sscom32E.exe 可以拿來先驗證你抓的USB封包內容,從PC送出去給指紋模組的溝通回應
以下是我使用USBPcap抓包的範例,1.2.2 是我的USB-TTL裝置ID,所以我會查看相關的封包內容
查看從PC送給指紋模塊的封包內容,最下面可以看到數據(需點開查看全部數值)
55 AA 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
查看從指紋模組送給PC的封包內容,最下面可以看到數據(需點開查看全部數值)
AA 55 01 00 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 01
對照開發說明文件與抓包的順序,你就能知道你的URAT指紋模組的程式碼該怎麼寫了
相關參考資料
指紋模組FPC1020AM_算法板QS808_IDWD1020用户使用手册
https://wenku.baidu.com/view/c174958f4a7302768f993900.html
How to use ESP8266 Nodemcu UART2 -- Serial.swap()
https://github.com/esp8266/Ardui ... eference.rst#serial
MQTT教學(六):使用PubSubClient程式庫開發Arduino MQTT應用
https://swf.com.tw/?p=1021
使用USBpcap抓取USB封包內容
https://www.anquanke.com/post/id/85218
SSCOM串口通訊工具
http://yhhuang1966.blogspot.tw/2016/05/sscom.html
額外參考:Mifare RFID-RC522模組實驗(四):Mifare RFID的門禁系統實驗
https://swf.com.tw/?p=1027
其他相關
http://www.arduino.cn/forum.php?mod=viewthread&tid=21129
http://www.arduino.cn/thread-46104-1-1.html
附件壓縮檔內容
附件下載連結
https://goo.gl/xBAcYN
2018.02.22更新
ESP8266_FINGER_MQTT_OTA_noOLED.ino
ESP8266_FINGER_MQTT_OTA_noOLED.ino
(13.94 KB, 下载次数: 28)
ESP32_FINGER_20180329.ino
ESP32_Finger_20180329.ino
(13.36 KB, 下载次数: 31)