深爱那片海 发表于 2015-1-18 11:32:26

IOS编程之利用Node.js、Twilio完成手机把持门锁仓酷云

所以你可以用很多方法存储数据比如最长用的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安装指令。
npminstallserialporttwilioexpressNode-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之类的内存管理方法

再见西城 发表于 2015-1-21 09:47:50

要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。

小妖女 发表于 2015-1-27 14:50:49

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

活着的死人 发表于 2015-2-5 06:18:41

AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。

海妖 发表于 2015-2-6 17:08:35

在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解

第二个灵魂 发表于 2015-2-7 08:54:16

培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。

小魔女 发表于 2015-2-10 01:12:47

因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。

飘飘悠悠 发表于 2015-2-12 01:30:05

开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦

深爱那片海 发表于 2015-2-22 07:09:50

好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。

金色的骷髅 发表于 2015-3-2 03:36:45

学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。

乐观 发表于 2015-3-7 00:07:26

每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。

透明 发表于 2015-3-8 13:19:19

iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。

灵魂腐蚀 发表于 2015-3-11 00:03:44

好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。

冷月葬花魂 发表于 2015-3-17 06:10:14

iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。

愤怒的大鸟 发表于 2015-3-22 22:19:48

学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。

仓酷云 发表于 2015-3-28 20:14:34

AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。

精灵巫婆 发表于 2015-4-24 23:58:19

学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。

爱飞 发表于 2015-4-25 13:00:09

每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。

谁可相欹 发表于 2015-4-25 17:02:34

同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。

若天明 发表于 2015-4-30 18:00:29

iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
页: [1]
查看完整版本: IOS编程之利用Node.js、Twilio完成手机把持门锁仓酷云