『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 28031|回复: 42

UART指紋模組FPC1020AM+ESP8266NodeMCU(或ESP32)導入HA開鎖功能

  [复制链接]

27

主题

387

帖子

3265

积分

元老级技术达人

积分
3265
金钱
2858
HASS币
40

教程狂人

发表于 2018-2-11 21:07:32 | 显示全部楼层 |阅读模式
本帖最后由 windgo 于 2018-3-29 10:33 编辑

2018.03.29更新(只針對ESP32模組)
1.修正wifi斷線自動重連功能,如果沒有連成功也會進行指紋判斷,而不會連不上就卡死
2.增加與MQTT server連線保持功能,穩定MQTT通訊
3.加入透過指紋模組回傳的id來判斷是誰開門的功能,並回傳到MQTT server來給HA做自動化使用
Image_20180329_001.png


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

Image_20180211_003.png
Image_20180211_004.png
請注意 電壓接錯的話可能導致模組損毀!!

USB-TTL接上PC後,我們要先註冊指紋進資料庫
利用裝置管理員查詢USB-TTL接上PC後的COM port數字
Image_20180211_006.png
打開demo程式,選擇你開裝置管理員所查詢到的COM port,速率預設值選115200,然後點擊打開設備
這時候就會連線到指紋模組了
Image_20180211_010.png
你可以看到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去查看開發板執行的結果
Image_20180211_013.png
然後選擇Upload進行程式燒錄
Image_20180211_014.png
燒錄完成後,開機進行測試
手指放上指紋模組
成功的話會看到LED常亮到開門,Serial Monitor會看到
Your finger is in database! Open door! 已找到指紋!開門!
搜尋指紋資料庫失敗的話LED會快速閃動,Serial Monitor會看到
Your finger is not in database! 你的指紋不在資料庫內!
Image_20180212_031.png
辨識指紋成功時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送出去給指紋模組的溝通回應
Image_20180211_015.png

以下是我使用USBPcap抓包的範例,1.2.2是我的USB-TTL裝置ID,所以我會查看相關的封包內容
Image_20180211_007.png
查看從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
Image_20180211_008.png
查看從指紋模組送給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

Image_20180211_009.png
對照開發說明文件與抓包的順序,你就能知道你的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

附件壓縮檔內容
Image_20180211_016.png


附件下載連結
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)

































评分

参与人数 1金钱 +20 收起 理由
+ 20 膜拜大神!!!

查看全部评分

回复

使用道具 举报

0

主题

316

帖子

1732

积分

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1416
HASS币
0
发表于 2018-2-11 23:13:36 | 显示全部楼层
我一个大男人为什么经常膝盖淤青,都是给大佬跪的
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16414
金钱
11668
HASS币
45
发表于 2018-2-12 09:41:05 | 显示全部楼层
这个太厉害了!

不过想提醒一下楼主和大家,最好别用这种定码射频遥控的,也就是rm pro能控制的,这样的话,别人可以轻易学到码来开你的锁。用滚码射频的,相对安全一些,但那样得模拟按键,有点费劲。
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2018-2-12 11:26:45 | 显示全部楼层
Jones 发表于 2018-2-12 09:41
这个太厉害了!

不过想提醒一下楼主和大家,最好别用这种定码射频遥控的,也就是rm pro能控制的,这样的话 ...

这个问题在两个月前群里大家已经和楼主激烈的讨论过,他的锁 RM Pro 是直接支持变码,不是定码。
Nero
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16414
金钱
11668
HASS币
45
发表于 2018-2-12 11:28:09 | 显示全部楼层
neroxps 发表于 2018-2-12 11:26
这个问题在两个月前群里大家已经和楼主激烈的讨论过,他的锁 RM Pro 是直接支持变码,不是定码。 ...

还有这种操作??
回复

使用道具 举报

25

主题

416

帖子

3027

积分

元老级技术达人

积分
3027
金钱
2601
HASS币
40
发表于 2018-2-12 11:40:41 | 显示全部楼层
膜拜大神了
回复

使用道具 举报

11

主题

337

帖子

1390

积分

金牌会员

iLee

Rank: 6Rank: 6

积分
1390
金钱
1052
HASS币
0
发表于 2018-2-12 11:48:59 | 显示全部楼层
之前临时做过一套电控锁那个方案。算是最廉价的方案了。但是用于户外门还是 用合规那种
群名叫iLee
GitHub叫ileez
Docker Hub叫zlee

这么多名字都是被逼的。。。
回复

使用道具 举报

1

主题

80

帖子

607

积分

高级会员

Rank: 4

积分
607
金钱
527
HASS币
0
发表于 2018-2-12 11:54:03 | 显示全部楼层
真是太厲害了,學習與收藏
回复

使用道具 举报

5

主题

183

帖子

1388

积分

论坛积极会员

Real

积分
1388
金钱
1200
HASS币
0
发表于 2018-2-13 16:59:55 | 显示全部楼层
新年快乐,膜拜下大神
回复

使用道具 举报

9

主题

787

帖子

3862

积分

论坛元老

Rank: 8Rank: 8

积分
3862
金钱
3075
HASS币
87
发表于 2018-2-14 10:59:49 | 显示全部楼层
太吊了,完全看不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-5 12:47 , Processed in 0.069655 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表