跳转到主要内容

Pimoroni RGB编码轮的Python库

项目描述

RGB编码轮Breakout

Build Status Coverage Status PyPi Package Python Versions

RGB编码轮是一款用于ANO方向导航和滚动轮旋转编码器的Breakout。它使用Nuvoton MS51微控制器通过I2C读取编码器和方向按钮,并具有IS31FL3731 LED驱动器来控制围绕编码器的24个RGB LED环。

购买链接: https://shop.pimoroni.com/products/rgb-encoder-wheel-breakout

获取库

仅稳定库(无示例)来自PyPi

  • 只需运行 python3 -m pip install pimoroni-encoderwheel

在某些情况下,您可能需要使用以下命令安装pip: sudo apt install python3-pip

稳定库,包含来自GitHub的最新示例

  • git clone https://github.com/pimoroni/encoderwheel-python
  • cd encoderwheel-python
  • ./install.sh

来自GitHub的最新/开发库和示例

  • git clone https://github.com/pimoroni/encoderwheel-python
  • cd encoderwheel-python
  • ./install.sh --unstable

配置您的Raspberry Pi

启用I2C

为了使用编码器轮,您需要启用您的Raspberry Pi的I2C接口。这可以在终端中通过运行以下命令完成:

  • sudo raspi-config nonint do_i2c 0

或者,您可以通过以下方式启用I2C接口:

  • 运行 sudo raspi-config 并在 接口选项 下启用选项。
  • 偏好设置 菜单打开图形化 Raspberry Pi配置 应用程序。

启用I2C后,您可能需要重新启动系统以使更改生效。

示例和用法

有各种示例可以帮助您开始使用编码器轮。在您的Raspberry Pi上安装库后,这些示例可以在 ~/Pimoroni/pimoroni-encoderwheel/examples 目录中找到。

要进一步了解编码器轮,请参阅库参考 中的完整API。

删除库

仅卸载库(保留所有示例)

  • 只需运行 python3 -m pip uninstall pimoroni-encoderwheel

或者如果您已从Github获取了库

  • cd encoderwheel-python
  • ./uninstall.sh

参考

入门

要开始为您的编码器轮分线板编写代码,您需要将以下行添加到您的代码文件的开头。

from encoderwheel import EncoderWheel
wheel = EncoderWheel()

这将创建一个名为 wheelEncoderWheel 类,该类将在接下来的示例中使用。

读取按钮

编码器轮有五个按钮,包括向上、向下、向左、向右和中心。可以使用 .pressed(button) 函数读取这些按钮,该函数接受一个介于 04 之间的按钮编号。为了方便起见,可以使用以下常量来引用每个按钮:

  • UP = 0
  • DOWN = 1
  • LEFT = 2
  • RIGHT = 3
  • CENTRE = 4

例如,要读取中心按钮,您可以编写以下内容:

centre_state = wheel.pressed(CENTRE)

您还可以使用 NUM_BUTTONS 常量获取按钮的数量。

读取编码器

在编码器轮分线板的定向按钮中有一个旋转编码器,每转24个计数。

计数和角度

可以通过调用 .count() 读取当前计数。它也可以以编码器的 .revolutions() 次数或 .degrees().radians() 角度读取回。

请注意,计数存储为整数,如果它不断增加或减少,最终将在 +2147483647-2147483648 处回绕。这将导致 .revolutions()degrees().radians() 返回的值跳跃,需要您的代码进行处理。

实际上,这将需要非常长的时间才能达到。

计数增量

通常,您对编码器当前的确切计数不感兴趣,而是关注自上次检查以来计数是否已更改。可以通过定期调用 .delta() 来读取此更改。然后,可以使用代码中的检查来使用返回值,检查其值是否不为零。

步进和转动

有时,知道编码器的位置(以它是哪个步进以及发生了多少转动形式)可能很有用。可以通过调用 .step() 读取当前步进,该函数返回一个从 023 的值,并通过调用 .turn() 读取转动的次数。

这些函数与读取 .count().revolutions() 不同,因为它们使用单独的计数器,因此避免了这些函数遇到的回绕问题。

更改方向

可以通过在任何时候调用 .direction(REVERSED_DIR) 代码来更改编码器的计数方向。来自 ioexpander.common 模块的 REVERSED_DIR 常量。还有一个 NORMAL_DIR 常量,尽管这是默认值。

重置为零

有时需要将编码器的计数(及相关值)重置为零。这可以通过调用.zero()来完成。

LED灯

编码器轮扩展板具有24个RGB LED,围绕轮子排列成环形。这个数量与轮子上的步数相同,让您可以使用LED显示轮子的当前步数。

设置LED

您可以在环中的LED上设置RGB颜色空间或HSV(色调、饱和度、值)。HSV对于创建彩虹图案很有用。

RGB

设置第一个LED - 0 - 为紫色 255, 0, 255

wheel.set_rgb(0, 255, 0, 255)

HSV

设置第一个LED - 0 - 为红色 0.0

wheel.set_hsv(0, 0.0, 1.0, 1.0)

清除所有LED

要关闭所有LED,可以调用函数.clear()。这会遍历每个LED并将其RGB颜色设置为黑色,使它们不发光。

此功能在代码末尾很有用,可以关闭灯光,否则它们将继续显示最后给定的颜色。

显示

由于涉及大量的I2C通信,LED的变化不会立即应用。因此,为了在调用.set_rgb().set_hsv().clear()函数后显示LED已设置的值,需要调用特定的.show()

GPIO引脚

编码器轮边缘有三个备用GPIO引脚。这些可以用作数字输出、PWM输出、数字输入和模拟输入。

设置

要开始使用GPIO引脚,首先导入用于引用它们的方便常量之一(参见GPIO常量)。例如,要使用第一个GPIO引脚

from encoderwheel import GP7

然后您需要导入用于使用引脚模式的常量。这些位于编码器轮基于的ioexpander模块中。

# For input
from ioexpander import IN  # or IN_PU of a pull-up is wanted

# For output
from ioexpander import OUT

# For PWM
from ioexpander import PWM

# For ADC
from ioexpander import ADC

模式

导入适当的常量后,可以通过调用.gpio_pin_mode(gpio, mode)来设置GPIO引脚的模式。

wheel.gpio_pin_mode(GP7, <IN or IN_PU or OUT or PWM or ADC>)

也可以通过调用.gpio_pin_mode(gpio)来读取GPIO引脚的当前模式。

mode = wheel.gpio_pin_mode(GP7)

作为输入或ADC

可以通过调用.gpio_pin_value(gpio)来读取输入或ADC模式下GPIO引脚的当前值。

value = wheel.gpio_pin_value(GP7)

如果模式是数字的,值将是01。如果模式是模拟的,值将是从0.03.3的电压。

作为输出

可以通过调用.gpio_pin_value(gpio, value)来设置输出模式下GPIO引脚的当前值。

wheel.gpio_pin_value(GP7, value)

预期的值是01,或TrueFalse

作为PWM

GPIO引脚也可以设置为PWM输出。可以从ioexpander模块导入PWM常量,并将其传递给.gpio_pin_mode()函数。

然后可以通过调用.gpio_pwm_frequency()来配置PWM信号的频率,该函数接受一个频率(以Hz为单位)。它返回周期,应用于设置占空比。

最后,可以通过调用.gpio_pin_value()并提供一个介于0和周期之间的值来设置PWM信号的占空比。

以下是将GPIO引脚设置为输出25KHz信号并具有50%占空比的示例

from ioexpander import PWM
from encoderwheel import EncoderWheel, GP7

# Initialise EncoderWheel
wheel = EncoderWheel()

# Setup the gpio pin as a PWM output
wheel.gpio_pin_mode(GP7, PWM)

# Set the gpio pin's frequency to 25KHz, and record the cycle period
period = wheel.gpio_pwm_frequency(25000)

# Output a 50% duty cycle square wave
wheel.gpio_pin_value(GP7, int(period * 0.5))

延迟加载

默认情况下,GPIO引脚频率或值的更改会立即应用。但是,有时可能不想这样做,而是希望所有引脚同时接收更新参数,无论计算更新的代码运行了多长时间。

为此,.gpio_pwm_frequency().gpio_pin_value()包含一个可选参数load,默认为True。为了避免这种“加载”,在相关的函数调用中包含load=False。然后最后一个调用可以包含load=True,或者可以调用特定的.gpio_pwm_load()

此外,任何执行负载的函数,包括 .gpio_pwm_load() 函数,都可以设置等待直到新的PWM值通过引脚发送出去。默认情况下此功能是禁用的,但可以通过在相关函数调用中包含 wait_for_load=True 来启用。

限制

所有编码器轮的PWM输出共享相同的定时参数。这意味着 GP7、GP8 和 GP9 分享相同的频率。如果更改其中一个的频率,请注意这一点,因为其他设备不会自动知道更改,从而可能导致意外的占空比输出。

函数参考

以下是 EncoderWheel 类上可用的函数的完整列表

EncoderWheel(ioe_address=0x13, led_address=0x77, interrupt_timeout=1.0, interrupt_pin=None, skip_chip_id_check=False)
set_ioe_address(address)
get_interrupt_flag()
clear_interrupt_flag()
pressed(button)
count()
delta()
step()
turn()
zero()
revolutions()
degrees()
radians()
direction()
direction(direction)
set_rgb(index, r, g, b)
set_hsv(index, h, s=1.0, v=1.0)
clear()
show()
gpio_pin_mode(gpio)
gpio_pin_mode(gpio, mode)
gpio_pin_value(gpio)
gpio_pin_value(gpio, value, load=True, wait_for_load=False)
gpio_pwm_load(wait_for_load=True)
gpio_pwm_frequency(frequency, load=True, wait_for_load=True)

常量参考

以下是 encoderwheel 模块上的常量的完整列表

地址常量

  • DEFAULT_IOE_I2C_ADDR = 0x13
  • DEFAULT_LED_I2C_ADDR = 0x77
  • ALTERNATE_LED_I2C_ADDR = 0x74

按钮常量

  • UP = 0
  • DOWN = 1
  • LEFT = 2
  • RIGHT = 3
  • CENTRE = 4

GPIO常量

  • GP7 = 7
  • GP8 = 8
  • GP9 = 9
  • GPIOS = (7, 8, 9)

计数常量

  • NUM_LEDS = 24
  • NUM_BUTTONS = 5
  • NUM_GPIOS = 3

0.0.1

  • 初始发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

pimoroni_encoderwheel-0.0.1.tar.gz (25.5 kB 查看散列)

上传时间

构建分发

pimoroni_encoderwheel-0.0.1-py3-none-any.whl (18.4 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面