树莓派官网学习记录
和GPIO Zero 一起开始
我们将做的
树莓派一侧的排针是称为通用输入输出引脚(GPIO)
这些引脚允许树莓派去控制现实中的东西。你能连接元件到这些引脚上:输出设备像能任意被开关的LED(发光二极管);或者是输入设备像能用作触发事件的一个按钮或者传感器,比如当一个按钮被按下的时候,点亮一只LED。
通过使用GPIO Zero 库,你能很容易的控制树莓派的GPIO引脚。
我们将学习的
通过完成这个资源你将学到:
- 如何将LED和按钮连接到树莓派的GPIO上
- 如何通过GPIO Zero控制GPIO引脚的输出
- 如何通过GPIO Zero读取GPIO引脚的输入
我们需要的
硬件:
除了带SD卡的树莓派和惯例的外围设备,还需要一块无焊面包板(Solderless breadboard)、两根公对母杜邦线、一个按钮、一个LED
软件:
为了准备这个资源,你将需要一个最新的SD卡镜像:
首先,更新系统包列表通过在LXTerminal或者从命令行中键入下面的命令:
sudo apt-get update
接着,通过命令升级所有的已安装包到最新版本:
sudo apt-get upgrade
通常来说,定期的操作这些能保持你的安装为最新的,以至于它将等价于在raspberrypi.org/downloads.获取到的最新发行版镜像。
但是,存在偶然的更改加入基础的Raspbian 镜像需要手动介入,例如一个最近提出的包。存在一个不能安装的升级,对于这个命令而言仅仅升级的是你已经安装的包。
升级内核和框架
内核和框架是作为一个Debian 包被安装的,并且通过上面的步骤也将得到升级。这些包会在广泛的测试之后经常得到升级。
运行空间
当执行sudo apt-get upgrade ,它将告诉我们将要下载多少数据和将占用SD卡上多大的空间。它可以用df –h来核对使你有足够的空闲空间,当不幸的apt将不会为你做这个事。也要注意下载好的包文件(扩展名为.deb)被存在了/var/cache/apt/archives 目录下了。你可以用sudo apt-get clean删除它们来释放空间。
你还需要安装下面额外的软件:
GPIO Zero
为了安装你需要的软件,在LXTerminal中执行下面的命令:
sudo apt-get install python3-pip python3-w1thermsensor python3-spidev
sudo pip-3.2 install gpiozero
开始
1.GPIO引脚
树莓派有40个引脚,并且这些引脚提供了不同的功能。
如果你有一个RasPIO pin label,它能帮助你定义每一个引脚用来做什么。确保你的铜孔朝向usb口,正面向外。
如果你没有RasPIO pin label,这个指南将帮助你定义引脚号码:
你将看到引脚被标为3V3, 5V, GND 和 GP2, GP3, 以此类推
3V3? |
3.3 v? |
接到这个引脚的东西总能得到3.3v电压 |
5V? |
5 v |
接到这个引脚的东西总能得到5v电压 |
GND? |
地 |
0v用来完成一个电路 |
GP2? |
GPIO 引脚 2 |
这些引脚是通用的可以配置成输入或者输出 |
ID_SC/ID_SD/DNC? |
特殊用途引脚 |
???? |
?
?
2.点亮一个LED
尝试连接一个LED和一个电阻串联到树莓派的3V3和GND引脚
这个LED将会被点亮。它将是常亮的,因为它被连接到了一个3V3的引脚上。
现在尝试把它从3V3移动到GPIO引脚17上:
这个LED现在应该是不亮的,但是现在它是在一个GPIO引脚上,因此能被代码控制。
3.开关一个LED
GPIO Zero 是一个新的提供给日常GPIO元件简单接口的Python 库。
(1). 从主菜单中打开Python 3;
(2). 你能开关一个LED通过直接键入命令到Python 解释器窗口(也叫Python shell)。首先让我们导入这个GPIO Zero 库。你也需要告诉树莓派你正在使用的是哪一个GPIO 引脚 –在这个例子里是用的引脚17。接下来是chevrons type:
- from gpiozero import LED
- led = LED(17)
?
在键盘上按下回车键。
(3). 让LED打开,键入下面语句并且按回车:
- led.on()
?
(4). 让LED关闭,你可以键入:
- led.off()
?
4.完成一个LED
通过time库和一个小循环,你可以是LED闪烁。
(1). 创建一个新文件通过点击File > New file
(2). 保存一个新文件通过点击File > Save
(3). 把文件保存为gpio_led.py
(4). 键入下面的代码来开始:
- from gpiozero import LED
- from time import sleep
- ?
- led = LED(17)
- ?
- while True:
- ????led.on()
- ????sleep(1)
- ????led.off()
- ????sleep(1)
?
(5). 使用Ctrl + S 保存 并且通过F5执行代码
(6). LED应该开始闪烁了,按键盘上的Ctrl + C来退出工程
5. 使用按钮来获得输入
????现在你能控制一个输出元件-LED了,让我们连接并控制一个输入元件-按钮
????(1). 连接一个按钮到另外一个GND引脚和GPIO引脚2 如下图
????
(2). 创建一个新文件通过点击File > New file
(3). 保存一个新文件通过点击File > Save
(4). 把文件保存为gpio_button.py
(5). 这一次我们需要Button 类,去告诉树莓派按钮在引脚2上。在你的新文件中键入下面的代码:
- from gpiozero import Button
- button = Button(2)
?
(6). 现在你能得到一个工程去做一些事,当按钮被按下的时候。添加 下面的代码:
- button.wait_for_press()
- print(‘You pushed me‘)
?
(7). 使用Ctrl + S 保存 并且通过F5执行代码
(8). 按下按钮文本出现
6. 手动控制LED
????你现在可以结合写到目前位置的两个项目来通过按钮控制LED。
(1). 创建一个新文件通过点击File > New file
(2). 保存一个新文件通过点击File > Save
(3). 把文件保存为gpio_control.py
(4). 键入下面的代码:
- from gpiozero import LED, Button
- from time import sleep
- ?
- led = LED(17)
- button = Button(2)
- ?
- button.wait_for_press()
- led.on()
- sleep(3)
- led.off()
?
(5). 保存和运行你的项目。当你按下按钮LED应该亮3秒钟
7. 制作一个开关
制作一个开关,按下和释放按钮将点亮LED,再一次按下和释放按钮将熄灭LED。
(1). 修改你的代码让它看起来想这样。你正在使用一个称为active的标志去记录LED的状态。命令行active = not active 将标志在True和False间切换:
- from gpiozero import LED, Button
- from time import sleep
- ?
- led = LED(17)
- button = Button(2)
- active = False
- ?
- while True:
- ????if active == False:
- ????????led.off()
- ????else:
- ????????led.on()
- ????button.wait_for_press()
- ????button.wait_for_release()
- ????active = not active
?
如果你仅仅想在按钮被一直按下时打开LED这样做是很棒的。通过GPIO Zero库,这很简单。
(1). Button类中有两种方法被叫做when_pressed 和 when_release。他们不会阻塞工程的流程,所以如果他们放在循环里,工程将不确定地循环。
(2). 修改你的代码像这样:
- from gpiozero import LED, Button
- from signal import pause
- ?
- led = LED(17)
- button = Button(2)
- ?
- button.when_pressed = led.on
- button.when_released = led.off
- ?
- pause()
?
(3). 保存和运行工程。现在当你按住按钮,LED将点亮;当你释放按钮它将熄灭。
X.接下来是什么呢?
在GPIO Zero库中有很多其他的东西可以尝试。你可以看一看这里的文档:
https://gpiozero.readthedocs.org/en/v1.1.0/
尝试一下控制其他的元件,例如蜂鸣器,RGB LED,电机或者是机器人。