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

    

准备

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

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

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

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

编写控制程序

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


  
  
npm install serialport twilio express 

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

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

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


  
  
#include     Servo myservo;  int servoPin = 12;  int lock = 0;  int unlock = 180;    void setup() {    // initialize serial:    Serial.begin(9600);    myservo.attach(servoPin);    myservo.write(lock); 

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

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


  
  
void loop() {     // Recieve data from Node and write it to a String     while (Serial.available()) {      char inChar = (char)Serial.read();      if(inChar == 'V'){ // end character for locking       if (myservo.read() >= 90) {         Serial.println("L");         myservo.write(lock);         delay(3000);       }       else {         Serial.println("U");         myservo.write(unlock);         delay(3000);       }      }    }   

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

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


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

下面我们将建立新express web serverserialPort连接


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

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

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


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

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

现在,我们有了接收短信的地址,在试一下之前,我们应该检查一下发短信的号码是否是我们用来控制锁的号码。


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

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


  
  
serialPort.once('data'function(data) {       if (data.toString().indexOf('U') > -1) { //check if the Arduino returned a U for unlocking         sendMessage(res, 'Unlocking!');       }       else if (data.toString().indexOf('L') > -1) {         sendMessage(res, 'Locking!');       }       else {         sendMessage(res, 'ERROR');       }       console.log('data received: ' + 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。


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

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

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


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

这就是所有我们需要的代码。现在,如果你上传我们之前写的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栏里,保存设置,试着发送一个短信!你的门锁应该随着短信自动打开或关闭。

转载于:https://my.oschina.net/bigfool007139/blog/552238

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值