搭建树莓派手机远程开门系统


【目标】
按下手机app中的按钮,寝室的门锁打开。

【基本原理】
Raspberry Pi 作为控制装置:其运行Linux系统,因此功能强大;提供GPIO接口,因此便于控制物理开门机构。
yeelink 平台作为云提供者:自己搭建web服务器成本高难度大,yeelink提供免费的物联网云服务,并开放API,可以用于编写手机app。

在yeelink 平台注册一个开关型传感器,平时其value为0。
RasPi 每5s 通过yeelink HTTP API 检查value 值,当检测到1时开门。
开发可以通过yeelink HTTP API操作value值的安卓app,实现手机远程开门。
 
【初次配置RasPi】
组装RasPi外壳。应当加装散热片。夏天时考虑加装散热风扇。
(查看CPU温度命令:cat /sys/class/thermal/thermal_zone0/temp)
 
将TF卡通过读卡器连接到Windows电脑,用 Win32DiskImager 烧录RasPi系统到TF卡。
RasPi系统镜像可以从官网下载。
如需恢复TF卡,可以烧录bootsector镜像。

配置视频输出:
在Windows上打开TF卡,找到config.txt,修改一下内容
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=16
hdmi_drive=2
config_hdmi_boost=4
sdtv_mode=2
arm_freq=800

将TF卡,键盘,HDMI线,和其它需要的外设接入RasPi,打开电源。

初次开机进入半图形设置界面,选择扩展存储卡空间,修改pi用户密码,选择开机默认启用命令行,TimeZone设置为Asia,键盘设置为104-US,确认并自动重启。

配置自动连接WiFi:
前提确保无线网卡正常工作。

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

在文件末尾添加形如以下内容

network={

ssid="名称"

psk="密码"

}

保存退出。

sudo reboot
测试开机后能否自动连接到指定WiFi。

从启动输出或从路由器查看RasPi的ip地址,。
在Windows上使用putty,在安卓手机上使用ConnectBot,进行SSH连接。
在Windows上使用FileZilla,进行sftp连接,连接地址以sftp://开头。

从此可以不再使用独立显示器和键盘。

【定时关机】
sudo crontab -u root -e
添加如下内容
35 22 * * * /sbin/init 0

【开机运行】
 sudo nano /etc/rc.local
添加以下内容
sudo nohup python -u /home/pi/unlockhandler.py >/home/pi/unlockhandler.log 2>&1 &

【下载安装依赖】

sudo apt-get install python-dev

下载 RPi.GPIO-0.5.11.tar.gz 到/home/pi/

tar xvzf RPi.GPIO-0.5.11.tar.gz

cd RPi.GPIO-0.5.11

sudo python setup.py install

下载 requests-2.7.0.tar.gz 到/home/pi/
tar xvzf requests-2.7.0.tar.gz
cd requests-2.7.0
sudo python setup.py install

rm requests-2.7.0.tar.gz
rm  RPi.GPIO-0.5.11.tar.gz
sudo rm -rf requests-2.7.0
sudo rm -rf RPi.GPIO-0.5.11
 
【基于Python的GPIO】
四个GPIO针脚控制步进电机,三个GPIO针脚控制RGB三色LED灯。

编写unlockhandler.py

源代码:

import json

import requests

import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BOARD)

led_R = 40

led_G = 38

led_B = 36

stepper_A = 37

stepper_B = 35

stepper_C = 33

stepper_D = 31

GPIO.setwarnings(False)

GPIO.setup(led_R, GPIO.OUT)

GPIO.setup(led_G, GPIO.OUT)

GPIO.setup(led_B, GPIO.OUT)

GPIO.setup(stepper_A, GPIO.OUT)

GPIO.setup(stepper_B, GPIO.OUT)

GPIO.setup(stepper_C, GPIO.OUT)

GPIO.setup(stepper_D, GPIO.OUT)

GPIO.setwarnings(True)

GPIO.output(led_R, 0)

GPIO.output(led_G, 0)

GPIO.output(led_B, 0)

GPIO.output(stepper_A, 0)

GPIO.output(stepper_B, 0)

GPIO.output(stepper_C, 0)

GPIO.output(stepper_D, 0)

def setStep(w1, w2, w3, w4):

GPIO.output(stepper_A, w1)

GPIO.output(stepper_B, w2)

GPIO.output(stepper_C, w3)

GPIO.output(stepper_D, w4)

def forward(delay, steps):

for i in range(0, steps):

setStep(1, 0, 1, 0)

time.sleep(delay)

setStep(0, 1, 1, 0)

time.sleep(delay)

setStep(0, 1, 0, 1)

time.sleep(delay)

setStep(1, 0, 0, 1)

time.sleep(delay)

def backwards(delay, steps):

for i in range(0, steps):

setStep(1, 0, 0, 1)

time.sleep(delay)

setStep(0, 1, 0, 1)

time.sleep(delay)

setStep(0, 1, 1, 0)

time.sleep(delay)

setStep(1, 0, 1, 0)

time.sleep(delay)

apiurl = ‘http://api.yeelink.net/v1.0/device/*****/sensor/*****/datapoints‘

apiheaders = {‘U-ApiKey‘: ‘********************************‘}

payload={‘value‘: 0}

rpost = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))

print time.strftime(‘%H:%M:%S‘),

print("Ready.")

GPIO.output(led_R, 1)

time.sleep(0.5)

GPIO.output(led_R, 0)

GPIO.output(led_G, 1)

time.sleep(0.5)

GPIO.output(led_G, 0)

GPIO.output(led_B, 1)

time.sleep(0.5)

GPIO.output(led_B, 0)

while True:

rget = requests.get(apiurl,headers=apiheaders)

dic = json.loads(rget.text)

#print time.strftime(‘%H:%M:%S‘),

if dic[‘value‘] == 1:

print time.strftime(‘%H:%M:%S‘),

print("Unlocking!")

GPIO.output(led_R, 1)

# unlock work flow

forward(0.01, 128)
    time.sleep(2)

backwards(0.01, 128)

setStep(0, 0, 0, 0)

payload={‘value‘: 0}

rpost = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))

print("Done.")

GPIO.output(led_R, 0)

time.sleep(1)

else:

#print("Stand by.")

GPIO.output(led_G, 1)

time.sleep(0.2)

GPIO.output(led_G, 0)

time.sleep(4.8)

简述:
用 requests 库操作HTTP请求,用 json 库处理返回的 json 数据。
刚运行时,配置好针脚,将value初始化为0,三灯闪烁。
每5s读取一次value值:如果是1则操作步进电机开门,然后将value置回0,过程中亮红灯;如果是0则闪绿灯。

【安卓app】
主要源代码:
 public class MainActivity extends ActionBarActivity {

PostHandler handler = null;

TextView textView = null;

Button startButton = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

handler = new PostHandler();

textView = (TextView) findViewById(R.id.textView);

startButton = (Button) findViewById(R.id.startButton);

startButton.setOnClickListener(new OCL());

}

private class OCL implements View.OnClickListener {

public void onClick(View v) {

PostThread pt = new PostThread();

new Thread(pt).start();

}

}

class PostHandler extends Handler {

public PostHandler() {

}

public PostHandler(Looper L) {

super(L);

}

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

// 接收消息更新UI

Integer statusCode = msg.what;

String status = null;

switch (statusCode){

case 0: status = "未能发送指令,请检查网络!";break;

case 200: status = "指令发送成功!";startButton.setEnabled(false);break;

default: status = "错误的返回值:" + statusCode + " !";break;

}

textView.append("\n\n" + status);

}

}

class PostThread implements Runnable {

public void run() {

HttpClient httpClient = null;

HttpGet httpGet = null;

HttpPost httpPost = null;

HttpResponse response = null;

Integer statusCode = 0;

httpClient = new DefaultHttpClient();

httpGet = new HttpGet("http://api.yeelink.net/v1.0/device/*****/sensor/*****/datapoints");

httpPost = new HttpPost("http://api.yeelink.net/v1.0/device/*****/sensor/*****/datapoints");

httpGet.addHeader("U-ApiKey", "***************************************");

httpPost.addHeader("U-ApiKey", "******************************************");

JSONObject obj = new JSONObject();

try {

obj.put("value", 1);

httpPost.setEntity(new StringEntity(obj.toString()));

response = httpClient.execute(httpPost);

statusCode = response.getStatusLine().getStatusCode();

} catch (Exception e) {

e.printStackTrace();

}

// 网络线程发送消息

Message msg = new Message();

msg.what = statusCode;

handler.sendMessage(msg);

}

}

时间: 2024-10-12 09:58:34

搭建树莓派手机远程开门系统的相关文章

「玩转树莓派」搭建智能家居远程监控系统

前言 前几天,在食堂吃饭,本来每天中午的新闻三十分换成了视频监控.我们已经习惯了,前十分钟看着领导都很忙,中间十分钟中国人民都很幸福,后十分钟别的国家都生活在水深火热里,顺便跟同事谈谈国家大事.突然主角换成了我们自己,便毫无抬头的欲望. 恰巧最近也有在接触大屏监控的解决方案,于是乎,就索性拿树莓派实验了一把,做一个智能监控系统. 软硬件清单 读卡器以及 SD 卡(装系统用) 摄像头一枚,支持 USB SSH连接工具(SecureCRT,Xshell) 宽带.路由器(家中常备) 装好系统的树莓派

党政机关文件柜控制板定制设计 PC机远程监控 手机远程监控

一.党政机关文件柜控制板的功能简介       党政机关文件柜控制板系统的功能包括:人机交互显示系统,WIFI/GPRS通讯系统,电源管理系统,报警系统,嵌入式处理器系统,PC端远程监控系统,数据的储存与查询系    统,GPS/北斗定位系统. 二.党政机关文件柜控制板的框图 三.党政机关文件柜控制板控制系统功能    1.嵌入式处理系统:      采用嵌入式处理器:接口丰富,功耗低,体积小,可以根据功能要求选定不同处理能力的核心处理器,外围接口            有:RS232,RS48

远程开户系统开放API接口

如今随着智能识别技术的成熟和商用,金融领域也开始逐渐试水"远程开户".从OCR身份证识别到人脸识别,到如今市场上即将出现完整的远程开户系统,除了需要成熟的技术做支撑外,还需要对市场有着前瞻性的眼光. 这套远程开户系统包含了OCR身份证识别技术.银行卡识别技术.人脸识别等智能识别技术.即利用身份证识别快速采集验证用户身份,并通过联网核查进行验证身份信息,用来核实用户的真实身份;然后利用银行卡识别一键绑定银行卡,再辅以视频人脸识别进行身份进一步验证,确保开户者与证件持有者为同一人,做到人证

手机控车OBD-移动管家手机控车方案基于Android手机智能控制汽车系统的研究与实现;

基于Android手机智能控制汽车系统的研究与实现:汽车手机启动,汽车远程启动是装置在智能汽车的一部分,是实现简远程遥控启动汽车的一个智能装置,同时也可以熄火.汽车手机启动可以在原车钥匙保留模式改装,也可以独立在汽车上改装. 目前很多汽车已经配有一键启动智能无钥匙进入系统设备,相对配置手机远程动的车辆比较少,关于智能汽车,PKE智能系统.一键启动.手机撑控配合使用才会显示智能操控的简捷性.国内生产汽车手机启动汽智能一键启动厂家已经在50家左右.汽车手机智能控制系统,体积小巧,简便安装.根据原车线

安卓手机如何修改系统版本号的教程(一键完成)

本节教大家如何一键修改手机的系统版本号,借助琢石模拟器强大的参数修改功能,帮我们轻松的完成手机系统版本号的修改. 如果您的手机还没安装琢石模拟器,请先到官网ZS8K.COM自行下载并按照官网教程完成激活. 下面我们开始演示如何修改系统版本号. 1.在没使用琢石模拟器之前,我们先看下手机真实的系统版本信息,可以看到版本是4.2.1,版本号是HM 1 20140309-151349,API级别是17. 2.打开琢石模拟器到虚拟环境列表中,点一键生成,生成一套新的系统参数,其中SDK是16(也就是AP

linux桌面 远程windows系统

linux桌面远程windows系统 1.安装yum参考地址: http://lk886655.blog.51cto.com/7036409/1965548 2.安装rdesktop #yum install rdesktop 3.在命令行输入下面命令即可 #rdesktop -g 1024x768  -u username  -p password IP 例如:#rdesktop -g 1024x768  -u administrator -p password   192.168.10.11

通常所说的网络远程监控系统是什么?

通常所说的远程监控系统是一款远程监控软件,是由一台主电脑控制端远程监控另一台被控电脑端,而所谓的远程一般是指通过局域网远程监控. 当操作者使用主控制端电脑监控被控端电脑时,就如同自己在使用被控端电脑一样,清晰看到被控端电脑当前屏幕操作,可以启动被控端电脑的程序.限制访问网址.限制聊天.上网.玩游戏.禁止U盘读取以及文件传输等操作,利用网络远程监控系统,被控端电脑操作行为皆掌握在自己手中.  有什么用途? 网络远程监控系统一般是用于正当用途,比如用于企业单位对上班员工电脑的管理.规范员工上班的不良

乐视秒杀架构解读:从零开始搭建百万每秒订单系统

在各种秒杀活动大行其道的今天,订单系统的性能与稳定日益重要.乐视集团作为这一技术的佼佼者,在多次的电商狂欢节中都能抢占商机.拔得头筹,其表现无疑为其他企业和厂商提供了非常有价值的参考. 在Gdevops全球敏捷运维峰会北京站的现场,乐视BOSS平台技术部架构师梁阳鹤就给大家带来了<从零开始搭建百万每秒订单系统>的精彩演讲.从部分到整体,从微观到宏观,层层递进,步步为营,详尽地介绍了整套乐视支付架构及其实现每秒处理百万笔交易的成功要点. (点击“这里”听梁阳鹤演讲完整录音) 演讲主要分为三个部分

红米note手机连接mac系统

到http://www.android.com/filetransfer/   下androidfiletransfer.dmg文件,安装好这个软件,然后再连接usb就可以用这个软件管理手机内存卡和sd卡的文件了 如图: 红米note手机连接mac系统,布布扣,bubuko.com