Pourquoi PHP dans le monde du "hardware" ? Brisons les stéréotypes
\n\nQuand on entend "développement embarqué", la première chose qui vient à l'esprit, c'est le C, l'assembleur, peut-être MicroPython. PHP ? Un langage pour le web qui tourne sur un serveur et génère du HTML. Quel rapport avec les microcontrôleurs, les capteurs et les firmwares ?
\n\nEn réalité, le lien est très direct. PHP a depuis longtemps dépassé le cadre du "langage de script pour forums". Les interpréteurs modernes (à partir de PHP 7+) peuvent fonctionner sur des architectures ARM, et il existe plusieurs solutions intéressantes pour l'embarqué. Cet article n'est pas un rapport académique, mais un guide pratique sur la façon dont PHP peut devenir votre allié dans le monde des systèmes embarqués. Nous allons analyser des cas concrets, écrire du code et voir où c'est vraiment utile.
\n\nQuand PHP est-il un choix judicieux pour l'embarqué ?
\n\nNe confondez pas "microcontrôleur avec 2 Ko de RAM" et "ordinateur monocarte sous Linux". PHP ne fonctionnera pas sur un ATmega328P (Arduino Uno) – pour cela, il faut du C/C++. Mais si votre appareil fonctionne sous :
\n- \n
- ESP32 (ESP-IDF ou esp8266 avec RTOS) ; \n
- Raspberry Pi (ou équivalents sous Allwinner, Rockchip) ; \n
- Routeurs OpenWrt avec MIPS/ARM ; \n
- Contrôleurs industriels sous Linux. \n
…alors PHP peut devenir le "liant" idéal entre votre matériel et le monde extérieur. Surtout si vous devez rapidement créer une interface web pour piloter un appareil, analyser des données de capteurs ou les envoyer dans le cloud.
\n\nComment exécuter PHP sur un microcontrôleur ? Les options concrètes
\n\nIl existe deux approches principales, et nous allons les examiner avec des exemples de code.
\n\n1. PHP sur ESP32 avec ESP-IDF (PHP natif)
\nOui, oui, il existe des projets qui portent l'interpréteur PHP sur des microcontrôleurs bare-metal. Le plus connu est PHP for ESP32 (un fork expérimental). Une version allégée du langage, sans multithreading, mais avec la syntaxe de base, les tableaux, les chaînes de caractères et le GPIO.
\n\nExemple : faire clignoter une LED avec PHP sur ESP32
\n<?php\n// On inclut la bibliothèque pour gérer les broches\nrequire "gpio.php";\n\n// On configure GPIO2 (LED intégrée sur de nombreux ESP32) en sortie\n$pin = new GPIO(2, GPIO::OUTPUT);\n\nwhile (true) {\n $pin->write(GPIO::HIGH);\n delay(1000); // 1 seconde\n $pin->write(GPIO::LOW);\n delay(1000);\n}\n?>\nCe code vous semble familier, non ? Ce n'est pas une blague : un tel projet existe sur les dépôts GitHub. Bien sûr, les performances sont inférieures à celles du C, mais pour le prototypage, c'est excellent.
\n\n2. PHP comme "couche serveur" sur des SBC compatibles Linux
\nC'est le scénario le plus pratique. Vous prenez un Raspberry Pi ou un Orange Pi, vous installez PHP standard (par exemple, php8.3-cli) et vous l'utilisez pour :
- \n
- Lire des données depuis le GPIO via
gpiodouwiringPi; \n - Travailler avec des capteurs I2C/SPI (température, humidité, pression) ; \n
- Créer une API REST pour piloter l'appareil. \n
Exemple : lire la température d'un DHT22 avec PHP sur Raspberry Pi
\n<?php\n// On utilise une commande shell pour lire les données (via pigpio)\n$output = shell_exec('pigs in 17'); // GPIO17\nif ($output === false) {\n die("Erreur de lecture du capteur");\n}\n\n// On parse et on affiche\n$data = explode(" ", trim($output));\n$humidity = $data[0] / 10;\n$temperature = $data[1] / 10;\n\necho "Température : {$temperature}°C, Humidité : {$humidity}%\\n";\n?>\nOn peut aller plus loin et encapsuler cela dans un serveur web :
\n<?php\n// api.php - un endpoint REST simple\nheader('Content-Type: application/json');\n\n$temperature = readSensor(); // votre fonction\necho json_encode([\n 'status' => 'ok',\n 'temp' => $temperature,\n 'timestamp' => time()\n]);\n?>\nOn lance : php -S 0.0.0.0:8080 api.php – et vous avez une passerelle IoT prête !