树莓派官网学习记录

树莓派官网学习记录

和GPIO Zero 一起开始

我们将做的

树莓派一侧的排针是称为通用输入输出引脚(GPIO)

这些引脚允许树莓派去控制现实中的东西。你能连接元件到这些引脚上:输出设备像能任意被开关的LED(发光二极管);或者是输入设备像能用作触发事件的一个按钮或者传感器,比如当一个按钮被按下的时候,点亮一只LED。

通过使用GPIO Zero 库,你能很容易的控制树莓派的GPIO引脚。

我们将学习的

通过完成这个资源你将学到:

  1. 如何将LED和按钮连接到树莓派的GPIO上
  2. 如何通过GPIO Zero控制GPIO引脚的输出
  3. 如何通过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:

  1. from gpiozero import LED
  2. led = LED(17)

    ?

在键盘上按下回车键。

(3). 让LED打开,键入下面语句并且按回车:

  1. led.on()

?

(4). 让LED关闭,你可以键入:

  1. led.off()

?

4.完成一个LED

通过time库和一个小循环,你可以是LED闪烁。

(1). 创建一个新文件通过点击File > New file

(2). 保存一个新文件通过点击File > Save

(3). 把文件保存为gpio_led.py

(4). 键入下面的代码来开始:

  1. from gpiozero import LED
  2. from time import sleep
  3. ?
  4. led = LED(17)
  5. ?
  6. while True:
  7. ????led.on()
  8. ????sleep(1)
  9. ????led.off()
  10. ????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上。在你的新文件中键入下面的代码:

  1. from gpiozero import Button
  2. button = Button(2)

?

(6). 现在你能得到一个工程去做一些事,当按钮被按下的时候。添加 下面的代码:

  1. button.wait_for_press()
  2. print(‘You pushed me‘)

?

(7). 使用Ctrl + S 保存 并且通过F5执行代码

(8). 按下按钮文本出现

6. 手动控制LED

????你现在可以结合写到目前位置的两个项目来通过按钮控制LED。

(1). 创建一个新文件通过点击File > New file

(2). 保存一个新文件通过点击File > Save

(3). 把文件保存为gpio_control.py

(4). 键入下面的代码:

  1. from gpiozero import LED, Button
  2. from time import sleep
  3. ?
  4. led = LED(17)
  5. button = Button(2)
  6. ?
  7. button.wait_for_press()
  8. led.on()
  9. sleep(3)
  10. led.off()

?

(5). 保存和运行你的项目。当你按下按钮LED应该亮3秒钟

7. 制作一个开关

制作一个开关,按下和释放按钮将点亮LED,再一次按下和释放按钮将熄灭LED。

(1). 修改你的代码让它看起来想这样。你正在使用一个称为active的标志去记录LED的状态。命令行active = not active 将标志在True和False间切换:

  1. from gpiozero import LED, Button
  2. from time import sleep
  3. ?
  4. led = LED(17)
  5. button = Button(2)
  6. active = False
  7. ?
  8. while True:
  9. ????if active == False:
  10. ????????led.off()
  11. ????else:
  12. ????????led.on()
  13. ????button.wait_for_press()
  14. ????button.wait_for_release()
  15. ????active = not active

?

如果你仅仅想在按钮被一直按下时打开LED这样做是很棒的。通过GPIO Zero库,这很简单。

(1). Button类中有两种方法被叫做when_pressed 和 when_release。他们不会阻塞工程的流程,所以如果他们放在循环里,工程将不确定地循环。

(2). 修改你的代码像这样:

  1. from gpiozero import LED, Button
  2. from signal import pause
  3. ?
  4. led = LED(17)
  5. button = Button(2)
  6. ?
  7. button.when_pressed = led.on
  8. button.when_released = led.off
  9. ?
  10. pause()

?

(3). 保存和运行工程。现在当你按住按钮,LED将点亮;当你释放按钮它将熄灭。

X.接下来是什么呢?

在GPIO Zero库中有很多其他的东西可以尝试。你可以看一看这里的文档:

https://gpiozero.readthedocs.org/en/v1.1.0/

尝试一下控制其他的元件,例如蜂鸣器,RGB LED,电机或者是机器人。

时间: 2024-10-22 16:38:32

树莓派官网学习记录的相关文章

WebApi2官网学习记录---异常处理

HttpResponseException 当WebAPI的控制器抛出一个未捕获的异常时,默认情况下,大多数异常被转为status code为500的http response即服务端错误. HttpResonseException是一个特别的情况,这个异常可以返回任意指定的http status code,也可以返回具体的错误信息. 1 public Product GetProduct(int id) 2 { 3 Product item = repository.Get(id); 4 if

WebApi2官网学习记录---BSON

BSON 是轻量级的,能够进行快速查询和高效的解码/编码.BSON方便查询是由于elements的前面都有一个表示长度的字段,所以解释器可以快速跳过这个elements:高效的解码/编码是因为numeric数据直接存储为numbers,不用转为string. 在服务端启用BSON   public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Formatter

WebApi官网学习记录---web api中的路由

如果一条路由匹配,WebAPI选择controller和action通过如下方式: 1.找到controller,将"controller"赋值给{controller}变量 2.寻找action,web api查看http的请求方式,然后寻找一个以对应请求方式开头的action,如Get请求,需要寻找一个名为Get...的action,这种方式仅支持Get,Post,Put和Delete操作. 除了依据Http请求的方式,还可以显示为action指定http method通过Http

WebApi2官网学习记录--- Authentication与Authorization

Authentication(认证)   WebAPI中的认证既可以使用HttpModel也可以使用HTTP message handler,具体使用哪个可以参考一下依据: 一个HttpModel可以检测ASP.NET请求管道中的所有请求,一个message handler仅仅可以检测到被路由到这个WebAPI的请求 可以预先设置message handlers,让特定的route使用指定的authentication scheme Http Module只能在IIS中使用,Message ha

WebApi2官网学习记录---Tracing

安装追踪用的包 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHost //-Version指定具体的版本 启用追踪的功能(在WebApiConfig.cs中) public static class WebApiConfig { public static void Register(HttpConfiguration config) { SystemDiagn

WebApi2官网学习记录---Content Negotiation

Content Negotiation的意思是:当有多种Content-Type可供选择时,选择最合适的一种进行序列化并返回给client. 主要依据请求中的Accept.Accept-Charset.Accept-Encoding.Accept-Language这些属性决定的,但也会查看其它属性 如,如果请求中包含“ X-Requested-With”(ajax请求),在没哟其它Accept时,则使用JSON. Content Negotiation的工作原理 首先,pipeline从Http

WebApi2官网学习记录---Media Formatters

Web API内建支持XML.JSON.BSON.和form-urlencoded的MiME type. 创建的自定义MIME类型要继承一下类中的一个: MediaTypeFormatter 这个类使用异步的读/写方法 BufferedMediaTypeFormatter 这个类继承自MediaTypeFormatter,但它使用同步的读/写方法 自定义一个MIME类型,如下: public class ProductCsvFormatter:BufferedMediaTypeFormatter

WebApi2官网学习记录---Attribute Routing

从WebApi 1迁移到WebAPI 2要改变配置代码如下: WebApi 1: protected void Application_Start() { // WARNING - Not compatible with attribute routing. WebApiConfig.Register(GlobalConfiguration.Configuration); } WebAPI 2: protected void Application_Start() { // Pass a del

4.Knockout.Js官网学习(事件绑定)

前言 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用在button,input和连接a上,但是可以在任意元素上使用. 简单示例 <h2>ClickBind</h2> <div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="