使用 RPi.GPIO 模块的输入(Input)功能

这篇日志的内容应该算是《RPi.GPIO 模块使用基础》Input 部分的扩展讲解,详细讲解了 Input 部分的一些高级应用技巧。
目前有几种途径可以在您的程序中获得 GPIO 的输入信息。第一种也是最简易的一种为在某个时间点检查输入值。这即是所谓的“轮询(polling)”,而且如果您的程序在错误的时间里进行了读取,可能会错过某个输入值。在循环中运用轮询,有可能使处理器资源紧张。另一种对 GPIO 输入进行响应的方式可以使用“中断(interruots)”(边缘检测(edge detection))。边缘可以是从 HIGH 到 LOW 的过度(下降临界值(falling edge))或从 LOW 到 HIGH 的过度(上升临界值(rising edge))。

上拉/下拉电阻

如果您在输入针脚上没有连接任何元件,那么它将是“浮动(float)”的。换句话说,因为您没有连接任何元件,在按下按钮或开关之前,读取的值是没有意义的。由于电源的波动,获取到的值可能会有很大的变化。

阅读全文

使用 RPi.GPIO 模块的输出(Output)功能

1、首先对 RPi.GPIO 进行设置(根据这里的描述)

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)

2、设置某个输出针脚状态为高电平:

GPIO.output(12, GPIO.HIGH)
 # 或者
GPIO.output(12, 1)
 # 或者
GPIO.output(12, True)

3、设置某个输出针脚状态为低电平:

GPIO.output(12, GPIO.LOW)
 # 或者
GPIO.output(12, 0)
 # 或者
GPIO.output(12, False)

4、程序结束后进行清理

GPIO.cleanup()

注意,您可以读取使用 input() 函数设置的输出通道的当前状态。例如对输出进行切换:

GPIO.output(12, not GPIO.input(12))

阅读全文

树莓派“瑞士军刀”扩展板教程 V1.X TO V2.X 的适配说明

本文介绍在树莓派瑞士军刀扩展板升级到V2.0之后,如何对原先V1.X的教程做出适当修改之后应用到V2.0的方法。以下将通过链接引用V1.0的内容并附上差异说明和代码变更来对每一个DIY应用进行阐述。

开始之前,你需要了解SAKS V2.0在硬件和SDK上做了哪些变更,可以参考硬件变更SDK变更

由于V2.0的引脚顺序重新定义过,因此原有教程中的引脚编号对应表需要自行对应到新版本。另外,SDK升级说明中关于LED组的调用方法也请特别注意。虽然Github上我们将SDK的目录结构做了调整,但我们尽可能保证了对旧有代码的兼容性,main.py 主程序中对SDK的导入依然可沿用之前的方式无需变更。

阅读全文

树莓派3串口(UART)使用问题的解决方法

最新64位树莓派3已经发布快两周了,玩家们陆陆续续也开始使用上树莓派3了,随着玩家的增多,虽然拥有强大硬件配置的树莓派3也出现了各种各样的BUG,官方也在对这些BUG进行修复中。今天要说说树莓派3的UART串口的使用问题,该串口问题的官方反馈及回复请参考这两篇官方博文
https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=137932
https://www.raspberrypi.org/forums/viewtopic.php?f=107&t=138223

根据官方的反馈和回复,我们了解到树莓派3上用户目前无法正常是使用GPIO中的UART串口(GPIO14&GPIO15),也就是说用户无论是想用串口来调试树莓派,还是想用GPIO中的串口来连接GPS,蓝牙,XBEE等等串口外设目前都是有问题的。

阅读全文

用树莓派DIY一个智能家居服务器

来自树莓派实验室老司机群 Pokebox 的投稿~
高考结束啦~来用树莓派DIY一下自己的智能家居吧~
其实这东西我自己已经用了一年了~现在就来写个教程~嘿嘿……
先上个图
20160626192247896-0
有点乱23333
这是我的房间书柜,也是我的工作台……书柜的侧边是树莓派搭建的物联网服务器~
来一只近图~
阅读全文

树莓派GPIO入门08-使用74HC595芯片驱动数码管(一)

本文转自 mangolovecarrot ,是学习74HC595芯片很棒的文章。之前我们学习了如何驱动数码管显示数字。
但是这种做法有两个缺点。

  1. 需要占用大量IO口,在那篇文章里,我们为了驱动4位数码管一共使用了12个IO口。如果需要驱动8位数码管则至少需要16个IO口。
  2. 系统资源占用过多。还是在那篇文章里,为了实现数码管的动态扫描显示,需要不停地高速操作IO口,这对单任务的单片机比如51单片机来说问题并不太大,因为单任务的单片机的执行时序是由晶振来决定的,动态扫描的时间间隔可以控制地非常精确,数码管的显示会很稳定,不会出现闪烁的现象。但对于运行着多任务的Linux操作系统的树莓派来说,对IO口的大量反复操作以及大量使用sleep语句会导致CPU占用过多,最后导致动态扫描的间隔时间不均匀,体现为数码管显示不稳定,有明显闪烁的现象。为了改善这个问题我在那篇文章的最后还尝试用c语言来代替python语言,可实际效果有限。
    使用GPIO直接驱动数码管时,上面这两个问题是不可避免的。想解决这两个问题,我们需要借助外部芯片的帮助。
    接下来我将用几个篇幅来介绍如何使用显示驱动芯片74HC595来驱动数码管的方法。同时我们也可以学习到串行数据传输的方法以及一些数字芯片通用的一些概念,比如时钟引脚,上升沿,锁存,移位寄存等。理解了这些通用的概念对学习使用其他芯片是很有帮助的。

阅读全文