标签 gpio 下的文章

树莓派通过GPIO控制继电器开关


收到了 树莓派继电器扩展板@斑斑 活动的扩展板,谢谢论坛及赠送板板的小菜儿以及制作者@斑斑。

树莓派1
树莓派2

原理

树莓派运行linux系统,有GPIO扩展,可控制其它设备。
通过控制树莓派上的GPIO输出高电平和低电平,来控制继电器开关,继电器与其它设备相连,这样就能达到控制设备开关的目的了。

思路

控制端

1.自动控制
设定条件,当条件成立时,执行命令
2.手动控制
手动控制GPIO的高电平和低电平

中控端

树莓派为中控,连接控制端与受控端

受控端

继电器及连接的设备

具体方案

准备工作

  1. 保证树莓派运行正常,联网正常
  2. 保证继电器扩展板及设备运转正常

添加继电器扩展板

继电器扩展板背面
从背面看从左到右依次是 k1.1 k1 k1.2 k2.2 k2 k2.1
我去掉了塑料螺丝,自己垫了点东西,因为塑料螺丝会压到我的树莓派上的元器件。
这个板子可以支持市电220V交流,但是最高用在不要超过60W的电器为宜,比如电子门锁,台灯,室内照明的日光灯、手机充电器,等小功率电器上。
继电器可以接被控电器的有6PIN分别是K1.1、K1、K1.2、K2.1、K2、K2.2。实现双刀双掷开关功能,分两组开关,采用低电平触发,也就是低电平时继电器吸合,K1会从K1.1切到K1.2(可以理解为一个开关,低电平时K1与k1.2连接);K2会从K2.1切到K2.2。红灯亮代表低电平。
(注意:一切增减设备及电线的操作都需要先去除身上的静电和把树莓派断电后才能操作,涉及到强电如220v的设备时请先学习电学知识,做好防护措施,切勿在设备加电运行时触碰设备)

  1. 安装方法:
    1.1 使用排母直接插在树莓派主板上的方式:

将树莓派扣接接如图中的五个排针上,在用尼龙螺丝和尼龙柱固定即可。
参考:树莓派继电器扩展板安装指南
DIY树莓派专用继电器扩展板——开启智能家居又一步!
继电器扩展板安装图
实际安装图
1.2 用杜邦线连接:
这种连接方法就比较随意一些,可以用任何一个GPIO来控制,也可以同时控制多个扩展板。三根杜邦线分别连接到GND、3.3V以及任何一个GPIO,如下图所示:
用杜邦线连接

物理安装 添加受控设备

  1. 焊接 接线端子
    焊接端子焊接面

若采用第一种方式安装继电器扩展板,则会影响到树莓派外壳,推荐用第二种方式安装,这样接线端子可以焊接到任意一侧。

  1. 制作插座
    可以选择制作插座,也可以直接把设备与继电器相连,制作插座的好处是方便更换受控设备,如可以接个台灯什么的。

参考:树莓派之智能电源开头-使用继电器和人体红外传感器
插座连接示意图
将电线接到插头上
将电线的两根的其中一根在中间剪断,然后接到继电器的k1和K1.2上(默认树莓派关机或者断的时候,k1与k1.1相连,直接通电)

  1. 连接受控设备
    接总功率小于60W的设备,如台灯(我家的是30w),小音箱(左右各15W,具体看机型),若想接更大功率的设备,这个继电器不支持,它是用来体验的,可以购买专用继电器。

调试

检测树莓派继电器扩展板是否安装成功?

可以控制GPIO的高电平及低电平看树莓派继电器扩展板背面的红灯是否亮起,我是学习《爱上Raspberry_Pi》 上面第114页的方法进行调试的,通过对GPIO22的高低电平的控制来控制树莓派继电器扩展板。
也可以参考:树莓派学习笔记——Shell脚本操作GPIO
具体步骤:

sudo su  # 使用管理员权限
echo 22 > /sys/class/gpio/export  #使GPIO 22从内核空间暴露到用户空间中
cd /sys/class/gpio/gpio22
ls
echo out > direction #设置GPIO22为输出模式
echo 1 > value #向value文件中输入1,GPIO输出高电平,继电器扩展板上的红灯应该是熄灭的 
echo 0 > value #向value文件中输入0,GPIO输出低电平,继电器扩展板上的红灯应该是亮起的
cd ../  #返回上一级目录
echo 22 > unexport  #注销GPIO22接口
exit #退出超级用户

安装RPI.GPIO

如果使用的是debian版本的树莓派系统,应该是已经安装了python库,“进入python交互界面,输入“import RPi.GPIO“,如果没有报告“ImportError: No module named RPi.GPIO”错误的话,就已经安装了该库,直接使用即可。也可以使用命令 “sudo apt-get install python-pip”再执行"sudo pip install rpi.gpio"安装RPi.GPIO

参考:教大家在树莓派上安装python和GPIO库

sudo apt-get install python-dev #安装python
sudo easy_install -U distribute #执行更新
sudo apt-get install python-pip #安装python-pip
sudo pip install rpi.gpio       #安装python的GPIO库

使用yeelink进行远程控制

参考树莓派学习笔记——yeelink 远程控制LED

2.选择 “我的设备”>“增加新设备”
3.选择 “我的设备”>“管理设备”

  • 添加传感器
    1.Yeelink中增加一个开关,注意要用到它的URL。

Yeelink中增加一个开关
-获取所需开关的URL和用户密码,复制备用。
开关的URL
获取设备URI #我的设备>管理设备

获取API KEY #用户中心>帐户>我的帐户设置

编写代码

创建脚本,应先mkdir创建目录

sudo nano /home/pi/soft/yeelink/yeelinkled.py

填写内容

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import RPi.GPIO as GPIO
import time


# BOARD编号方式,基于BCM
GPIO.setmode(GPIO.BCM)
# 输出模式
GPIO.setup(22,GPIO.OUT)
# 设备URI,填写你的开关URL
apiurl = 'http://api.yeelink.net/v1.0/device/******/sensor/*******/datapoints'
# 用户密码,API KEY,替换成你自己的
apiheaders = {'U-ApiKey': '08e62b9605fe7fb50ab675fcb29c4059'}
while True:
#发送请求
  r = requests.get(apiurl,headers=apiheaders)
  # 打印响应内容
  print(r.text)
  # 转换为字典类型 请注意 2.7.4版本使用r.json(),我的是2.7.3
  led = r.json()
  # {'value':x} x=1打开状态,x=0关闭状态
  if led['value'] == 1:
    print("led on")
    GPIO.output(22,GPIO.HIGH)
  else:
    print("led off")
    GPIO.output(22,GPIO.LOW)
  # 延时5S
  time.sleep(5)
#程序结束后进行清理
GPIO.cleanup()

保存脚本

ctrl+x ,再选择Y,回车

给予运行权限

sudo chmod 777 /home/pi/soft/yeelink/yeelinkled.py

测试是否运行正常,运行一下,会出现当前继电器的状态,使用网页版yeelink控制一下开关,等五秒,看状态是否发生改变。

sudo python /home/pi/soft/yeelink/yeelinkled.py

退出脚本

ctrl+c

添加为开机启动

sudo nano /etc/rc.local        #修改 rc.local文件
python /home/pi/soft/yeelink/yeelinkled.py #在文件末尾 ,在exit 0 这一行之前,加入一行
sudo sync #保存设置
sudo reboot #重启

常见问题

  1. 开机20小时后无法再控制了,只能重启系统,原因不明,未解决。

扩展

  1. 安装shairport,使树莓派成为音频airplay,自动开关音箱
  2. 使用siriproxy和GoogolPlex进行语音控制
  3. 可以使用openhab对继电器开关进行控制,实测稳定性很好,不再需要yeelink了

总结

继电器控制没想象中的难,独立使用没什么用,可以在特定的情景中,设置成自动启动,不用去理会它,让它自己决定什么时候开启。

参考:

树莓派学习笔记——yeelink 远程控制LED
使用 RPi.GPIO 模块的输入(Input)功能 (转载)
树莓派RaspberryPi的RPi.GPIO使用指南
RPi.GPIO模块函数说明
使用RPi.GPIO在树莓派上点灯
树莓派之智能电源开头-使用继电器和人体红外传感器
树莓派学习笔记——Shell脚本操作GPIO
树莓派的物联网应用初尝试——云端遥控(一)
树莓派(Raspberry Pi)设置脚本自启动