如何用手机控制你的锁----手机编程

    

准备 node

1. 从http://arduino.cc/en/Main/Software下载和安装Arduino IDE。 git

2. 从http://nodejs.org/获取并安装 github

3. 从https://ngrok.com/download下载并安装 ngrok  web

使用Arduino IDE写代码并上传到往微控制器里。我使用node.js脚本语言来和Arduino微处理器进行通讯,利用Express web框架发送请求和相应请求。最后,咱们使用ngrok将这个Express web Server暴露到外网,这样咱们就能够经过短信让Twilio通讯给你的微控制器。 express

编写控制程序 npm

Node.js和Arduino等软件也已经安装了,如今咱们须要运行下面的命令来安装必要的node.js模块。注意,若是你使用的是Windows,你须要按照node-serialportWindows安装指令windows

 
  1. npm install serialport twilio express 

Node-Serialport可以让你轻松的经过Arduino微控制器串口跟Node.js程序交互。咱们将要使用它从Twilio里接受短信请求,并传递指令给Arduino微控制器让它关锁或开锁。 服务器

Express是一个简单的node.js web框架。而twilio模块能让咱们轻松的和Twilio API交互。 app

首先,咱们打开Arduino IDE,创建一个新的Arduino开发框架。第一步咱们须要打开一个9600波特的串口链接,跟伺服马达接通(12口)。 框架

 
  1. #include  
  2.  
  3. Servo myservo; 
  4. int servoPin = 12; 
  5. int lock = 0; 
  6. int unlock = 180; 
  7.  
  8. void setup() { 
  9.   // initialize serial: 
  10.   Serial.begin(9600); 
  11.   myservo.attach(servoPin); 
  12.   myservo.write(lock); 

咱们告诉微处理器,伺服马达的0位置是“锁住”,180位置是“解锁”。跟据你是如何将马达跟门锁捆绑的,也许须要交换调整这个位置。当微控制器启动时,它会告诉马达移动到“锁住”位置。

接下来,咱们将从串口链接上读取一个字符,来断定是否应该调动马达运行。

 
  1. void loop() { 
  2.    // Recieve data from Node and write it to a String 
  3.    while (Serial.available()) { 
  4.     char inChar = (char)Serial.read(); 
  5.     if(inChar == 'V'){ // end character for locking 
  6.      if (myservo.read() >= 90) { 
  7.        Serial.println("L"); 
  8.        myservo.write(lock); 
  9.        delay(3000); 
  10.      } 
  11.      else { 
  12.        Serial.println("U"); 
  13.        myservo.write(unlock); 
  14.        delay(3000); 
  15.      } 
  16.     } 
  17.   }   

Arduino用来分析的串口输入是来自node.js脚本的输出,下面咱们会介绍这个脚本。

在Arduino IDE开发环境外,咱们用一个文本编辑器建立一个新文件,叫作nodelock.js,文件的开头是导入前面咱们用npm安装的模块:

 
  1. var twilio = require('twilio'), 
  2.    SerialPort = require("serialport").SerialPort, 
  3.    express = require('express'); 

下面咱们将创建新express web serverserialPort链接

 
  1. var app = express(); 
  2. var serialPort = new SerialPort("/dev/tty.usbmodem1411", { 
  3.  baudrate: 9600 
  4. }); 

注意,咱们指定了要链接的USB端口和波特率。你可能须要根据你的计算机的状况修改这个USB端口。你能够在Arduino->Tools->Port菜单上找到你的可用的USB端口号。

下面咱们要设定HTTP相关信息,调用/sms:

 
  1. app.use(express.bodyParser()); 
  2.  
  3. app.post('/sms', twilio.webhook('your auth token', { host:'foo.herokuapp.com', protocol:'https' }), function(req, res){ 
  4. }); 

咱们须要告诉express服务器经过/sms地址接受POST请求,使用bodyParser分析请求内容,获取来自Twilio的短信信息。咱们使用twilio的webhook方法来验证请求来源的可靠性。

如今,咱们有了接收短信的地址,在试一下以前,咱们应该检查一下发短信的号码是不是咱们用来控制锁的号码。

 
  1. app.post('/sms', twilio.webhook('your auth token', { host:'foo.herokuapp.com', protocol:'https' }), function(req, res){ 
  2.  if (req.body.From == "+12128675309") { 
  3.    console.log("verified number!"); 
  4.  } else { 
  5.    console.log("Wrong number!"); 
  6.    sendMessage(res, "Invalid number!"); 
  7.  } 
  8.  
  9. }); 

在验证号码的代码段里,咱们能够加入一个处理发送和相应Arduino微控制器上串口链接的功能。

 
  1. serialPort.once('data'function(data) { 
  2.      if (data.toString().indexOf('U') > -1) { //check if the Arduino returned a U for unlocking 
  3.        sendMessage(res, 'Unlocking!'); 
  4.      } 
  5.      else if (data.toString().indexOf('L') > -1) { 
  6.        sendMessage(res, 'Locking!'); 
  7.      } 
  8.      else { 
  9.        sendMessage(res, 'ERROR'); 
  10.      } 
  11.      console.log('data received: ' + data); 
  12.    }); 
  13.  
  14.    serialPort.write("V"function(err, results) { 
  15.      if (err) { 
  16.        console.log('err ' + err); 
  17.      } 
  18.      console.log('results ' + results); 
  19.    }); 

这代码看起来很杂乱,但这是至关直接的写法。咱们设定了事件处理器从微控制器里接受数据。这个事件处理器会检查Arduino微控制器发送的是 “U” 仍是 “L” ,咱们获取这个值,并用sendMessage函数将信息反馈给用户。

设定了事件处理器后,咱们向Arduino微控制器里写入“V”字符,告诉它接收到了短信,它如今应该打开/关闭门锁。

咱们如今往文件中加入sendMessage函数,它有2个参数:res和message。

 
  1. function sendMessage(res, message) { 
  2.  var resp = new twilio.TwimlResponse(); 
  3.  resp.message(message); 
  4.  res.type('text/xml'); 
  5.  res.send(resp.toString()); 

调用sendMessage函数会给用户发送TwiML响应信息。TwiML是XML的子集,Twilio用它来传递短消息指令。在咱们这里,咱们用它告诉Twilio响应我发送的SMS信息。用户也许会发送“unlock”,程序会经过Twilio SMS回复 “Unlocking!”

咱们已经配置了SMS处理器,最后只须要打开SerialPort,启动Express web server,咱们的应用就开发完了:

 
  1. serialPort.open( function () { 
  2.  app.listen(3000); 
  3.  console.log('Listening on port 3000'); 
  4. }); 

这就是全部咱们须要的代码。如今,若是你上传咱们以前写的Arduino代码,运行nodelock.js,方法是在终端里执行node nodelock.js,程序就启动了。

若是你在开发的过程当中遇到了错误,可跟这些代码对比一下看是什么问题。

在建立并登录你的Twilio账号后,到 Twilio控制台,点击号码标签,选择你但愿用来控制锁的号码。你会看到两个框,语音请求地址(Voice Request URL)和消息请求地址(Messaging Request URL)。咱们使用Messaging Request URL来传递咱们的短信文本信息。

由于Twilio是经过HTTP请求通讯的,咱们须要有一个能从公网上访问的地址,当有消息到达时,Twilio会将信息传递跟这个地址。因而咱们以前安装的ngrok就起做用了。

等你的node.js服务器起来,开一个终端窗口,在你安装ngrok的目录下输入./ngrok 3000,这里你须要指定一个地址,经过它,外部服务能访问你的本地服务器。在这个地址后面跟上/sms,填入Twilio Messaging Request URL栏里,保存设置,试着发送一个短信!你的门锁应该随着短信自动打开或关闭。

相关文章
相关标签/搜索