2赞

12回答

1收藏

[原创] 树莓派继电器扩展板控制风扇开关

Raspberry Pi Raspberry Pi 18765 人阅读 | 12 人回复 | 2014-09-23

本帖最后由 hzl201 于 2014-10-20 18:33 编辑

2014年10月17日根据markdown规则使用作业部落重新排版。
固定链接:树莓派通过GPIO控制继电器开关 https://www.zybuluo.com/hzl201/note/38736

个人博客,欢迎来踩
http://hzl201.wicp.net:8090

收到了 树莓派继电器扩展板[url=home.php?mod=space&uid=5913]@斑斑 活动[/url]的扩展板,谢谢论坛及赠送板板的小菜儿以及制作者@斑斑。




原理

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


思路
控制端

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


中控端

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


受控端

继电器及连接的设备


具体方案
准备工作
  • 保证树莓派运行正常,联网正常
  • 保证继电器扩展板及设备运转正常

添加继电器扩展板


从背面看从左到右依次是 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的设备时请先学习电学知识,做好防护措施,切勿在设备加电运行时触碰设备)


物理安装 添加受控设备
  • 焊接 接线端子

    若采用第一种方式安装继电器扩展板,则会影响到树莓派外壳,推荐用第二种方式安装,这样接线端子可以焊接到任意一侧。
  • 制作插座
    可以选择制作插座,也可以直接把设备与继电器相连,制作插座的好处是方便更换受控设备,如可以接个台灯什么的。
    参考:树莓派之智能电源开头-使用继电器和人体红外传感器

    将电线接到插头上
    将电线的两根的其中一根在中间剪断,然后接到继电器的k1和K1.2上(默认树莓派关机或者断的时候,k1与k1.1相连,直接通电)
  • 连接受控设备
    接总功率小于60W的设备,如台灯(我家的是30w),小音箱(左右各15W,具体看机型),若想接更大功率的设备,这个继电器不支持,它是用来体验的,可以购买专用继电器。

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

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

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

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

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

  1. sudo apt-get install python-dev #安装python
  2. sudo easy_install -U distribute #执行更新
  3. sudo apt-get install python-pip #安装python-pip
  4. sudo pip install rpi.gpio       #安装python的GPIO库
复制代码

使用yeelink进行远程控制

参考树莓派学习笔记——yeelink 远程控制LED
- 新建yeelink设备
1.登录http://www.yeelink.net/,新建帐号,进入用户中心
2.选择 “我的设备”>“增加新设备”
3.选择 “我的设备”>“管理设备”
- 添加传感器
1.Yeelink中增加一个开关,注意要用到它的URL。

-获取所需开关的URL和用户密码,复制备用。

获取设备URI #我的设备>管理设备

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


编写代码

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

  1. sudo nano /home/pi/soft/yeelink/yeelinkled.py
复制代码

填写内容

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import requests
  4. import RPi.GPIO as GPIO
  5. import time
  6. GPIO.cleanup()
  7. # BOARD编号方式,基于BCM
  8. GPIO.setmode(GPIO.BCM)
  9. # 输出模式
  10. GPIO.setup(22,GPIO.OUT)
  11. # 设备URI,填写你的开关URL
  12. apiurl = 'http://api.yeelink.net/v1.0/device/******/sensor/*******/datapoints'
  13. # 用户密码,API KEY,替换成你自己的
  14. apiheaders = {'U-ApiKey': '08e62b9605fe7fb50ab675fcb29c4059'}
  15. while True:
  16. #发送请求
  17.   r = requests.get(apiurl,headers=apiheaders)
  18.   # 打印响应内容
  19.   print(r.text)
  20.   # 转换为字典类型 请注意 2.7.4版本使用r.json(),我的是2.7.3
  21.   led = r.json()
  22.   # {'value':x} x=1打开状态,x=0关闭状态
  23.   if led['value'] == 1:
  24.         print("led on")
  25.         GPIO.output(22,GPIO.HIGH)
  26.   else:
  27.         print("led off")
  28.         GPIO.output(22,GPIO.LOW)
  29.   # 延时5S
  30.   time.sleep(5)
复制代码

保存脚本

ctrl+x ,再选择Y,回车

给予运行权限

  1. sudo chmod 777 /home/pi/soft/yeelink/yeelinkled.py
复制代码

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

  1. sudo python /home/pi/soft/yeelink/yeelinkled.py
复制代码

退出脚本

ctrl+c

添加为开机启动

  1. sudo nano /etc/rc.local        #修改 rc.local文件
  2. python /home/pi/soft/yeelink/yeelinkled.py #在文件末尾 ,在exit 0 这一行之前,加入一行
  3. sudo sync #保存设置
  4. sudo reboot #重启
复制代码
常见问题
  • 开机20小时后无法再控制了,只能重启系统,原因不明,未解决。

扩展
  • 安装shairport,使树莓派成为音频airplay,自动开关音箱 https://www.zybuluo.com/hzl201/note/39352
  • 使用siriproxy和GoogolPlex进行语音控制

总结

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


参考:

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

评分

参与人数 1声望 +3 与非币 +5 收起 理由
flashsoft + 3 + 5 很给力!

查看全部评分

分享到:
回复

使用道具 举报

回答|共 12 个

倒序浏览

沙发

hzl201

发表于 2014-9-23 16:10:12 | 只看该作者

自己先顶一下
板凳

pugs

发表于 2014-9-24 11:34:52 | 只看该作者

楼主。。图挂了 T_T
地板

hzl201

发表于 2014-9-24 11:59:43 | 只看该作者

pugs 发表于 2014-9-24 11:34
楼主。。图挂了 T_T

已经重新上传了,先用印象笔记编辑,再粘过来的,结果乱了。
5#

pugs

发表于 2014-9-24 12:04:45 | 只看该作者

hzl201 发表于 2014-9-24 11:59
已经重新上传了,先用印象笔记编辑,再粘过来的,结果乱了。

楼主给力,最近在研究继电器方面的开发了,这个资料非常好!感谢!!
6#

wxws

发表于 2014-9-24 16:24:51 | 只看该作者

顶,  全程说明,对我们pi菜鸟太有用了
7#

hzl201

发表于 2014-9-29 15:31:12 | 只看该作者

本帖最后由 hzl201 于 2014-10-14 17:39 编辑

使用GoogolPlex来扩展siri的方法已更新,但没有找到缩短延迟的方法。
正在尝试用树莓派架设一个vpn,把涉及国外的网址都转发到go a gent上
8#

无名

发表于 2014-10-5 09:32:54 | 只看该作者

向楼主学习!
9#

flashsoft

发表于 2014-10-14 10:56:27 | 只看该作者

必须给楼主点个赞
10#

Cain丶ST

发表于 2014-10-14 14:07:43 | 只看该作者

给楼主顶一下
嘿嘿嘿
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条