前言

事情源于家里的德施曼智能门锁Q5M Pro时不时无法识别我的指纹,只要识别错误2次我就不敢再试了,否则就要被关在门外10分钟,采取手动输入密码解锁的方式开门。我觉得太麻烦,于是就准备改造一下看看有没有方式实现真正意义上的远程开门。

原生App可以远程开门,但是我并没有绑定它的App,用起来太麻烦,因此不确定是通过蓝牙开门还是网络信号,如果是网络远程开门还算凑合,如果是蓝牙开门的话就必须站在门边才能在App中开门,更麻烦。

当然,这并不妨碍我拒绝使用它的App。

方式及原理

查询一番资料,想要无损不拆锁的情况下实现远程开门,只需额外配置一套触发装置。

德施曼智能门锁支持蓝牙钥匙,只需将蓝牙钥匙连接到ESP32C3开发板,通过ESP32C3 的 GPIO 控制 PC817 光耦内部发光二极管的通断,让光耦输出侧的光敏三极管等效“按下”德施曼蓝牙钥匙上的物理按键,从而触发钥匙原本的蓝牙开锁流程。

配件

有了这套方案后,购买相应的配件,成本30元左右。

  • 德施曼蓝牙钥匙3.0: 咸鱼价14

  • ESP32 SuperMini开发板(焊接排针): 咸鱼价12.6

  • PC817 光耦模块: 淘宝价3

  • 杜邦线2-4根:不值钱,买模块的时候让商家送2根;或者用家里的网线自己焊

  • 电烙铁: 常用设备,家里有

  • 5V插头和供电线: 家里老旧的手机充电器可以使用

名称 图片
德施曼蓝牙钥匙3.0
ESP32 SuperMini开发板
PC817 光耦模块

操作步骤

第 1 步:蓝牙钥匙配对

先不要拆蓝牙钥匙,在德施曼的App中添加并配对蓝牙钥匙,并且操作确认可以正常开门(双击)后再拆开,底部有两个小的卡槽很容易撬开来,取出其中的PCB线路板,抠出电池。

第 2 步:钥匙部分接线

纽扣电池一侧:通常中间底部弹片是负极(GND),侧面卡扣弹片是正极(+3V),看纽扣电池上的正负极也能区分,底部够不到的地方是负极,架空的弹片是正极。正负极各焊一根线,正极连接ESP32-C3 SuperMini开发板的 3V3 引脚 ,负极连接 GND 引脚。

ESP32-C3 SuperMini开发板的 GND 引脚 只有一个,这边可以先不接,后面PC817输入端的负极也要接这个引脚,可以先将两根线连起来后再接入 GND 引脚。

背面微动开关一侧:微动开关的四周有4个引脚,两两相通,取其对角线的两个引脚,焊接2根线。连接PC817 输出端的 IN 和 OUT+ 。任意插。

严格来说,因为PC817 光耦的输出端内部是一个光电三极管(有方向性:4 脚集电极 C 必须接按键的高电位端,3 脚发射极 E 必须接低电位端)。

但是家里没有万用表,没法测量。 如果后边焊好后发现按键没反应,只需把焊在光耦输出端的两根按键线对调一下位置即可!接错了也不会烧坏电路,放心尝试。

第 3 步:ESP32-C3 SuperMini部分接线

根据 ESP32-C3 SuperMini 官方引脚规范 与 ESPHome C3 SuperMini 文档:

  • 千万避开 GPIO2、GPIO8、GPIO9:这三个是 ESP32-C3 的启动引导脚(Strapping Pins,且 GPIO8 接了板载蓝灯、GPIO9 接了 BOOT 键),断电重启瞬间会产生电平抖动。

  • 推荐使用 GPIO3:GPIO3 在上电和重启瞬间完全静默,这样保证不会在家里停电再来电时误触发开门

ESP32-C3 SuperMini开发板的 GPIO3引脚 连接 PC817 输入正极,GND 引脚 连接 PC817 输入负极。

完整硬件接线对照表

起点(ESP32-C3 SuperMini) 中间件(PC817 光耦模块 / 裸芯片) 终点(德施曼蓝牙钥匙 PCB) 作用说明
3V3 引脚 —(直接连)— 电池座正极(+) 给蓝牙钥匙提供稳定的 3.3V 免换电池供电
GND 引脚 —(直接连)— 电池座负极(-) 供电共地
GPIO3 引脚 接 PC817 输入正极 (IN+ / 1脚阳极) — 接收 ESP32 开锁高电平脉冲
GND 引脚 接 PC817 输入负极 (IN- / 2脚阴极) — 光耦输入端回路
— PC817 输出端 OUT+(4脚集电极 C) 微动按键焊点 A 模拟手指按下按键(光电隔离)
— PC817 输出端 OUT-(3脚发射极 E) 微动按键焊点 B 若触发无反应,将 A、B 两根线在光耦输出端对调即可

第 4 步:给 ESP32-C3 SuperMini 刷入 ESPHome 门锁固件

这一步应该不用多说,正常操作刷写固件:

eesphome:
  name: deschmann-key
  friendly_name: "德施曼蓝牙钥匙"

esp32:
  board: esp32-c3-devkitm-1
  variant: esp32c3
  framework:
    type: esp-idf
    advanced:
      # 消除日志中的 IRAM 警告,为单核 ESP32-C3 腾出高速内存
      flash_chip: generic

logger:

api:
  # 禁止因短暂网络波动重启芯片
  reboot_timeout: 0s

ota:
  - platform: esphome

wifi:
  ssid: "2.4G Wi-Fi SSID"
  password: "Wi-Fi 密码"
  output_power: 15dB
  power_save_mode: none
  fast_connect: true
  reboot_timeout: 0s
  # 固定静态 IP,替换自己的局域网地址
  manual_ip:
    static_ip: 10.0.0.35
    gateway: 10.0.0.2
    subnet: 255.255.255.0
    dns1: 10.0.0.2

output:
  - platform: gpio
    pin: GPIO3
    id: optocoupler_pin
  - platform: gpio
    pin:
      number: GPIO8
      inverted: true
    id: onboard_blue_led

button:
  - platform: template
    name: "蓝牙钥匙点动测试"
    id: unlock_button
    on_press:
      # 第 1 击:快速唤醒
      - output.turn_on: onboard_blue_led
      - output.turn_on: optocoupler_pin
      - delay: 280ms
      - output.turn_off: optocoupler_pin
      - output.turn_off: onboard_blue_led

      # 停顿 250ms
      - delay: 250ms

      # 第 2 击:触发开锁
      - output.turn_on: onboard_blue_led
      - output.turn_on: optocoupler_pin
      - delay: 350ms
      - output.turn_off: optocoupler_pin
      - output.turn_off: onboard_blue_led

lock:
  - platform: template
    name: "德施曼 Q5M Pro"
    id: de_shi_man_q5m_pro
    optimistic: true
    lambda: |-
      return LOCK_STATE_LOCKED;
    unlock_action:
      - button.press: unlock_button
      - delay: 5s
      - lock.template.publish:
          id: de_shi_man_q5m_pro
          state: LOCKED

第 5 步:接入HomeAssistant

刷完固件之后正常情况在HomeAssistant中可以添加设备了。会出现两个实体按键。

点击任意一个按钮即可测试。同时观察PC817 模块上的信号灯。

可能遇到的问题

Q1: HA中点击解锁,PC817 模块无任何信号输入(信号不闪)

接线有问题,重新检查接线。

Q2:HA中点击解锁,PC817 模块有任何信号输入(信号闪一下),但是门不开

先尝试手动按蓝牙钥匙上的微动开关,确定能正常开门的情况下:

原因 1(占 80% 概率):PC817 输出端的两根线“正负极接反了”

  • 原因:机械按键本身不分正负极,但 PC817 光耦的输出端内部是一个单向导通的“光电三极管”,电流只能从 OUT+(C 极)流向 OUT-(E 极)。如果接反了,哪怕 PC817 上的红灯亮了,内部三极管也是截止不通的,蓝牙钥匙完全收不到按键信号!

  • 测试与解决:

    1. 短接测试:直接拿一把金属镊子(或一根杜邦线),触碰两下焊在 PC817 输出端螺丝端子(OUT1 / OUT2 或 V+ / GND)上的那两个焊点。(模拟双击钥匙)

      • 如果镊子一碰,蓝牙钥匙上的小灯亮了、门锁开了——100% 证明就是光耦输出端正负极反了!
    2. 解决办法:直接把接在 PC817 输出端的这两根去往蓝牙钥匙按键的线,左右对调换一下位置!

原因 2(占 15% 概率):买的“PC817 模块”输出端自带了一颗串联限流电阻导致压降过大

  • 原因:很多成品 PC817 模块为了配合 12V/24V PLC 使用,在 输出端(光电三极管第 4 脚与螺丝端子之间)串联了一颗 1kΩ 或 3.3kΩ 的贴片电阻,但是德施曼蓝牙钥匙只有 3.3V 低电压,如果输出回路里串了一颗 1kΩ 电阻,光耦导通时引脚电压拉不低(压降太大),蓝牙钥匙芯片检测不到按键被按下!

  • 确认与解决:

    1. 看一下手里的 PC817 模块输出端附近是不是有一颗贴片电阻

    2. 如果镊子直接碰蓝牙钥匙按键能开门,但对调输出端正负极后点动依然不开门,说明就是这颗输出电阻挡住了!

    3. 解决办法:用烙铁把输出端那颗贴片电阻直接用焊锡短接连起来(或者直接把蓝牙钥匙的两根按键线,直接焊在黑色四脚 PC817 芯片的 第 3 脚和第 4 脚 引脚根部,绕过模块上的输出电阻)。

Q1与Q2要同时看,这也是我在实践中遇到的问题,最后我直接用一坨锡把电阻岛通了。

成品展示

之前做 AI语音对话台灯 剩下的亚克力材料,把它装进去了。丑是丑了点,这个东西先放在这边看看稳定性,后期准备挪到门口的柜子中去。

原始状态 现在状态

电焊技术不行,只能简单固定防止焊点脱落

Aqara M2网关正好遮在上面

最后

改造德施曼智能门锁远程开门这套流程不难,主要是我不想拆锁,不然家里领导要跟我拼命,这样无损实现远程控制也挺方便,通过HomeKit Bridge桥接到Apple Home中操作挺方便。

但是我的终极目标是门口摄像头进行人脸识别,实现自动开门的流程。

目前已经实践完成,但是由于家里是一梯一户的类型,电梯出来就是大门,整套流程目前在5s走完,对我来说时间还有点长,目标缩短到3s能开门比较实用,仍在优化中。

具体文章后续再发布吧。