Pimoroni RGB编码轮的Python库
项目描述
RGB编码轮Breakout
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()
这将创建一个名为 wheel
的 EncoderWheel
类,该类将在接下来的示例中使用。
读取按钮
编码器轮有五个按钮,包括向上、向下、向左、向右和中心。可以使用 .pressed(button)
函数读取这些按钮,该函数接受一个介于 0
和 4
之间的按钮编号。为了方便起见,可以使用以下常量来引用每个按钮:
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()
读取当前步进,该函数返回一个从 0
到 23
的值,并通过调用 .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)
如果模式是数字的,值将是0
或1
。如果模式是模拟的,值将是从0.0
到3.3
的电压。
作为输出
可以通过调用.gpio_pin_value(gpio, value)
来设置输出模式下GPIO引脚的当前值。
wheel.gpio_pin_value(GP7, value)
预期的值是0
或1
,或True
或False
。
作为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
- 初始发布
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。