PHP y Embedded: un cóctel inesperado de hardware y scripts
Cuando escuchas «Desarrollo Embedded», normalmente piensas en C, C++ o el moderno Rust. PHP se asocia con sitios web, CMS y formularios pegajosos. Pero, ¿y si te digo que PHP puede controlar LEDs, consultar sensores de temperatura o incluso trabajar con el bus I2C? Sí, no es una broma. En la intersección de la web y los sistemas embebidos hay todo un nicho: Desarrollo Embedded en PHP.
Por supuesto, nadie propone escribir controladores para Linux en PHP. Se trata de otra cosa: cuando necesitas montar rápidamente una interfaz web para un hogar inteligente, un prototipo de dispositivo IoT o automatizar la recogida de datos de equipos industriales, PHP resulta ser el pegamento ideal. Funciona en Linux, lee/escribe fácilmente en archivos de dispositivo, y sus librerías permiten comunicarse con puertos COM, GPIO e incluso Arduino. Analicemos escenarios reales de uso de PHP en sistemas Embedded, con código y consejos prácticos.
¿Por qué PHP para Embedded? Mitos y realidad
El principal argumento de los detractores: «PHP es lento y no es adecuado para tiempo real». Y es cierto, si intentas controlar un motor paso a paso con precisión de microsegundos. Pero en la vida real, el 90% de las tareas Embedded no requieren tiempo real estricto. Recoger datos de un sensor una vez por segundo, registrar la temperatura, enviar un comando por UART... todo esto PHP lo hace fácilmente.
Ventajas del desarrollo Embedded con PHP:
- Inicio rápido — no necesitas aprender punteros y memoria en C. Simplemente abres un archivo y escribes.
- Interfaz web «lista para usar» — cualquier script PHP se puede envolver inmediatamente en HTML+CSS+JS.
- Comunidad enorme — hay librerías listas para trabajar con hardware (php-serial, php-gpio, php-i2c).
- Multiplataforma — el script funciona en Raspberry Pi, Orange Pi, PC normal con Linux.
También hay desventajas: PHP no es adecuado para sistemas de alta carga con interrupciones frecuentes. Pero para prototipado, hogar inteligente o monitorización industrial, es una excelente opción.
Trabajo con GPIO a través de PHP: encendemos LEDs
La forma más sencilla de «tocar» el hardware es controlar los pines GPIO en Raspberry Pi u Orange Pi. En Linux, los GPIO se presentan como archivos en /sys/class/gpio/. PHP puede abrirlos como archivos de texto normales. Aquí tienes un ejemplo de parpadeo de un LED en PHP:
<?php// Definimos el número del pin GPIO (por ejemplo, GPIO17 — pin físico 11 en RPi)$gpio_pin = 17;
// Exportamos el pin (si aún no está exportado)if (!file_exists("/sys/class/gpio/gpio$gpio_pin")) { file_put_contents("/sys/class/gpio/export", $gpio_pin);}
// Establecemos la dirección — salidafile_put_contents("/sys/class/gpio/gpio$gpio_pin/direction", "out");
// Parpadeamos 5 vecesfor ($i = 0; $i < 5; $i++) { // Encendemos (1) file_put_contents("/sys/class/gpio/gpio$gpio_pin/value", "1"); sleep(1); // Apagamos (0) file_put_contents("/sys/class/gpio/gpio$gpio_pin/value", "0"); sleep(1);}
// Liberamos el pinfile_put_contents("/sys/class/gpio/unexport", $gpio_pin);echo "LED blinking finished!";?>Este código es la base para cualquier control de dispositivos a través de PHP. Puedes añadir fácilmente la lectura de un botón (solo cambia direction a "in" y lee value). De esta manera, PHP se convierte en una herramienta completa para trabajar con señales discretas.
Uso de la librería php-gpio
Para no tener que escribir cada vez la exportación/desexportación, usa una librería ya preparada. Instálala a través de Composer:
composer require piwik/gpioEjemplo con la misma librería:
<?phprequire 'vendor/autoload.php';
use Piwik\\Gpio\\Gpio;
$gpio = new Gpio();$pin = $gpio->getPin(17);
// Configuramos como salida$pin->setDirection(Gpio::DIRECTION_OUT);
// Encendemos