智能指纹门锁开发

专业开挂二十年

  • 需求起源

  • 由于本人所在学校组织成员较多,然后钥匙管理就成了一个很大的问题,基本上会很频繁的发生钥匙找不到啊、钥匙被锁在办公室里面了啊等多种事情,所以萌发了这个念头。

  • 动力

  • 正好借着武汉黑客马拉松的借口,然后跟着我们云麓谷大佬的脚步一起去混了次比赛,当时大佬就说咱们做这个智能门锁吧。本着为组织服务,提升自身逼格的理念我们就开搞了。

  • 艰辛的通信之路

  • 本人在团队中充当一个硬件开发(划水)的角色,为了开发方便就直接选用了某宝的自动指纹对比模块—–PS1802指纹识别模块,树莓派开发板—–Raspberry Pi B+,usb转TTL—–CH340以及杜邦线若干。


  • 跟据千古不变的硬件开发理念,拿到东西首先测试是否完好、功能是否异常、外观是否破损、有没有送女朋友之类的。所以诞生了如下步骤:


  1. 检查硬件连接以及货物清单。
  2. 用usb转TTL工具连接指纹模块和电脑,用老板发我的上位机进行测试,目测一切正常。(硬件测试方法和上位机试用方法都在链接里)。
  3. 既然确保硬件没问题了就可以开始开发了,选用C语言进行硬件底层开发,php调用C的接口实现高级开发和管理 。硬件使用UART[通用异步收发传输器]进行树莓派和指纹模块之间的通信
  4. 首先设置模块的通信速率为115200,加快系统响应。其次给树莓派安装wiringpi,然后开发的代码都在此处


  • 接下来真正来通信(接下来说到的陌生的东西都在SendUART.c里)

  • 树莓派的官方库是不支持直接发十六进制的东西的,但是指纹模块的命令必须是十六进制才能响应。

  • 讲默认发送的ascii转为十六进制ASCI_16()
  • 很快就出现了新的问题,用这种方法发送的数据总是单个单个发出去 然后前面以0补足缺的位,所以还是不能成功的控制树莓派。
  • 所以就催生了implode()
  • 经过这样的折腾总算是能单向操作树莓派了,但是要接受树莓派回过来的消息并且确定其工作状态是一件很不容易的事情呐,由于不太熟悉wiringpi库的试用,我就分为几种接收长度的情况进行命令和数据接收(指纹模块回的指令分为命令应答、数据应答和普通应答,他们的长度不一),跟据不同的数据长度进行读取数据并且存入数组一并返回
  • C语言涉及到的差不多就是这些了,试用之前一定记得在树莓派上编译哦

    sudo gcc SendUART.c -o SendUART -lwiringPi
    sudo gcc close.c -o close -lwiringPi

  • close文件是在长期加载失败之后手工关掉树莓派的uart设备的。


  • PHP篇

  • C语言写完接口之后为了更方便的给大家使用继而写了php的接口,顺便加进去了状态码用于判断指纹模块响应的正误——–本人做的工作到此结束

  • 如果大家调用了什么不该调用的接口或者自己开发接口的时候碰到死活执行不完的情况那么请大家重启Apache
  • sudo service apache2 restart


  • 接下来是胡扯

  • 搭完硬件和部署完我们的代码之后就可以在浏览器上访问树莓派的ip加我们的访问链接进行控制。

  • 这只是一个小小的开头,现在只是局域网控制,到后面可以抽时间做一下内网穿透,然后和已有的员工信息库绑定进行更强大更智能的开发工作。
  • 要不就先更到这儿吧
  • 此处是代码

*