|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
所以你可以用很多方法存储数据比如最长用的sqlite当然如果另类也可以用plist文件或者其他NSManagedObjectContextNSManagedObjectContext试想一下,假如你忘了带钥匙,但你带手机了,你就能够翻开门锁。大概,你还在往家赶,可你的伴侣已到你家门口,你经由过程手机远程把家门翻开,让伴侣先本人出来看会儿电视。这不是科幻,也不必要多先辈的设备,而是本人下手开辟出来的。
本文是基于我在波兰的Makerland年夜会上的一次研究演讲。这篇文章将会引导你怎样经由过程手机把持你家的门锁,并且是在不必要弄坏或改革门锁的情形下完成。我们必要利用一个微把持器(ArduinoUno),一个机电,和Node.js,用它们来完成经由过程短信远程开锁和关锁。我是遭到了Twilio-poweredLockitron的启示。
步骤1:设备
部件
1.一把门锁
2.胶带,纸板
3.机电(我利用的是HS-322HD)
4.微把持器(ArduinoUno)+转接线
筹办
1.从http://arduino.cc/en/Main/Software下载和安装ArduinoIDE。
2.从http://nodejs.org/猎取并安装
3.从https://ngrok.com/download下载并安装ngrok(一个内网穿透程序)
我将利用ArduinoIDE写代码并上传到往微把持器里。我利用node.js剧本言语来和Arduino微处置器举行通讯,使用Expressweb框架发送哀求和响应哀求。最初,我们利用ngrok将这个ExpresswebServer表露到外网,如许我们就能够经由过程短信让Twilio通讯给你的微把持器。
如今,我们能够入手下手下手了,将我的微把持器跟门锁链接上。
步骤2:拆卸
我们将利用一个伺服机电把持门锁。它就是一个马达,动力轴必要能扭转180度的那种,如许我们才干让门锁转开和闭合。
这个伺服马达有三根线—前方(红),零线(黑),把持线(一般是黄色或红色)。微处置器上有良多口,将马达的前方毗连5v电力口,零线接进GND地线口,把持线接进DigitalPin12口,以下图:
<br>
就如许,我的马达和微把持器毗连到了一同,我们再将它和门锁拆卸到一同。
我喜好用家里经常使用的工具来开辟这些设备,但假如你能毗连上一个3D打印机,你能够计划和打印出本人的锁扣安装。
由于是树模,我利用了纸板和胶带来将机电和门锁流动到一同。
将两个金属棍(或别的坚实的细棍)帮到马达上,用工具垫一下
<br>
利用纸板(或别的对照硬的工具)当作门锁和机电之间的毗连添补物:
<br>
<br>
用胶带将机电和门锁绑到一同,确保是绑在准确的一面,让机电动弹的偏向是开锁或关锁的偏向:
<br>
<br>
最初,我们将电念头轴流动到锁钮上:
<br>
如今我们已将机电和门锁逝世逝世的流动到一同了:
<br>
步骤3:编写把持程序
机电和微把持器已毗连,Node.js和Arduino等软件也已安装了,如今我们必要运转上面的命令来安装需要的node.js模块。注重,假如你利用的是Windows,你必要依照node-serialportWindows安装指令。- npminstallserialporttwilioexpress
复制代码 Node-Serialport可以让你轻松的经由过程Arduino微把持器串口跟Node.js程序交互。我们将要利用它从Twilio里承受短信哀求,并传送指令给Arduino微把持器让它关锁或开锁。
Express是一个复杂的node.jsweb框架。而twilio模块能让我们轻松的和TwilioAPI交互。
起首,我们翻开ArduinoIDE,创建一个新的Arduino开辟框架。第一步我们必要翻开一个9600波特的串口毗连,跟伺服马达接通(12口)。- #includeServomyservo;intservoPin=12;intlock=0;intunlock=180;voidsetup(){//initializeserial:Serial.begin(9600);myservo.attach(servoPin);myservo.write(lock);}
复制代码 我们告知微处置器,伺服马达的0地位是“锁住”,180地位是“解锁”。跟据你是怎样将马达跟门锁绑缚的,大概必要互换调剂这个地位。当微把持器启动时,它会告知马达挪动到“锁住”地位。
接上去,我们将从串口毗连上读取一个字符,来判断是不是应当变更马达运转。- voidloop(){//RecievedatafromNodeandwriteittoaStringwhile(Serial.available()){charinChar=(char)Serial.read();if(inChar==V){//endcharacterforlockingif(myservo.read()>=90){Serial.println("L");myservo.write(lock);delay(3000);}else{Serial.println("U");myservo.write(unlock);delay(3000);}}}}
复制代码 Arduino用来剖析的串口输出是来自node.js剧本的输入,上面我们会先容这个剧本。
在ArduinoIDE开辟情况外,我们用一个文本编纂器创立一个新文件,叫做nodelock.js,文件的开首是导进后面我们用npm安装的模块:- vartwilio=require(twilio),SerialPort=require("serialport").SerialPort,express=require(express);
复制代码 上面我们将创建新expresswebserver和serialPort毗连:- varapp=express();varserialPort=newSerialPort("/dev/tty.usbmodem1411",{baudrate:9600});
复制代码 注重,我们指定了要毗连的USB端口和波特率。你大概必要依据你的盘算机的情形修正这个USB端口。你能够在Arduino->Tools->Port菜单上找到你的可用的USB端标语。
上面我们要设定HTTP相干信息,挪用/sms:- app.use(express.bodyParser());app.post(/sms,twilio.webhook(yourauthtoken,{host:foo.herokuapp.com,protocol:https}),function(req,res){});
复制代码 我们必要告知express服务器经由过程/sms地点承受POST哀求,利用bodyParser剖析哀求内容,猎取来自Twilio的短信信息。我们利用twilio的webhook办法来考证哀求来历的牢靠性。
如今,我们有了吸收短信的地点,在试一下之前,我们应当反省一下发短信的号码是不是是我们用来把持锁的号码。- app.post(/sms,twilio.webhook(yourauthtoken,{host:foo.herokuapp.com,protocol:https}),function(req,res){if(req.body.From=="+12128675309"){console.log("verifiednumber!");}else{console.log("Wrongnumber!");sendMessage(res,"Invalidnumber!");}});
复制代码 在考证号码的代码段里,我们能够到场一个处置发送和响应Arduino微把持器上串口毗连的功效。- serialPort.once(data,function(data){if(data.toString().indexOf(U)>-1){//checkiftheArduinoreturnedaUforunlockingsendMessage(res,Unlocking!);}elseif(data.toString().indexOf(L)>-1){sendMessage(res,Locking!);}else{sendMessage(res,ERROR);}console.log(datareceived:+data);});serialPort.write("V",function(err,results){if(err){console.log(err+err);}console.log(results+results);});
复制代码 这代码看起来很混乱,但这是相称间接的写法。我们设定了事务处置器从微把持器里承受数据。这个事务处置器会反省Arduino微把持器发送的是“U”仍是“L”,我们猎取这个值,并用sendMessage函数将信息反应给用户。
设定了事务处置器后,我们向Arduino微把持器里写进“V”字符,告知它吸收到了短信,它如今应当翻开/封闭门锁。
我们如今往文件中到场sendMessage函数,它有2个参数:res和message。- functionsendMessage(res,message){varresp=newtwilio.TwimlResponse();resp.message(message);res.type(text/xml);res.send(resp.toString());}
复制代码 挪用sendMessage函数会给用户发送TwiML呼应信息。TwiML是XML的子集,Twilio用它来传送短动静指令。在我们这里,我们用它告知Twilio呼应我发送的SMS信息。用户大概会发送“unlock”,程序会经由过程TwilioSMS复兴“Unlocking!”
我们已设置了SMS处置器,最初只必要翻开SerialPort,启动Expresswebserver,我们的使用就开辟完了:- serialPort.open(function(){app.listen(3000);console.log(Listeningonport3000);});
复制代码 这就是一切我们必要的代码。如今,假如你上传我们之前写的Arduino代码,运转nodelock.js,办法是在终端里实行nodenodelock.js,程序就启动了。
假如你在开辟的过程当中碰到了毛病,可跟这些代码对照一下看是甚么成绩。
在创立并上岸你的Twilio帐号后,到Twilio把持台,点击号码标签,选择你但愿用来把持锁的号码。你会看到两个框,语音哀求地点(VoiceRequestURL)和动静哀求地点(MessagingRequestURL)。我们利用MessagingRequestURL来传送我们的短信文本信息。
还有很多工具需要学iOS5的SDK已经支持ARC可以自动进行release但是对iOS4的支持还有一个小问题现在要开发应用可能还需要按照之前的MRC的方式allocreleaseretainautorelease之类的内存管理方法 |
|