自己动手实现智能家居之树莓派GPIO简介(Python版)
【前言】
一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”。
就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术在手,怎么设计实现因人而异),本文只做抛砖引玉,各路大神如果有更好的想法可以各显神通,当然能在评论区留下更好的想法让大家共同学习是再好不过啦。
在文章最后附有所有源代码,有需要的可以自行下载,感谢Star~
【系列目录】
- 树莓派GPIO简介(Python版)
- 温湿度数据采集存储(DHT11,MySql)
- 温湿度数码管展示(四位共阳数码管)
- 构建App展示温湿度报表(ApiCloud,Python Flask)
- 普通家用排插集成继电器手工改造
- App远程控制“自制智能”排插
- 使用花生棒内网穿透实现外网访问
- App远程监控(摄像头模块集成)
【本节概要】
要做一些神奇的骚操作,比如环境数据采集,智能控制等,最终还是要落地到设备上。要和各种各样的设备打交道,肯定是离不开电子元件的。市场上有大量的开箱即用的封装的很好的硬件,但是都是独立的或者是集成了某些功能于一身的,并不能自己灵活的进行扩展。
如果我们要自己灵活地配置各种各样的功能组合,自己操作原始的电子元件或许是更明智的选择。在我们这个项目中,我们将采用树莓派+一系列电子元件来构建我们的整个系统。
树莓派
树莓派是什么这里只做简单介绍,贴个不带壳子的图~

加上壳子可以长这样,当然了壳子是千变万化的,不可"以貌取派“

Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI) 是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于Linux。 随着Windows 10 IoT的发布,我们也将可以用上运行Windows的树莓派。
说白了就是迷你电脑,当然电脑能干的事树莓派都可以干,浏览网页,看视频,玩一些对性能要求不高的游戏都是可以的。甚至还可以当服务器,多个树莓派搭建一个集群(树莓派官网就是部署在一堆树莓派组成的集群上)。
GPIO
那么,GPIO又是什么呢?
GPIO(英语:General-purpose input/output),通用型之输入输出的简称。说白了,就是一堆针脚,可以自由地通过编程手段控制其输入还是输出。
树莓派自带了很多针脚,给程序员提供电子元件控制的出入口。以“3代B+”型号树莓派为例,本身提供了两排共40个针脚,从上面不带壳的树莓派图片中可以看到上面有两排裸露的针脚。下面是针脚分布图:

第三列和第六列(表头为功能名)展示了40个针脚的作用,绿色的是开放通用的输入输出针脚,黑色的是接地,5V和3.3V高电平输出,其他颜色的针脚用在一些特殊场合,比如输出视频流什么的,并不十分常用。我们目前关注 输出电压/接地/通用针脚 这几种。
树莓派用不同的编码规则给40个针脚起制定了编码,方便我们对针脚的输入输出进行开发。常见的编码规则有:BOARD编码规则,见上图中的BOARD编码对应的40个针脚的位置;还有BCM编码规则,也可根据上图找到对应针脚。
树莓派GPIO一般采用 Arduino脚本或者python脚本进行控制,也有少数人使用C或者其他编程语言,理论上讲,越高级的语言API往往封装的越完善,代码也越简洁容易,我们的系列文章采用python脚本进行开发。
RPi.GPIO 模块
RPI.GPIO是python下控制GPIO的模块,可以通过命令 “npm install RPI.GPIO” 进行安装。注意:该命令务必在有GPIO的环境下安装,比如树莓派设备上可以顺利安装成功,但是在windows下没有GPIO设备,因此安装会出现各种问题,不建议在windos上开发时安装这个包,我们可以直接远程 PI 边写边执行测试效果。
导入 RPi.GPIO 模块:
import RPi.GPIO as GPIO
下面是一段简单的python代码,用来展示如果使用RPI.GPIO控制树莓派的针脚
# 设置GPIO布局编码,这里采用BOARD编码风格,也可以使用BCM风格,注意针脚编码规则是不同的
GPIO.setmode(GPIO.BOARD) # 关闭警告,如果设置某个针脚为非默认状态,可能会得到警告
GPIO.setwarnings(False) # 设置某个针脚的用途
# 下面例子:设置BOARD编码风格的12号(对应GPIO.1)针脚为读取模式
GPIO.setup(12, GPIO.IN) # 读取BOARD-12针脚的电平值
GPIO.input(12) #设置BOARD编码风格的12号(对应GPIO.1)针脚为输出模式
GPIO.setup(12, GPIO.OUT) # 输出BOARD-12针脚为低电平,这里GPIO.LOW/0/False,三种参数是等效的
GPIO.output(12,GPIO.LOW) # 在任何程序结束后,请养成清理用过的资源的好习惯
# 注意:这行代码会将针脚状态恢复成默认值,如果要保持状态,请不要执行该命令
GPIO.cleanup()
上面代码是最常用的控制各个针脚输入输出的命令,我们可以灵活组合基本命令完成更复杂的功能。
【总结】
本节内容是我们后续搭建系统的基础,通过学习树莓派的GPIO使用,为我们后续的温湿度采集,电路控制等准备了充足的条件。
【源码地址】
GitHub:https://github.com/sevenTiny/SevenTiny.SmartHome
自己动手实现智能家居之树莓派GPIO简介(Python版)的更多相关文章
- 自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)
[前言] 一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:"技术改变世界". 就让我们一步步动手搭建一个属于自己的"智能家居平台& ...
- raspberry-gpio-python(树莓派GPIO与Python编程)
国外的设计接口设计得很棒,包括问题:读脏与防抖,还包括读这个数据提供了两种方式,一种是阻塞等待方式,还有一种是回调函数,前一种是通讯中常用的方式,后一种来自系统架构设计的整体性考虑.这种硬件接口设计的 ...
- Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇
转载:Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇 目录 HASS 配置框架 主文件设置 Homebridge 设置 鹬蚌相争? 设备追踪设置 更新日志 作者的话 相信 ...
- Home Assistant + 树莓派:强大的智能家居系统 · 安装篇
Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 转载:Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 目录 1. 初始安装 3. Homebridg ...
- 树莓派安装开源智能家居系统 Domoticz
前言 最近闲来无事开始折腾自己的智能家居系统,对比了几种比较流行的开源智能家居系统,觉得 Domoticz 更适合,Domoticz的官方中文文档,虽然不是很完善但还是可以参考一下.需要注意的是下文用 ...
- DIY智能家居——零基础入门篇
概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...
- 转载智能家居 作者:热情的沙漠 出处:http://www.cnblogs.com/buptzym/
理工男打造帝都89平智能家庭 毕业后的2016年年初,搬入新家,总算不用在出租屋里鬼混了,于是就想把之前童年的梦想:智能家居+家庭影院好好实现一下~ 相比帝都高昂的房价,这些东东还凑合玩得起,不过 ...
- 一款新型的智能家居WiFi选择方案——SimpleWiFi在无线智能家居中的应用
一款新型的智能家居WiFi选择方案——SimpleWiFi在无线智能家居中的应用 先上图: 随着科学技术的不断发展,局域网也正逐渐向无线化,多网合一的方向发展,在这个多网合一快速发展过程中,带 ...
- 智能家居DIY
近期智能家居比較火,将房子简单改造下,也算体验智能家居. 本文解说的是用无线的方式,长处是:不用改造现有线路,直接安装模块就可以实现想要的功能,花的钱也较少,共六百左右 =============== ...
随机推荐
- C# 中的数据库操作~存储过程篇Mysql SqlServer
Mysql 存储过程查询方式 SQL server 普通数据库操作 EF 调用SQL SERVER存储过程 Mysql 存储过程查询方式: public NetPort GetNetdevicePor ...
- 《Head First 设计模式》笔记
第一章 策略模式 00设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码放在一起. 把会变化的部分取出并封装起来,好让其它部分不会受到影响.结果如何?代码变化引起的不经意 ...
- 谈谈我对SOFA模块化的理解
今天我们谈谈SOFA模块化,首先看一段SOFA的介绍: SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 Readiness Che ...
- 深入理解vmware虚拟网络
0x01:vmware workstation VMware Workstation是一款非常不错的虚拟机软件,许多爱好者用VMware,Workstation设计多种实现环境做测试.VMware W ...
- Delphi - Indy TIdMessage和TIdSMTP实现邮件的发送
idMessage / idSMTP 首先对idMessage类的各种属性进行赋值(邮件的基本信息,如收件人.邮件主题.邮件正文等),其次通过idSMTP连接邮箱服务器,最后通过idSMTP的Send ...
- 2015北京区域赛 Mysterious Antiques in Sackler Museum 几何基础+思维
题意是,选出三个,看看是否可以凑成一个新的矩形. #include<bits/stdc++.h> using namespace std; struct node { ]; }a[]; b ...
- 【LeetCode】322-零钱兑换
题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: co ...
- mybatis 批量插入时候的一个注意点
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys=&quo ...
- Ubuntu系统添加用户权限
一.首先创建一个新用户: sudo adduser hadoop 其次设置密码: sudo passwd hadoop 如果无法使用root密码,请输入如下命令: sudo passwd root 二 ...
- lambda表达式不同对象根据对象某个属性去重
1.有时候有两个list对象,我们想要去重,比如: List<User> userList和List<Person>personList 想通过User的id和Person的i ...