calcinai / phpi
Raspberry Pi GPIO的事件驱动绑定
Requires
- php: >=5.4.0
- calcinai/php-mmap: ^0.1
- react/event-loop: ^0.4.1
Requires (Dev)
- phpunit/phpunit: ^4.8
Suggests
- ext-mmap: Much more efficient native extension for accessing peripheral registers
- cboden/ratchet: For realtime, bidirectional control from a web browser
README
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相步进电机