跳转到内容

维基少年:树莓派/树莓派乐高®圣诞树LED灯

来自维基教科书,开放的书籍,开放的世界

教程由 Andrew Oakley - 公共领域提供
2017年11月 www.cotswoldjam.org

LEGO® 是乐高公司集团的商标,乐高公司集团不支持、授权或认可本教程或 Cotswold Raspberry Jam。

发光二极管 (LED)

[编辑 | 编辑源代码]

发光二极管 (LED) 有一条短脚和一条长脚。如果你摸一下边缘,你还会发现一个扁平的边缘。短脚和扁平边缘始终连接到负极 (接地)。

  • ×1 红色LED
  • ×1 蓝色LED
  • ×1 黄色LED

电阻可以以任何方式连接。较低值 (较低欧姆) 电阻将允许更多电流通过,并使 LED 更亮;较高的值将允许更少的电流通过,并使 LED 更暗。我们使用的是 270 欧姆电阻,但 220–470 欧姆之间的任何值都可以使用。

  • ×3 270 欧姆 (红紫棕) 电阻。

你需要跳线来连接 LED 到电阻,然后连接到树莓派。

  • ×6 10厘米母对母跳线
  • ×3 20厘米母对母跳线

乐高®积木

[编辑 | 编辑源代码]

最后,你需要两个乐高®积木来制作圣诞树。

连接 LED 和电阻

[编辑 | 编辑源代码]

取两根短 (10厘米) 母对母线,将电阻放在它们之间。

重复三次,这样你就有了三根长线,中间有一个电阻。

接下来,将你刚刚制作的短电阻线连接到每个 LED 的负极 (短) 脚。

最后,将长 (20厘米) 母对母线连接到每个 LED 的正极 (长) 脚。

弯曲 LED 的脚,这样你就可以将它们安装在乐高®松树周围。

连接到树莓派

[编辑 | 编辑源代码]

将带有电阻的线连接到任何 GND (接地,负极) 引脚。这些引脚在右侧的图中以黑色显示。

接下来,将正极线 (没有电阻的长线) 连接到以下引脚。GPIO 14 (引脚 8) 在树莓派的左上角第四个引脚,当以太网端口位于右侧时。

  • 红色LED - GPIO 14 (引脚 8)
  • 蓝色LED - GPIO 15 (引脚 10)
  • 黄色LED - GPIO 18 (引脚 12)

不要担心线的颜色。关注 LED 的颜色。GPIO 代表通用输入输出。这些引脚有许多用途。

在你的树莓派桌面上,点击树莓派菜单 (右上角),然后选择编程,并点击 Python 3 (IDLE)。

点击文件菜单,打开。双击 python 文件夹 (你可能需要滚动到最右边才能找到它)。双击 lego-xmas 文件夹。选择 lego-xmas1.py 并点击打开。

一个新的窗口将打开。在新窗口中,选择运行菜单,并点击运行模块。红色 LED 应该短暂亮起,然后关闭。让我们看一下这个程序。

from gpiozero import LED
from time import sleep
red=LED(14)
red.on()
sleep(0.5)

这个程序在做什么?

[编辑 | 编辑源代码]
from gpiozero import LED
from time import sleep

计算机并不知道如何自己完成所有事情;它需要学习。这两行代码教计算机有关 LED 和等待 (sleep) 的知识。保存这些知识的地方叫做库。我们从 gpiozero 库导入 LED 命令,从 time 库导入 sleep 命令。

red=LED(14)
red.on()

我们必须告诉计算机红色 LED 连接到哪个 GPIO 引脚,然后我们告诉它打开 LED。

sleep(0.5)

这告诉计算机等待 (sleep) 半秒钟。

程序结束时,它会自动关闭 LED。此自动关闭功能是 gpiozero 库的一部分。

依次点亮所有LED

[编辑 | 编辑源代码]

通过点击 lego-xmas1.py 窗口,然后选择文件菜单,关闭来关闭程序。

从主窗口打开 lego-xmas2.py 程序,然后使用运行菜单,运行模块来运行它。

这个程序依次点亮所有 LED,每个 LED 之间等待半秒钟。

通过按住 CTRL 键并按下 C 来停止程序。

这个程序在做什么?

[编辑 | 编辑源代码]

注意我们如何定义红色、蓝色和黄色 LED 的引脚号,以及我们如何按顺序打开和关闭它们。

from gpiozero import LED
from time import sleep

red=LED(14)
blue=LED(15)
yellow=LED(18)

while True:
  blue.off()
  yellow.off()
  red.on()
  sleep(0.5)

  red.off()
  blue.on()
  sleep(0.5)

  blue.off()
  yellow.on()
  sleep(0.5)

while 命令重复一个部分。我们说 while True 表示“永远”。

注意 while 命令下面的命令如何从左边缩进几个空格。这叫做块。缩进让计算机知道哪些命令应该作为 while 循环的一部分重复执行。

还要注意 while True: 如何以冒号 : 结尾。

冒号让计算机知道它应该接下来期待一个代码块。

尝试改变顺序。交换一些on()off()命令。

改变睡眠时长,使其更长或更短。尝试为不同的LED添加额外的on()off()sleep命令。

创建你自己的惊人的圣诞节灯光序列!

高级附加功能

[编辑 | 编辑源代码]

程序lego-xmas3.py展示了如何使用pulse命令。注意lego-xmas3.py如何使用PWMLED库,而不是仅仅使用简单的LED库。

from gpiozero import PWMLED

pulse命令更难使用,因为你必须根据你的sleep时间,精确控制不同颜色LED的脉冲。

 red.pulse(0.3,0.3,4,True)
 blue.pulse(0.4,0.4,3,True)
 yellow.pulse(0.6,0.6,2,True)
 sleep(2.4)

程序包含一些注释,解释了脉冲命令的工作原理。

教师准备

[编辑 | 编辑源代码]

http://www.cotswoldjam.org/downloads/2017-11下载

要将lego-xmas*.py程序文件添加到Raspbian,请进入终端

cd
mkdir -p python
cd python
curl "http://www.cotswoldjam.org/downloads/2017-11/lego-xmas.zip" -O
unzip lego-xmas.zip
exit

请注意,-O是大写字母O,而不是零。更多教程请访问http://www.cotswoldjam.org/tutorials

Cjam-lego-xmas.pdf

[编辑 | 编辑源代码]

本教程的原始PDF文件在维基共享资源:Cjam-lego-xmas.pdf

lego-xmas1.py

[编辑 | 编辑源代码]
from gpiozero import LED
from time import sleep

red=LED(14)
red.on()
sleep(0.5)

lego-xmas2.py

[编辑 | 编辑源代码]
from gpiozero import LED
from time import sleep

red=LED(14)
blue=LED(15)
yellow=LED(18)

while True:
  blue.off()
  yellow.off()
  red.on()
  sleep(0.5)

  red.off()
  blue.on()
  sleep(0.5)

  blue.off()
  yellow.on()
  sleep(0.5)

lego-xmas3.py

[编辑 | 编辑源代码]
from gpiozero import PWMLED
from time import sleep

red=PWMLED(14)
blue=PWMLED(15)
yellow=PWMLED(18)

while True:
  red.pulse(0.3,0.3,4,True)
  blue.pulse(0.4,0.4,3,True)
  yellow.pulse(0.6,0.6,2,True)
  sleep(2.4)

# PWMLEDs have a pulse command. The parameters are:
# 1 Fade in time, in seconds
# 2 Fade out time, in seconds
# 3 Number of times to pulse
# 4 Background - True to continue to the next command without waiting
#                False to wait until finished
#
# For example:
# red.pulse(0.3,0.3,4,True)
# * Fade in for 0.3 seconds
# * Fade out for 0.3 seconds
# * Repeat 4 times
# * Continue with the next command without waiting
# 4x0.3=1.2 seconds to fade in
# 4x0.3=1.2 seconds to fade out
# 1.2+1.2=2.4 seconds total
#
# Find out more about PWMLED commands
# http://gpiozero.readthedocs.io/en/stable/api_output.html#pwmled
#
# Learn about PWM Pulse Width Modulation
# https://learn.sparkfun.com/tutorials/pulse-width-modulation
华夏公益教科书