与覆盆子piface板的python接口

pifaceio的Python项目详细描述


面部表情

这个包为PiFace Digital提供了一个python接口。 用于Raspberry Pi的外围I/O板。 APiFace Digital板提供8个数字输入和8个 数字输出。这个包允许python程序读取输入 并通过raspberry pi spi总线将输出写在板上。

较新的PiFace Digital 2板完全兼容 与原板等也受此包支持。

支持多个PiFace Digital板 或两个rpi spi总线芯片选择。这个pifaceio包是 专注于轮询实现的简单性和性能, 替代pifacedigitaliopiface(现在 已折旧的)python包,用于PiFace Digital 董事会。在我简单的轮询读写基准测试中,pifaceio执行 明显快于 pifacedigitalio

不支持中断。有关中断和 其他功能。

pifaceio包是用纯python代码实现的,只使用 python标准库,不使用外部第三方包,并且 与python版本2和3兼容。

安装

使用pip安装

pifaceio pypi package可从PyPi获得 您可以使用pip(带或不带virtualenv)安装它。如果 pip尚未安装运行:

sudo apt-get install python-pip

然后使用pip安装pifaceio包:

sudo pip install pifaceio

要在rpi上为spidev设备设置权限/组/udev等,请运行 包括脚本,然后重新启动。

sudo install-spidev.sh

Github的替代安装

在您的覆盆子皮上安装必要的软件包以进行构建等:

sudo apt-get install git python-setuptools

得到这个包裹:

git clone http://github.com/bulletmark/pifaceio

安装(也可以作为普通用户在virtualenv中执行此操作 当然):

sudo python ./setup.py install

要在rpi上为spidev设备设置权限/组/udev等,请运行 遵循包含的脚本,然后重新启动。

sudo ./install-spidev.sh

使用量

电路板地址、输入引脚和输出引脚总是从0开始编号。

一般来说,你从一次分配一个piface板开始 启动时的实例:

pf = pifaceio.PiFace()

默认为第一个像素板(0)。可选地接受参数0到7 最多8个Piface板地址。创建多个piface()实例 如果要并行使用多个板。

还有其他(很少需要的)选项来禁用输入拉取 向上电阻,并反转输入和输出位的极性。见 详细信息请参见pifaceio.py。

在每次投票时,例如每一秒,读取所有输入(即 单输入字节),带:

pf.read() # returns the input byte you can use directly if you prefer

然后,根据您的逻辑用以下命令读取和写入各个管脚:

in_val = pf.read_pin(pin_in)
..
pf.write_pin(pin_out, out_val)
..

最后,在处理结束时写入所有输出(即 单输出字节),带:

pf.write() # optionally, takes an output byte to write directly

注意read_pin()只是一个简单的方法 围绕从read()write_pin()只是一个方便的方法,包装一个位集/清除 在输出字节周围等待由write()写入。你没有 如果你只想阅读,就必须使用read_pin()write_pin(), 测试/操作,并直接写入8位输入和/或输出字节。 在这种情况下,您只需在 申请。

示例

简单的例子,只需将所有的piface 8输入反映到8个输出 每10毫秒,在默认的第一个Piface板上:

import pifaceio, time
pf = pifaceio.PiFace()

while True:
    pf.write(pf.read())
    time.sleep(.01)

同样的例子,但是在4个像素面板上进行:

import pifaceio, time
pifaces = [pifaceio.PiFace(n) for n in range(4)]

while True:
    for pf in pifaces:
        pf.write(pf.read())
    time.sleep(.01)

测试输入引脚0和1是否同时打开的简单示例, 如果为真,则设置输出引脚7:

import pifaceio
pf = pifaceio.PiFace()
...
# Fetch inputs (i.e. single byte)
pf.read()
first_two_inputs_on = pf.read_pin(0) and pf.read_pin(1)

# Now write that state to output pin 7
pf.write_pin(7, first_two_inputs_on)

# Do final (actual) write when all output pin states are set.
pf.write()

通过每10毫秒轻量级轮询模拟“中断”处理示例:

import pifaceio, time
pf = pifaceio.PiFace()

def process_change():
    'On any changed inputs, read inputs and write outputs'
    pf.write_pin(7, pf.read_pin(0) and pf.read_pin(1))

    # .. etc .. do logic using pf.read_pin() and pf.write_pin()

# Loop forever polling inputs ..
last = None
while True:
    data = pf.read()

    # Do processing only on change
    if last != data:
        last = data
        process_change()
        pf.write()        # note write() only writes if output changes

    time.sleep(.01)

Piface包向后兼容性

下面的pifaceapi可以兼容地工作,但是性能是 与读取和写入单个输入和 使用规范的新的和首选的pifaceio api输出字节 如上所述。怎么用?尽管如此,性能仍然是显著的 优于使用原始的piface包本身。

#import piface.pfio as pf (change this to next line)
import pifaceio as pf

# The following calls should be approximately compatible:
pf.init()
value = pf.digital_read(pin)
pf.digital_write(pin, value)
pf.deinit()

您也可以使用此兼容接口的多个板,例如。 如下所示,电路板可以从0到7。

value = pf.digital_read(pin, board)
pf.digital_write(pin, value, board)

升级

cd pifaceio  # source dir, as above
git pull
sudo python ./setup.py install

许可证

版权所有(c)2013 Mark Blakeney。这个程序在 GNU通用公共许可条款。 这个程序是免费软件:你可以重新发布和/或修改它 根据 自由软件基金会,许可证的第3版,或任何更高版本 版本。 这个程序的发布是希望它会有用,但是 没有任何保证;甚至没有 适销性或适合某一特定目的的适销性。见GNU将军 有关详细信息,请访问http://www.gnu.org/licenses/上的公共许可证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?