本帖最后由 ericshuiSC 于 2025-1-2 13:35 编辑
如题,家里是那种老式门禁,楼下有人按了门牌号,上面的电话响起来,楼上接起电话,再按下开门按键,进行开门。
拆开电话之后看了一下,纯纯的模拟电路,没有任何控制芯片,只有两根线接入户。开锁按键四个脚,其中三个脚都是接在一起的,不过有的脚之间接了多个二极管、三极管,总之看得人头皮发麻。
看了一堆帖子,有些案例还挺像的,但是都要用两个以上的继电器,用啥一些不认识的板子进行控制,而且大都是完整模拟了楼下先按门铃;楼上接起电话,再模拟按键开锁的过程,所以感觉还挺难的。
[url=][/url]收起图片
翻了很多帖子,找到一张原理图:
[url=][/url]
我突然发现,这个图里的 Unlocking 按键只是短接了进户线啊,好像和右边的什么,mic ,spk 没啥关系。
于是,我就拿手上的 ESP32 c3 supermin 和一个 5v 的继电器开始尝试,经过实践,楼下按了门牌号之后,根本不需要拿起听筒,直接按短接信号线开锁就行。
即直接把继电器的常开端口和公共端焊接到电路板上那两根入户线的位置,通过继电器短接一秒就能开锁。
测试:
[url=][/url]收起图片
直接开干:
[url=][/url]收起图片
代码使用 micropython (代码比较简单,有需要再贴),使用 mqtt 接入巴法云,再通过小米音箱接入米家 app 。
即可以通过 巴法云 app 、巴法云微信小程序、米家 app 、小爱音箱、Homeassistant 开门(感谢巴法云平台❤️,非广告)。
以下开发板代码请结合以下说明使用:https://145111.xyz/article/16d51119-3bfc-8092-aeef-cca6cd3b77e0
from mqtt_as import MQTTClient,config
import asyncio
import machine
import json
from time import sleep
config['server'] = 'bemfa.com'
config['ssid'] = 'xxx'
config['wifi_pw'] = 'xxxxxx'
config['client_id']='ccc23xxxxxxxxxxxxxxx'
config['port']=9501
config['clean_init'] = True
config['clean'] = True
top_topic="buildingLock006"
led = machine.Pin(8, machine.Pin.OUT)
led.value(1)#先关灯
def callback(topic, msg, retained, properties=None): # MQTT V5 passes properties
print((topic.decode(), msg.decode(), retained))
if topic.decode()==top_topic:
if msg.decode() =='on':
led.value(0)
elif msg.decode() =='off':
led.value(1)
async def conn_han(client):
await client.subscribe(f'{top_topic}', 1)
async def main(client):
await client.connect()
n = 0
led.value(0)
sleep(5)
led.value(1)
while True:
await asyncio.sleep(5)
pass
config['subs_cb'] = callback
config['connect_coro'] = conn_han
client = MQTTClient(config)
try:
asyncio.run(main(client))
finally:
client.close() # Prevent LmacRxBlk:1 errors
|