编写代码RPI的操作系统缺省已经有一个Python的安装了。因此,我们可以使用Python来设置Web Server并控制开门的硬件设备。我选择了web.py作为Web server的开发基础,加上GPIO的python库来完成工作。 - Web.py的下载、安装与教程:http://webpy.org/
- 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,还有这庞大的对所有新鲜的东西感兴趣的工程师群体,欢迎各位喜欢这个环境的其他非我厂同学们参观和加入:) 成本与硬件列表(为方便想要动手的同学,带购买链接,点击请慎重)树莓派(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 TP-LINK TL-WN823N 300M迷你型无线USB网卡 55元 http://www.amazon.cn/gp/product/B009A2WQTW 连接线:2元 http://item.taobao.com/item.htm?id=13451559655> 两路数字继电器 5元 http://item.taobao.com/item.htm?id=13451559655 其他: 约60元 导线 4G SD卡一张
|