Skip to content

Index

Scratch 1.4中的 GPIO

用法和基本功能

启动服务器

必须先启动 GPIO 服务器,然后才能使用 GPIO 引脚。做这件事有很多种方法:

  • 从"编辑"菜单中选择"启动 GPIO 服务器"以将其打开。如果服务器已经在运行,则"停止 GPIO 服务器"将其关闭。
  • 从头开始播放 gpioserveron 或 gpioserveroff 将具有相同的效果。
  • 在 GPIO 服务器运行时保存的项目将记录该状态,并且在加载时将尝试启动服务器(如果已启用)。
  • 您也可以在暂存 INI 文件中设置一个选项。请参阅下面的附录。

GPIO基本用法

无需任何进一步设置,您现在就可以访问 GPIO 系统的基础知识。当前,它像原始的基于网状网络的广播消息一样,使用广播块将命令发送到 GPIO 服务器。

例如,要将 GPIO 引脚 4 配置为输出并将其打开,您可以创建以下两个广播:

广播 config4  out gpio4on

与往常一样,您可以使用普通的 join ,pick或 list -handling块来汇编此文本。例如,如果foo = 17,则

broadcast join gpio join foo 17

会广播" gpio17on",从而将 GPIO 引脚号 17 (在 BCM 编号下-而不是物理编号或 connectioningPi 编号!)设置为" on"。

需要对引脚进行配置,然后才能使用它们执行任何操作。我们可以设置引脚的方向(输入或输出),对于输入引脚,可以设置上拉模式(上,下,无)。

  • 对于输入引脚,我们可以使用"输入"或"输入"。两者均与" inpullup"或" inputpullup"相同,默认设置为设置上拉电阻来上拉信号。 +为了设置上拉电阻将信号下拉,我们使用" inpulldown"或" inputpulldown" +我们可以将上拉电阻设置为通过" inpullnone"或" inputpullnone"浮动
  • 输出引脚只需通过"输出"或"输出"进行配置
  • 带 PWM 的输出配置为'outputpwm',用于使 LED 局部发光或使电动机以变速运行等。

例如: broadcast config 11 inpulldown

设置为输入的引脚连接到 Scratch 传感器变量系统,因此它们出现在传感器块的可能值列表中:

传感器块 gpio11

可以相同的方式使用:

if gpio11sensorvalue

在运行配置广播之前,您不会在列表中找到输入引脚。在此之前,GPIO服务器不知道您是否希望将其作为输入。保存项目时,输入仍将被连接。

使用这些非常简单的命令,您可以构建相当复杂的 GPIO 处理脚本来读取按钮并操作 LED ,电机等。我们还具有返回时间,返回机器 IP 地址,读取各种温度,读取超声波距离传感器,获取天气报告,甚至使用附带的树莓派相机模块拍照的命令,并将其设置为当前服装。

该脚本(在 Sensors and Motors文件夹中以 Sensors and Motors/gpio-demo 形式提供)说明了上述大部分内容:

gpio-demo脚本

连同适当配置的面包板一起,它提供了通过按一下按钮来打开和关闭 LED 的功能,通过逐渐变亮的 LED 提供的倒计时拍照,检查时间的方式等等。

gpio-demo-breadboard

注意,我们可以有一个包含多个消息的广播,例如上面脚本中的gpio24on gpio18pwm400

基本 GPIO 命令

在下面的命令清单中,我们使用 [comm] +密码+ [on |关] 以comm17offcomm7on形式表示命令。 对于变量led +灯号(1..5)=(0 .. 100)表示名为" led5"的变量的值可能在 0 到 100 之间。同样, foo =(1 | 4 | 7) 表示变量" foo"可以设置为 1 、 4 或 7 。

简单的 GPIO 控制

在没有将任何 HAT 插入 Pi 的情况下可以执行的基本 GPIO 命令列表如下:

  • config +针号+ +ininputinpullupinputpullup设置为上拉输入 +inpulldowninputpulldown +inpullnoneinputpullnone +outoutput设置为数字输出 +outputpwm设置为 PWM 引脚

例如," config12in"使用默认上拉将引脚 12 设置为输入,并添加传感器变量" gpio12"。

  • gpio +密码+ [on |高|关|低]以打开或关闭输出 例如," gpio17on"打开引脚 17 。

  • gpio +引脚号+ pwm + [0..1024]以使用 PWM 输出例如," gpio22pwm522"将 PWM 占空比设置为 1024 的 522 ,即大约一半的功率。请注意,许多 LED 似乎没有以简单的线性方式改变其亮度,因此 522 可能几乎不发光或接近全亮度。

伺服驾驶

  • 伺服+针号+ [百分比| %] + [-100 ... 100]将连接的伺服器移到位置。

例如," servo15%0"将伺服定位在其范围的中心。 - "伺服停止"以关闭伺服驱动器。

Servos and Motors/gpio-servoDemo 脚本中,您可以看到如何移动伺服系统或将其连接到变量的位置,例如精灵的位置。您将需要如下连接伺服系统:

gpio伺服布线图

超声波传感器

  • "超声波+触发+触发引脚+回波+回波引脚",用于连接典型的 SR04 超声波传感器
  • 在脚本结尾处使用"超声波停止"功能来关闭传感器支持

这是使用引脚 16 作为触发点和 26 作为回波的示例布线布局:

gpio超声波布线图

如果将此布线设置与 Sensors and Motors/gpio-ultrasonicDemo 中的脚本一起使用,您将看到如何读取距离并相应地移动精灵。 传感器和电机/gpio-ultrasonicIntruderAlarm 中的另一个超声演示需要一个摄像头模块,当任何人离得太近时都会拍摄快照。

天气报告

  • `getweather +城市名称+,+国家两个字母的代码+ + +您在OpenWeatherMaps中的用户密钥将为指定城市的温度,风速和方向创建传感器变量,降雨和云量。您必须注册才能从他们那里获取密钥(可用免费帐户)。有关详细信息,请参见OpenWeatherMaps

例如

getweather Rio de Janeiro,BR,1234EF65B42DEAD

将使传感器变量

里约热内卢的雨 在里约热内卢的温度 0

...等等。城市名称和国家/地区代码以及您的密钥之间的逗号对于让 GPIO 服务器知道在哪里拆分内容至关重要。一些城市的名称很简单,例如" Ee"或" Manchester",而其他城市则涉及更多的名称,例如" Sault Ste Marie"或" Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch"。请注意,OpenWeatherMaps服务器并不知道每个国家的每个城市,也不知道它所知道的所有城市的每种天气数据,因此有时您将得不到有用的信息。

脚本"传感器和电动机/gpio-citytemperaturegraph **"显示了如何获取伦敦的天气数据并绘制温度。由于天气数据通常不会快速变化,因此我们仅每 15 分钟获取一次数据,以免网站超载。

读取温度

  • gettemp连接到几个可能的温度传感器。 +gettemp + cpu读取 cpu 温度并创建传感器变量cputtemp。例如:gettempcpu。 可以在 Sensors and Motors/gpio-cputtemperaturegraph 项目中找到绘制 CPU 温度曲线图的示例项目。 +gettemp本身将尝试查找连接的 1 -wire DS18B20热传感器,并创建名为temp + [十二位传感器 ID ]的传感器变量。 +gettemp + [先前发现的十二位 1 -wire ID]`将直接连接到已识别的 DS18B20 传感器。

    请注意,1-wire传感器大约需要半秒钟才能读取,因此频繁读取传感器可能会使 Scratch 变得非常慢。

相片

  • photo使用相机拍摄照片并将其作为精灵的当前服装插入(或舞台,如果已选择)。
  • photo + [big/large]:一张"大"照片与舞台大小相同。例如:" photobig"或" photo large"。
  • photo + [width @ height]可以将照片尺寸的宽度乘以高度像素,直至相机的极限。您可以尝试使用几乎任何合理的宽度和高度数字,但是请记住,很小的数字(小于 32 )不一定会生成正确的图像,很大的数字会使图像太大,从而使 Scratch 崩溃。例如,通常可接受 photo800 @ 600,但是 photo2000 @ 1600可能会引起问题。

杂项

  • gettime将一些时间值添加到传感器变量中,特别是小时数,分钟数和完整的日期和时间,格式为 YYMMDDhhmmss 。
  • getip为机器的本地主机地址 IP 号添加一个传感器变量。

附加硬件

我们还可以控制 Pi 附加板,例如 PiGlow ,Pibrella,Explorer HAT等。要设置一个板,我们首先需要告知 GPIO 服务器它是什么板;这是通过创建和设置变量 AddOn 来完成的,如下所示:

将附加组件设置为 Piglow

每块电路板在上述基本 GPIO 设施之上都有自己的一组命令。许多开发板还可以使用 Scratch 变量广播,从而创建一个适当命名的变量,并在其更改时广播其值。例如,对于 PiGlow 板,有意义的是为每个 LED 或 LED 环命名,并设置每个值作为控制亮度的方式。同时使用两种控制形式可能会造成混乱;在与将 myValue 设置为 200 相同的脚本中广播 myCommand400 可能会在极端情况下导致闪烁,明显的非功能甚至硬件故障。 您要做的就是创建一个具有适当名称的变量,并使用常规脚本块设置其值。

某些板卡提供可通过传感器变量访问的输入,如上面在引脚 11 的示例用法中所示。

PiGlow

PiGlow板上有几个明亮的彩色 LED 环,可以将它们分别控制为环,支脚或全部。注意:看起来可能有点亮,所以用一些描图纸或有色有机玻璃制成的扩散器是个好主意。要使用该板,请将" AddOn"设置为" PiGlow"。

PiGlow有很多命令,其中许多命令已在 Sensors and Motors/gpio-PiGlow 项目中进行了演示。

支持的命令

  • 腿+腿号[1 | 2 | 3] + [on |高|关|低],例如leg2off
  • arm-作为腿
  • `all + [on |高|关|低]
  • [led |灯] + led号码+ [开|高|关|低],例如light12high
  • bright + [0 .. 255](根据命令设置任何后续 LED 的亮度倍增器)
  • [红色|橙色|黄色|绿色|蓝色|白色] + [上|高|关|低],例如redlow

变量

  • bright =(0 .. 255)
  • [腿|手臂] + [1 | 2 | 3] =(0 .. 255)
  • [led | light] + led number(1..18)=(0 .. 255)
  • [红色|橙色|黄色|绿色|蓝色|白色] =(0 .. 255)
  • ledpattern =(被视为二进制数字的 18 个字符的字符串,例如" 011111101010101010",其中任何非 0 都被视为 1 )

PiFace

PiFace数字板提供八个数字输入和八个数字输出,其中前四个输入具有并行开关,前两个输出具有 20V /5A继电器。将" AddOn"设置为" PiFace"以激活该板。

支持的命令

  • `all + [on |关]
  • 输出+输出编号+ [上|高|关|低],例如output6on

变量

  • output + [0 .. 7] =(0 | 1)-该值四舍五入并受到最大/最小限制,因此-1舍入为 0 ,400000000舍入为 1 。

还有八个输入传感器变量,分别从" Input1"到" Input8",其值可能为(0/1)。传感器和电机/gpio-PiFace **项目说明了如何使其工作。

Pibrella

这提供了一个漂亮的大红色按钮,三个大 LED ,四个数字输入,四个数字输出和一个很大的蜂鸣器。要使用该板,请将" AddOn"设置为" Pibrella"。

支持的命令

  • [红色|黄色|绿色] + [开|高|关|低],例如黄高
  • Buzzer +(0 .. 4000),例如 buzzer2100
  • `输出+ [E | F | G | H] + [上|高|关|低]

变量

  • Buzzer =(0..10000)
  • [红色|绿色|黄色] =(0 | 1)
  • 输出+ [E | F | G | H] =(0 | 1)

输入 A ,B,C,D和红色大按钮作为传感器变量提供,所有变量均具有可能的值(0/1)。电机和传感器/gpio-pibrella **中有一个演示。

Explorer HAT Pro

该板在驱动方面更具挑战性,因为它具有通过 GPIO 连接的部件和通过 I2C 连接的部件:

  • 四个 LED
  • 四个 5V 输出连接器
  • 四个缓冲输入接口
  • 两个 H 桥电机驱动器
  • 四个模拟输入
  • 四个电容输入垫

要使用该板,请将" AddOn"设置为" ExplorerHAT"。

支持的命令

  • `led + led number(1 .. 3)+ [on |高|关|低]
  • `输出+输入数字(1 .. 3)+ [on |高|关|低]
  • 马达+马达编号(1 | 2)+速度+(0..100)-马达速度设置为百分比,例如motor1速度 42

它们具有匹配的变量形式:

  • led + led number =(0 | 1)
  • 输出+ LED编号=(0 | 1)
  • 电机+电机编号(0 | 1)=(0..100)

变量

还有传感器变量"输入 1 "到"输入 4 ",其值为(0 | 1),四个 ADC 引脚(1..4)的值为+ -6.1V。如果信号来自连接到 Explorer HAT的 5V /GND的电位计,则范围是(0 ..〜 5 )。

传感器和电动机/gpio-ExplorerHAT 中的演示脚本要求您连接电动机,led,旋转电位计等,如[此图]所示(images/gpio-ExplorerHAT.png)

请注意,电容性输入焊盘尚无法使用,需要某种库级别的支持。

Sense HAT(在 Astro Pi中使用)

这个由基金会​​建造的电路板提供了一系列异常传感器和大型 8 x 8 RGB LED阵列。

传感器测量:

  • 温度
  • 湿度
  • 压力
  • 加速度计/陀螺仪
  • 磁力计/罗盘
  • 左/右/上/下/返回的迷你操纵杆动作要使用该板,请将" AddOn"设置为" SenseHAT"。

支持的命令

  • `clearleds':将所有 LED 设置为背景色
  • ledbackground + colourledforeground + colour:设置要使用的字符串和图形命令的背景和前景色。使用以下其中一种指定颜色: +清单中的名称红色青色蓝色灰色黑色白色绿色棕色橙色黄色洋红色淡红色浅褐色浅红色淡蓝色浅黄色深灰色浅蓝色...例如ledforegroundcyan +一个 HTML 样式的六位十六进制数字,以井号(例如#34F2A0)开头 +或介于 0 到 255 之间的数字的 RGB 三元组,例如42,234,17
  • ledscrollspeed + [每滚动步的延迟毫秒数]:一个字符串
  • ledscrollstring + [string]:使用预先设置的前景色和背景色滚动以下字符串,例如ledscrollstring HelloWorld
  • ledshowchar + [character]:仅显示具有先前设置的前景色和背景色的单个字符
  • ledbargraph + [8 digits 0..8]:制作一个最多八位的简单条形图,并带有预先设置的前景色和背景色,例如 ledbargraph20614590
  • `ledshowsprite + [sprite名称]:在 LED 上显示已命名的 sprite ,例如 ledshowsprite Sprite1。子画面位于 8 x 8阵列的中心,因此您可能很少看到大型子画面。
  • ledpixel + [x |在] + [0..7] + [y | @] + [0..7] + [颜色|颜色] + [颜色名称或代码为 ledbackground ]。例如:" ledpixelx4y3colourwhite"或" ledpixelat2 @ 7color42,231,97"或" ledpixelx3 @ 1colour#4A76A0"

变量

  • gyroX
  • gyroY
  • gyroZ
  • accelX
  • accelY
  • accelZ
  • compassX
  • compassY
  • compassZ
  • temp
  • 压力
  • 湿度

Pi-LITE

Pi-LITE板提供了一个简单的白色 LED 阵列,可以单独进行寻址,也可以将其视为滚动文本显示,条形图或 VU 表。它通过 GPIO 串行端口工作,并提出了一些有趣的挑战,尤其是如RaspberryPi-Spy的 Pi -LITE指令

要使用该板,请将" AddOn"设置为" PiLite"。

支持的命令

  • allon
  • alloff
  • scrollstringABCDEF以显示 ABCDEF 。
  • bargraph [1..14],[1-100]设置显示在 LED 的 14 列之一上的条形以表示百分比。
  • vumeter [1 | 2],[1…100]以 1980 年代的动臂箱图形均衡器的样式显示两列条形图。

RyanTeck,Pololu和 CamJam EduKit 3电机控制器

这些板可驱动两个直流电动机。

要使用它们,请将AddOn设置为:

  • RyanTeck板的RyanTek001
  • Pololu板的Pololu8835
  • CamJam板的EdukitMotorBoard

支持的命令

尽管它们的工作方式大不相同,但是它们共享相同的命令:

  • 电动机+电动机编号(1 | 2)+速度+值(-100..100)

变量

  • 马达+马达编号(0 | 1)=(-100..100)

附录:启用和禁用 GPIO 服务器

在正常使用中,您不需要启用 GPIO 服务器,因为默认情况下它已启用但已停止。我们可以通过在 init 文件中添加一行来更改此设置。在主目录中,我们可以有一个名为.scratch.ini的文件-初始点对于使其成为隐藏的 Unix 文件很重要。只需在文件中添加gpioserver = X行,其中 X 为:

  • 0-禁用 GPIO 服务器,阻止用户或加载的项目使用它
  • 1-启用 GPIO 服务器,但保持关闭状态,这是没有.scratch.ini文件时的默认设置
  • 2-启用和启动服务器,这在课堂上关于 GPIO 使用的课程中可能很有用

请注意,较旧的网格/网络服务器设置当前在"共享"菜单**下处于半隐藏状态:您必须在打开菜单的同时按住 Shift 键。它可以像以前一样正常工作,并且仍然可以连接到基于外部套接字的服务器。