calcinai/phpi

Raspberry Pi GPIO的事件驱动绑定

v0.3.3 2018-05-06 21:13 UTC

This package is auto-updated.

Last update: 2024-09-07 15:02:37 UTC


README

Build Status Latest Stable Version

Raspberry Pi GPIO的事件驱动绑定。支持A、A+、B、Brev2、B+、2B、3B、Compute Module和Pi Zero。

此库直接与外围寄存器交互(几乎),以实现最大功能和速度。有关mmap/dma的说明,请参阅注释。

由于PHP中没有mmap的能力,默认情况下,此功能已委托给python子进程。在复杂度方面,python已被保持在绝对最小(<25行),以允许在PHP级别上具有灵活性。

这意味着您必须同时安装python和PHP才能使其正常工作。 …sortof

还有一个本地PHP扩展,它可以用作python子进程的替代品,可以大大提高性能。我强烈建议使用它,尤其是在较弱的Pi上。

此库可以在没有启用内核驱动程序/sysfs等的情况下运行。

设置

使用composer

composer require calcinai/phpi

尽管可以将此库添加到自己的自动加载器中,但这样做并不推荐,因为您将无法控制依赖项。如果您之前没有使用过composer,我强烈建议您查看https://getcomposer.org.cn

使用方法

所有这些代码都是为在cli模式下运行而设计的,以root身份运行以允许内存访问。不建议尝试在同步模式下运行(例如在apache/nginx下),因为这会引入稳定性和安全问题。有关更多关于网络服务的详细信息,请参阅下面。

您可以从安装目录运行./bin/phpi info以测试您的安装并获得引脚状态的视觉显示。

板工厂

$board = \Calcinai\PHPi\Factory::create();

读取和设置引脚的最小示例

use Calcinai\PHPi\Pin\PinFunction;
use Calcinai\PHPi\Pin;

$pin = $board->getPin(17) //BCM pin number
             ->setFunction(PinFunction::INPUT)
             ->setPull(Pin::PULL_UP);

//Will be === to Pin::LEVEL_HIGH or Pin::LEVEL_LOW
var_dump($pin->getLevel());

$pin->setFunction(PinFunction::OUTPUT);
$pin->high();
$pin->low();

高级设备和事件

$button = new Button($board->getPin(17));
$led = new LED($board->getPin(18));

$button->on('press', [$led, 'on']);
$button->on('release', [$led, 'off']);

$board->getLoop()->run();

GPIO

GPIO(输入)是引脚对象的默认模式。可以通过使用->setFunction(PinFunction::x)方法访问备用功能。除非您确切知道自己在做什么,否则建议使用函数名称而不是ALT0..5,因为相当多都是保留的。还包括一些用于数字交互的有用类。使用默认的python-mmap,您可以在Pi 3上实现约20kHz的原始转换速度,使用本地扩展,则约为80kHz。

PWM

此库支持硬件PWM,并在一定程度上支持软PWM。由于此代码在react事件循环中运行,因此与端口交互不切实际,每次只能超过数百次/秒。

SPI

此库支持一些设备协议(MPC300x等)。使用默认的python-mmap,在CPU耗尽之前,它大约限制在3kB/s。使用本地扩展,您可以达到30kB/s以上的速度。

事件循环

将此项目基于react事件循环的原始原因之一是利用其他组件。一个很好的例子是websocket服务器;它将与此库无缝集成,以提供从任何现代浏览器与Pi的实时、双向、非轮询交互。

有关更多信息,请参阅phpi-websocket

外部设备

包含了与常见设备接口的辅助类,并且会定期添加更多。

  • 通用输入/输出
  • 按钮
  • LED灯
  • 继电器
  • ADC(MCP 3xxx系列)
  • H桥电机
  • 2相和4相步进电机