【前言】

一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”。

就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术在手,怎么设计实现因人而异),本文只做抛砖引玉,各路大神如果有更好的想法可以各显神通,当然能在评论区留下更好的想法让大家共同学习是再好不过啦。

在文章最后附有所有源代码,有需要的可以自行下载,感谢Star~

【系列目录】

  1. 树莓派GPIO简介(Python版)
  2. 温湿度数据采集存储(DHT11,MySql)
  3. 温湿度数码管展示(四位共阳数码管)
  4. 构建App展示温湿度报表(ApiCloud,Python Flask)
  5. 普通家用排插集成继电器手工改造
  6. App远程控制“自制智能”排插
  7. 使用花生棒内网穿透实现外网访问
  8. 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版)的更多相关文章

  1. 自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)

    [前言] 一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:"技术改变世界". 就让我们一步步动手搭建一个属于自己的"智能家居平台& ...

  2. raspberry-gpio-python(树莓派GPIO与Python编程)

    国外的设计接口设计得很棒,包括问题:读脏与防抖,还包括读这个数据提供了两种方式,一种是阻塞等待方式,还有一种是回调函数,前一种是通讯中常用的方式,后一种来自系统架构设计的整体性考虑.这种硬件接口设计的 ...

  3. Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇

    转载:Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇 目录 HASS 配置框架 主文件设置 Homebridge 设置 鹬蚌相争? 设备追踪设置 更新日志 作者的话 相信 ...

  4. Home Assistant + 树莓派:强大的智能家居系统 · 安装篇

    Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 转载:Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 目录 1. 初始安装 3. Homebridg ...

  5. 树莓派安装开源智能家居系统 Domoticz

    前言 最近闲来无事开始折腾自己的智能家居系统,对比了几种比较流行的开源智能家居系统,觉得 Domoticz 更适合,Domoticz的官方中文文档,虽然不是很完善但还是可以参考一下.需要注意的是下文用 ...

  6. DIY智能家居——零基础入门篇

    概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...

  7. 转载智能家居 作者:热情的沙漠 出处:http://www.cnblogs.com/buptzym/

    理工男打造帝都89平智能家庭   毕业后的2016年年初,搬入新家,总算不用在出租屋里鬼混了,于是就想把之前童年的梦想:智能家居+家庭影院好好实现一下~ 相比帝都高昂的房价,这些东东还凑合玩得起,不过 ...

  8. 一款新型的智能家居WiFi选择方案——SimpleWiFi在无线智能家居中的应用

    一款新型的智能家居WiFi选择方案——SimpleWiFi在无线智能家居中的应用 先上图:     随着科学技术的不断发展,局域网也正逐渐向无线化,多网合一的方向发展,在这个多网合一快速发展过程中,带 ...

  9. 智能家居DIY

    近期智能家居比較火,将房子简单改造下,也算体验智能家居. 本文解说的是用无线的方式,长处是:不用改造现有线路,直接安装模块就可以实现想要的功能,花的钱也较少,共六百左右 =============== ...

随机推荐

  1. jquery实现表格导入到Excel(加图片)

      话不多说直接上代码 第一步:导入jquery的插件https://github.com/rainabba/jquery-table2excel HTML部分: 第二步:添加一个按钮 <but ...

  2. 深度学习环境搭建部署(DeepLearning 神经网络)

    工作环境 系统:Ubuntu LTS 显卡:GPU NVIDIA驱动:410.93 CUDA:10.0 Python:.x CUDA以及NVIDIA驱动安装,详见https://www.cnblogs ...

  3. Leetcode之二分法专题-35. 搜索插入位置(Search Insert Position)

    Leetcode之二分法专题-35. 搜索插入位置(Search Insert Position) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会 ...

  4. Python MySQL 数据库

    python DB API python访问数据库的统一接口规范,完成不同数据库的访问 包含的内容: connection cursor exceptions 访问数据库流程: 1.创建connect ...

  5. vue.js如何根据后台返回来的图片url进行图片下载

    最近在做一个前端vue.js对接的功能模块时,需要实现一个下载图片的功能,后台返回来的是一串图片url,试了很多种方法,发现点击下载时出来的效果都是跳着到一个新的图片网页,后来经过一番琢磨,终于解决了 ...

  6. CodeForces 948B Primal Sport

    Primal Sport 题意:2个人玩游戏, 每次轮到一个人选择一个比当前值小的素数, 然后在找到比素数的倍数中最小的并且不小于当前数的一个数. 现在这个游戏玩了2轮, 现在想找到最小的那个起点X0 ...

  7. CodeForces 1082 F Speed Dial

    题目传送门 题意:现在有n个电话号码,每个电话号码为si,拨打次数为pi. 现在有k 个快捷键,每次拨打号码之前可以先按一次快捷键,然后再输入数字,现在问输入数字次数是多少.快捷键的号码可以不在电话簿 ...

  8. 牛客练习赛51 A abc

    A. abc 题意: 给出一个字符串s,你需要做的是统计s中子串”abc”的个数.子串的定义就是存在任意下标a<b<c,那么”s[a]s[b]s[c]”就构成s的一个子串.如”abc”的子 ...

  9. springboot的最简创建方式

    springboot是目前比较流行的技术栈之一,我在这里写一个springboot工程最简方式 首先开发工具是IDEA,双击打开IDEA,点击Create new Project 进入到这个页面,选择 ...

  10. 【Offer】[62] 【圆圈中最后剩下的数字】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 牛客网刷题地址 ...