设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

使用树莓派制作的远程开门器

2014-1-22 15:50| 发布者: 红黑魂| 查看: 2218| 评论: 0|来自: 博客园

摘要: 背景:话说自从我厂的商务部门搬到旁边的商务楼之后,工程师发现漂亮的前台MM也搬走了,某区只留下冷冷清清的鱼缸。然后,工程师们发现开门成了个问题。鉴于进门需要刷卡,所以没有带卡的工程师就不得不摁下门铃,等 ...

编写代码

RPI的操作系统缺省已经有一个Python的安装了。因此,我们可以使用Python来设置Web Server并控制开门的硬件设备。我选择了web.py作为Web server的开发基础,加上GPIO的python库来完成工作。

  1. Web.py的下载、安装与教程:http://webpy.org/
  2. RPI GPIO的python库安装和使用:http://log.liminastudio.com/writing/tutorials/tutorial-how-to-use-your-raspberry-pi-like-an-arduino

接下来就是在RPI上设置Web server了。遵循我厂的传统,使用Python作为Web server的主要开发语言。

开门硬件控制相关代码:

    import RPi.GPIO as GPIO    import time    PORT = 7    def reset():        GPIO.setmode(GPIO.BOARD)        GPIO.setup(PORT, GPIO.IN)    def initcontroller():        GPIO.setmode(GPIO.BOARD)        GPIO.setup(PORT, GPIO.OUT)        GPIO.output(PORT, True)    def opendoor():        GPIO.setup(PORT, GPIO.OUT)        GPIO.output(PORT, False)        time.sleep(2)        GPIO.output(PORT, True)

Web server代码(基于web.py)

    import web    from web import form    import doorop    import requests    render = web.template.render('templates/')    urls = (            '/', 'index'    )    app = web.application(urls, globals())    myform = form.Form(        form.Textbox("username"),        form.Textbox("password", form.notnull)    )    #initial door controller    doorop.initcontroller()    def verifyuser(uname, passwd):        #这里是验证用户的逻辑,我是用公司的LDAP服务器进行验证的        #验证成功返回True,否则返回False        pass    class index:        def GET(self):            form = myform()            return render.formtest(form)        def POST(self):            form = myform()            if not form.validates():                return render.formtest(form)            else:                if(verifyuser(form['username'].value, form['password'].value)):                    doorop.opendoor()                    return "door opened!"                else:                    return "Username/Password invalid!"    if __name__ == "__main__":        web.internalerror = web.debugerror        app.run()

这样就在RPI上建立了一个web server,用HTTP POST方式输入正确的用户名和口令就能实现开门。

为了更方便地应用远程开门(例如,用手机开门显然更cool),可以编写iOS或是Android上运行的开门应用。当然,由于开门只需要发送一个HTTP POST请求,直接写成一个可以在Mac/Linux/Win下运行的命令行也可以。

部署后的全景

豆瓣开门


开门widget

后记与感谢

感谢所有参与这个项目的我厂同学们,豆瓣的确是个有着独特的技术文化的环境,这里不仅有许多可以互相交流想法的技术geek,还有这庞大的对所有新鲜的东西感兴趣的工程师群体,欢迎各位喜欢这个环境的其他非我厂同学们参观和加入:)

成本与硬件列表(为方便想要动手的同学,带购买链接,点击请慎重)

  1. 树莓派(MODB-512M) 带运费,税费,约300元 http://cn.element14.com/raspberry-pi/raspbrry-modb-512m/%E5%8D%95%E6%9D%BF%E6%9C%BA-%E6%A0%91%E8%8E%93%E6%B4%BE-raspberry-pi-b%E5%9E%8B-512mb/dp/2191863?ref=lookahead

  2. TP-LINK TL-WN823N 300M迷你型无线USB网卡 55元 http://www.amazon.cn/gp/product/B009A2WQTW

  3. 连接线:2元 http://item.taobao.com/item.htm?id=13451559655>

  4. 两路数字继电器 5元 http://item.taobao.com/item.htm?id=13451559655

  5. 其他: 约60元 导线 4G SD卡一张


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部