由于作者是程序员,对编程方便比较了解,对硬件方便不太了解,可能有更好对方案,写这篇教程只是给大家一些灵感,大家在可以在评论区一起讨论。
现在带钱包就是为了放小区楼下门禁的钥匙,家里的门锁早就换成指纹锁了,能不能彻底摆脱钥匙的束缚呢。今天拿出好久没开机的树莓派,加上之前买的一堆元器件开始折腾。
一般老小区的门禁都非常简单,我们小区门禁连接到每个家庭是一根五芯的电缆。当拿起听筒(其实不拿也可以),点击开锁按钮的时候有 2 根线瞬间被联通,从而形成通路导致门锁被打开。
到底是需要哪连根线被联通呢?由于找不到说明书,只能自己测试。我把听筒放在耳边,找一根电线挨个测试,最终找的这 2 根线。
接下来的工作就是如何通过手机来控制这 2 根线的联通,我选择的是树莓派 + 继电器,继电器的作用本质是用一个回路(一般是小电流)去控制另外一个回路,树莓派就是让继电器形成这个小电流的回路。
我用是这款 1 路继电器,淘宝上很容易找到。
找 3 根杜邦线把树莓派这头接上,分别是红线 5V,灰线 0 V,蓝线 GPIO. 3 。
杜邦线另一头接到继电器的针脚上,接线正常到话红灯会亮。
把上面找出来的 2 根开锁线间断,剥掉一段塑料包皮然后缠绕在一起,2 根线分别接在公共端和常开端。
到这里硬件就连接好了,下面登录树莓派测试一下。树莓派系统自带 gpio 命令,测试非常方便,我发现这个继电器只要将 mode 设置为 out 常开端就能联通,联通后绿灯会亮。
确定硬件连接正常后,就是考虑如何用 API 来控制继电器的闭合。这里我选择的是 Python 的 RPi.GPIO 库,好像是树莓派自带的,我写的代码如下。
import RPi.GPIO as GPIO
import time
import sys
def open():
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)
GPIO.output(22, GPIO.HIGH)
time.sleep(1)
GPIO.cleanup()
我们还需要搞一个在线的 HTTP 服务,以便我们在手机或电脑上调用这段代码。可以用 Python 的 Flask 搭一个简单的 HTTP 服务。
from flask import Flask
from flask import jsonify
import door
import sys
app = Flask(__name__)
@app.route('/open')
def hello_world():
door.open()
return jsonify(error=False)
if __name__ == '__main__':
app.run(host='0.0.0.0')
最后通过快捷指令请求这个 HTTP 的 API 就能打开小区门禁了,安卓端可以选择其他类似 APP 。
还可以把这个快捷指令放到负一屏更加方便操作。
1
l0wkey 2020-06-15 11:43:24 +08:00 1
|
2
Smash 2020-06-15 11:43:30 +08:00
可惜我们家小区门禁是加密门卡,miui12 模拟上了也用不起。
|
3
lloydsheng OP @l0wkey 方案很多啊,大家可以多多讨论,我是刚好有哥闲置 2 代树莓派,放了好几年没用 😂
|
4
l0wkey 2020-06-15 11:47:29 +08:00
补充:平时玩的不多没有串口线烧录夹之类的话,NodeMCU (带 u 转串口的 8266 ) + 单独继电器更方便
|
5
l0wkey 2020-06-15 11:49:17 +08:00
@lloydsheng #3 嗯是的~ 不过树莓派的话理论上可以上 nodemcu 做到 lowcode 开发
顺便还能集成点其他功能 https://v2ex.com/t/642563#reply8 就是体积可能略大放不进去那个话机 |
7
l0wkey 2020-06-15 11:56:26 +08:00
@Smash #6 嗯。不过上 HTTP 在这里并不是一个好选项,得同一个 WiFi 或把端口映射出来(风险略高)。所以比较合适的方式是连接云物联网平台上 MQTT 这类长连接作为控制通道,设备侧订阅,然后手机侧用 MQTT 或者 HTTP 方式发送。
一方面可以传输控制指令,另一方面还可以复用 MQTT 通道来监测设备运行状态。 |
8
lmmortal 2020-06-15 12:07:53 +08:00 via iPhone
思路挺不错的 我都想做个自动通断的开关了,每隔一分钟自动开楼下的门,这样就不用输密码不用带钥匙了,站在门口等一分钟就自动开
|
10
zlkent 2020-06-15 12:17:58 +08:00
我也想过用 NodeMCU 通过话机来控制门禁,不过断了念想的原因是供电问题,用电池又不方便,话机附近又没有留插座。
|
11
lloydsheng OP @zlkent 搞一个小的充电宝放进去?
|
12
lloydsheng OP @lmmortal 要是这样这门禁不就直接废掉了吗,无论是谁等一分就能开门😂
|
13
lmmortal 2020-06-15 12:24:38 +08:00 via iPhone 2
@hooon
@lloydsheng 就是要废掉门禁,楼下门禁没啥意义,反正就算是小偷坏人在楼下等一会也会有人开门上楼的,而且也不会有人管上楼的人是去哪个房间,不会管是不是坏人,根本防不住任何人,所以最后就是只是给住户增加麻烦 |
14
imdong 2020-06-15 12:26:20 +08:00 via iPhone
esp01 甚至可以塞进电话里面去😏
|
15
lvyuedong 2020-06-15 12:29:27 +08:00
@Smash 加密的有方法写入的,一般都是 m1 或者 ic 模拟 m1,但是不管怎样,最后都是继电器电磁铁,想想办法一切皆有可能。
|
16
lloydsheng OP @imdong 可以用的模块很多,供电的电源是个问题,我这个好解决是因为我装修的时候门禁的先走弱电箱弯了一道。
|
17
cjpjxjx 2020-06-15 12:42:01 +08:00 via iPhone
两根线连通就能开门?那其实只要一个智能插座+继电器就行了,原理和电脑的开机按钮一样
https://www.cencs.com/53.html |
19
weyou 2020-06-15 13:19:54 +08:00 via Android
很有想法,就是因为楼下门禁需要钥匙才打消了安装智能锁的念头。一个问题,这样的话开门之前是不是还是要揿一下自家门牌号按钮?
|
20
lloydsheng OP @weyou 我们小区这款设备非常简单,什么额外操作都不需要,只需要在手机上点一下快捷指令。
|
21
zhouquanbest 2020-06-15 14:26:55 +08:00
不如用小米那种 wifi 开关来做连接 成本比较低
|
22
zlkent 2020-06-15 14:37:17 +08:00
|
23
mrcn 2020-06-15 14:53:03 +08:00
@lmmortal 陌生人在楼下呆久了开不开门本身就会引起警觉,不论怎么说都比裸着的强
你私自废了门禁别人丢了东西,如果没抓到贼肯定就会怪你 |
24
icegaze 2020-06-15 15:05:36 +08:00 via Android
我在楼道门禁机控制器里加了个蓝牙遥控开关,20 元,体积很小,看不出来。有手机 app,选择点动功能,点一下,直接吸合再释放继电器,,,继电器并联在接出门按钮接头上。
|
25
icegaze 2020-06-15 15:09:50 +08:00 via Android
蓝牙比较靠谱,1 功耗小直接加在门禁机控制器里没问题,不会影响原来的电路板 2 距离短,在门口才能连接 3app 带指令密码,一般手机即使连接上也不能操作它。
|
26
wangxiaoaer 2020-06-15 15:15:47 +08:00 via Android
@lmmortal 别这么极端,起码小偷半夜无人进不来。
|
27
NotFoundEgg 2020-06-15 15:22:17 +08:00
弄个诺基亚 打开电话白名单 把震动马达的线拆下来接到门铃上(逃
|
28
mlhorizon 2020-06-15 15:31:47 +08:00
为楼主点个赞!
从知道用什么方案,到做出想要的效果来,期间是需要投入很多精力的,不过成功后收获的乐趣也要多很多。 很多人都停在了知道 xxx 可以做 yyy 上,从来没动手实现过,把能获得最强烈的成就感的步骤给丢弃了,太可惜了。 |
29
lmmortal 2020-06-15 16:13:43 +08:00 via iPhone 1
|
30
lmmortal 2020-06-15 16:16:41 +08:00 via iPhone
并且小偷如果不会开锁,楼下的门就算别人帮他开了,他怎么入室盗窃呢。
|
31
systemcall 2020-06-15 16:30:04 +08:00 via Android
@zlkent 可以不考虑充电,一次电池也可以供电,反正 esp8266 也需要 3.3V 的电压,电池组做到 6V 或者 9V 就行了,esp8266 有内建的 ADC,拿电阻分压就可以满足了,电池电压过低定期发个警告。
|
32
systemcall 2020-06-15 16:32:02 +08:00 via Android
如果没记错的话,电话线是 12V 的交流电,接通的时候是 24V
先量一下电压,确定有没有供电。一般来说,电话线是有供电的 可以考虑拿二极管堆个全桥整流出来,再通过 ldo 给 esp8266 供电 |
33
weyou 2020-06-15 17:41:33 +08:00 via Android
@lloydsheng 我这里是楼下必须要按下按钮,家里门禁电话必须接起来才可以按开门按钮。否则直接按开门按钮没有用。估计要复杂一点了,但楼主提供了很好的思路,有空试试。
|
34
B1ankCat 2020-06-15 17:46:47 +08:00
|
35
ajaxfunction 2020-06-15 17:55:34 +08:00
|
36
ihciah 2020-06-15 18:25:42 +08:00
(这个多年前我们宿舍楼有人搞过,还接入了学生账号认证
|
37
zlkent 2020-06-17 13:41:01 +08:00
@systemcall #31 多谢,有机会试试看
|