Статьи

Поддержка проектов Raspberry Pi с PHP

Raspberry Pi — это блестящий крошечный компьютер, который можно отключить с помощью кабеля micro USB. Самая последняя модель имеет WiFi, порт Ethernet, 4 порта USB и порт HDMI. Есть также слот для карты micro SD, куда и идет «жесткий диск».

Электроника изображение

Он способен работать с Raspbian Linux, который является дистрибутивом Linux на основе Debian. Это знакомит пользователей Ubuntu, которые могут просто sudo apt-get install

Как и на любом компьютере с Linux, вы можете установить на него PHP и создать веб-сайт — но мы можем сделать гораздо больше!

Оборудование

Во-первых, нам понадобится Raspberry Pi. Самая последняя модель имеет встроенный WiFi, что очень удобно для легкого доступа по SSH. Нам также понадобится электронное оборудование. Это действительно хорошая идея, чтобы получить стартовый набор, содержащий макет, перемычки, резисторы, светодиоды и кнопки. Вы можете купить такие комплекты на adafruit, а похожие пакеты можно найти гораздо дешевле на Amazon и eBay.

Настроить

На официальном сайте Raspberry Pi есть отличное краткое руководство, которое поможет вам начать работу. После того, как на вашем компьютере запущен Raspbian Linux, вы можете использовать эту команду для установки PHP:

 sudo apt-get install php5

В качестве альтернативы, установите PHP7. Это немного сложнее, но работает лучше. Это руководство объясняет это хорошо .

Штырьки ввода-вывода общего назначения (GPIO)

На углу платы Raspberry Pi находятся два ряда металлических контактов, к которым мы можем подключить электронные схемы. Некоторые контакты заземлены, некоторые 5 В, некоторые 3,3 В, и большинство из них являются выводами GPIO .

Карта контактов GPIO
Кредит: www.raspberrypi.org

Когда вывод GPIO сконфигурирован как выходной вывод, мы можем попросить Pi установить его напряжение высоким (3,3 В) или низким (0 В). Это позволяет нам включать и выключать вещи.

Когда вывод GPIO сконфигурирован как входной вывод, мы можем проверить, чтобы увидеть напряжение на этом выводе, а также определить, когда это напряжение изменяется. Это позволяет нам считывать датчики, а также обнаруживать такие вещи, как нажатия кнопок.

Есть еще много чего, для чего мы можем использовать эти контакты, например, связь через Serial, i2c или SPI — но пока это все, что нам нужно знать.

Начало работы с PiPHP

PiPHP: GPIO — это библиотека PHP, которая может быть установлена ​​через композитор, что позволяет вам управлять этими выводами GPIO. Вот пример того, как мы можем использовать библиотеку, чтобы несколько раз мигать светодиодом при обнаружении нажатия кнопки. На приведенной ниже схеме показано, как можно подключить светодиод к выводу 2 GPIO и кнопку к выводу 3 GPIO с помощью макета. Макет является многоразовой основой для изготовления электронных схем. Ряды связаны электронным способом, равно как и два рельса, которые охватывают длину доски на каждой из ее сторон. Мы соединяем первые два рельса с землей и 3,3 В контактами в Raspberry Pi.

Два резистора важны. Первый резистор (~ 220 Ом) ограничивает ток до светодиода. Второй резистор (~ 10 кОм) является подтягивающим резистором для кнопки.

Примечание: некоторые контакты на Raspberry Pi имеют внутренние подтягивающие резисторы, поэтому это не всегда требуется (но это не вредит).

Диаграмма макета

Вернемся к Raspberry Pi, создайте каталог проекта, а затем используйте composer для установки piphp/gpio

 composer require piphp/gpio

Если вы поместите файл ниже в директорию вашего проекта и затем выполните его ( php led-blink.php

 <?php // led-blink.php

require_once 'vendor/autoload.php';

use PiPHP\GPIO\GPIO;
use PiPHP\GPIO\Pin\InputPinInterface;
use PiPHP\GPIO\Pin\OutputPinInterface;

// This GPIO object can be used to retrieve pins and create interrupt watchers
$gpio = new GPIO();

// Configure pin 2 as an output pin and retrieve an object that we can use to change it
$ledPin = $gpio->getOutputPin(2);

// Configure pin 3 as an input pin and retrieve an object that we can use to observe it
$buttonPin = $gpio->getInputPin(3);

// Configure this pin to trigger interrupts when the voltage rises.
// ::EDGE_FALLING and ::EDGE_BOTH are also valid.
$buttonPin->setEdge(InputPinInterface::EDGE_RISING);

// Create an interrupt watcher (this is a type of event loop)
$interruptWatcher = $gpio->createWatcher();

// Register a callback for handling interrupts on the button pin
$interruptWatcher->register($buttonPin, function () use ($ledPin) {
    echo 'Blinking LED...' . PHP_EOL;

    // Toggle the value of the LED five times
    for ($i = 0; $i < 5; $i++) {
        $ledPin->setValue(OutputPinInterface::VALUE_HIGH);
        usleep(100000);
        $ledPin->setValue(OutputPinInterface::VALUE_LOW);
        usleep(100000);
    }

    // Returning false would cause the loop below to exit
    return true;
});

// Loop until an interrupt callback returns false, this code will iterate every 5 seconds
while ($interruptWatcher->watch(5000));

Идти дальше

Мы видели, как мы можем использовать PHP для реагирования на электронные входы и управления электронными выходами. Как только у нас появится это понимание, мы сможем все больше и больше рисковать с нашими входами и выходами, чтобы создавать все больше и больше потрясающих проектов.

Говоря лично, я получал огромное удовольствие, делая машину для напитков, используя датчик потока и насос для жидкости омывателя ветрового стекла.

Я использовал некоторую изящную электронику с транзистором TIP120, чтобы я мог контролировать более высокое напряжение и ток, которые нужны насосу от Raspberry Pi. Датчик потока выдает импульс после прохождения через него определенного объема жидкости. Все, что мне нужно было сделать, это подсчитать прерывания от датчика потока и затем выключить насос. Садовники среди нас могли бы использовать подобное устройство для автоматизации полива растений!

Есть какие-нибудь проекты Raspberry PI + PHP, которыми вы хотели бы поделиться? Дайте нам знать!