Réalisation 01

Projet Abeille : interrupteur connecté à planificateur

Dans le cadre de mon alternance, mon tuteur m’a proposé le développement d’un interrupteur connecté doté d’un planificateur. Ce projet vise à répondre à la demande croissante d’objets connectés dans la vie quotidienne : l’interrupteur est conçu pour faciliter la gestion des appareils électriques, permettant ainsi une meilleure économie d’énergie et une optimisation de l’utilisation des ressources.

Présentation de la réalisation

Dans le cadre de mon alternance, mon tuteur m’a proposé le développement d’un interrupteur connecté doté d’un planificateur. Ce projet vise à répondre à la demande croissante d’objets connectés dans la vie quotidienne : l’interrupteur est conçu pour faciliter la gestion des appareils électriques, permettant ainsi une meilleure économie d’énergie et une optimisation de l’utilisation des ressources.

Ce dispositif s’aligne avec les objectifs de la loi « Abeille », qui vise à promouvoir un usage responsable des technologies dans les écoles. Le planificateur intégré permet aux enseignants et au personnel administratif de programmer à l’avance les heures d’activation et de désactivation des équipements, favorisant un environnement d’apprentissage plus sain et une réduction de l’exposition aux champs électromagnétiques pendant les heures creuses. Cette initiative s’inscrit dans une démarche à la fois éco-responsable et éducative, au service de la santé et du bien-être des élèves comme de la préservation de l’environnement.

L’accent a été mis sur la simplicité d’utilisation, la fiabilité et la sécurité, afin de garantir une intégration sans faille dans le quotidien des établissements scolaires. Il s’agissait par ailleurs d’un produit destiné à être commercialisé par l’entreprise.

Introduction et objectifs

Le projet consiste à développer un objet connecté multifonctions. Cet objet a pour but d’effectuer diverses actions via un système de planification avancé, de garantir la sécurité des utilisateurs grâce à un système d’authentification et d’assurer une utilisation flexible, que l’utilisateur soit connecté à Internet ou non.

L’objectif de ce projet est triple :

  • Polyvalence : créer un objet capable de répondre à une multitude de besoins, réduisant ainsi la nécessité de plusieurs appareils distincts.
  • Accessibilité : l’objet est conçu pour être utilisé aussi bien localement qu’à distance, ce qui offre une plus grande flexibilité et une réelle commodité pour l’utilisateur.
  • Interopérabilité : grâce à une API intégrée, l’objet peut interagir avec d’autres appareils connectés ou sites web, améliorant ainsi sa polyvalence et son utilité.

Contexte humain

Le projet m’a été confié par mon tuteur au sein de l’entreprise Alcante, où je travaillais en alternance. J’en étais le seul développeur : j’ai conçu et déployé la solution de bout en bout. L’entreprise est composée de deux personnes :

  • Jorge Beja, mon superviseur durant l’alternance, dirigeant et technicien de l’entreprise, qui effectue les installations de domotique et s’occupe en partie de l’informatique de l’entreprise ;
  • Isabelle Saraiva, secrétaire, qui gère les répondeurs professionnels, les commandes clients pour l’installation de la domotique et la création de répondeurs, et assure en partie la comptabilité de l’entreprise.

Contexte technique

La réalisation de ce projet nécessitait un environnement backend solide et un matériel adapté. Le choix de la carte de programmation s’est porté sur la wt32-eth01 v1.4. Elle dispose d’un port Ethernet, qui lui confère une connectivité réseau filaire stable, complétant la puce Wi-Fi intégrée : on bénéficie ainsi d’une flexibilité entre connexions filaire et sans fil.

La carte est équipée d’un processeur double-cœur, capable d’exécuter deux tâches en parallèle, ce qui améliore la vitesse et l’efficacité de traitement des données. Avec 364 Kio de SRAM et 4 Mo de mémoire flash répartie en différentes partitions, elle offre suffisamment d’espace pour stocker et gérer les données de manière efficace.

Une caractéristique clé du projet est l’utilisation des différentes entrées/sorties (E/S) de la carte pour effectuer diverses actions — par exemple allumer ou éteindre une LED. Le dispositif fait en outre office de serveur web, le site étant stocké dans l’une des partitions de la mémoire flash, dans une limite de 150 Ko afin de préserver l’espace de stockage.

Pour garantir l’accès à distance à l’objet, un serveur web externe (alcante.eu) a été mis à disposition. La difficulté majeure consistait à relier, via le protocole SSH, le serveur web local de l’objet au serveur web externe, et ce pour chaque client.

Pour la programmation de la carte, j’ai retenu le langage C++ et la plateforme PlatformIO, une extension de Visual Studio Code. Le C++ est largement utilisé dans le développement de systèmes embarqués et d’objets connectés ; il offre un contrôle direct et précis sur le matériel, un aspect essentiel puisque l’objet interagit avec divers autres dispositifs. Il est de plus proche du langage utilisé pour Arduino, une référence dans le domaine des objets connectés.

PlatformIO a été choisie pour sa flexibilité et son efficacité. Compatible avec plus de 750 cartes de développement — dont la wt32-eth01 v1.4 — et plus de 35 frameworks, elle permet de compiler le code C++ directement dans l’IDE et de gérer très simplement les dépendances. Son interface intuitive facilite la mise en place et la gestion de l’environnement de développement.

Le protocole SSH (Secure Shell) est un élément incontournable du projet : il établit une connexion sécurisée entre le serveur local de l’objet et le serveur distant. SSH fait voyager les données de manière chiffrée entre deux systèmes ; au-delà de la sécurité, il facilite le contrôle à distance, permettant d’accéder au serveur local de l’objet depuis n’importe quel emplacement disposant d’une connexion Internet.

SSH permet également la redirection de port, fonctionnalité exploitée pour relier le serveur local au serveur distant en ouvrant des canaux de communication sécurisés entre les deux systèmes. Grâce à la bibliothèque libssh, compatible avec l’ESP32 et avec OpenSSH, j’ai pu créer une fonction de reverse SSH transmettant les données du client vers le serveur web de l’ESP32.

API PHP

Une API écrite en PHP permet à l’objet d’accéder à la base de données hébergée sur alcante.eu. L’ESP32 utilise une clé API unique et une requête HTTP pour communiquer avec cette API. Fondée sur l’architecture REST, couramment utilisée pour les interactions API, l’API PHP effectue des requêtes SQL pour interagir avec la base de données.

L’un de ses rôles principaux est d’attribuer un identifiant unique lors de la première configuration de l’ESP32 : l’API interroge la base pour trouver un identifiant unique et non utilisé, qu’elle renvoie ensuite à l’objet. Chaque appareil dispose ainsi d’un identifiant unique, indispensable au suivi et à la gestion des appareils du réseau. L’API PHP agit comme un pont entre la wt32-eth01 et la base de données, garantissant une interaction efficace et sécurisée.

MySQL et phpMyAdmin

La base de données MySQL et l’outil de gestion phpMyAdmin assurent le stockage et la gestion des informations. MySQL, système de gestion de bases de données relationnelles très répandu, stocke les identifiants uniques de chaque appareil. Ces identifiants garantissent qu’un appareil peut être identifié et joint de manière unique, même lorsque l’utilisateur n’est pas sur le même réseau local : avec l’identifiant en sous-domaine du nom de domaine alcante.eu, l’utilisateur accède à son appareil via une adresse du type identifiant_unique.alcante.eu.

MySQL est un système éprouvé, stable et performant, compatible avec de nombreux langages dont le PHP utilisé par l’API du projet, ce qui permet une intégration fluide. phpMyAdmin, application web gratuite offrant une interface graphique pour MySQL, permet de visualiser, créer, modifier et supprimer bases, tables et enregistrements, d’exécuter des requêtes SQL, d’importer et exporter des données et de gérer les utilisateurs et les permissions.

HTML, CSS et JavaScript

HTML, CSS et JavaScript forment les trois piliers du développement web. HTML décrit la structure et le contenu de la page via un jeu de balises ; il est idéal pour les objets connectés car largement supporté par tous les navigateurs, quelle que soit la plateforme, et, étant un langage de balisage, il consomme peu de mémoire.

CSS décrit l’apparence des pages (couleurs, polices, espacements) et permet de créer une interface attrayante et facile à utiliser. JavaScript ajoute l’interactivité : il fait réagir la page aux actions de l’utilisateur (clics, saisie clavier, navigation) et peut, dans le contexte d’un objet connecté, contrôler son comportement en réponse à ces actions. Ensemble, ces trois langages permettent de concevoir des interfaces interactives et attrayantes, bien documentées et peu gourmandes en mémoire — un choix idéal pour le web embarqué.

API de l’ESP32

L’API occupe une place centrale dans la communication entre l’ESP32 et les autres objets connectés ou sites web. Fondée sur l’architecture REST, elle permet des échanges de données structurés et efficaces en s’appuyant sur les méthodes HTTP standard (GET, POST, PUT, DELETE), intuitives et largement reconnues, ce qui assure une compatibilité large et une facilité d’intégration.

L’API s’appuie sur des variables prédéfinies pour structurer les requêtes de manière uniforme, ce qui facilite la compréhension, la maintenance et l’évolution du code, tout en renforçant la sécurité et l’intégrité des données puisque seules les requêtes au format attendu sont acceptées. Elle offre par ailleurs une abstraction entre l’ESP32 et les entités qui l’utilisent : celles-ci n’ont pas besoin de connaître les détails d’implémentation et se contentent d’envoyer des requêtes via l’API, qui joue le rôle d’intermédiaire.

L’enjeu

Dans le paysage actuel de la domotique, on trouve des prises connectées proposées par des marques reconnues comme Legrand, Amazon ou Philips. Fonctionnels et populaires, ces produits présentent toutefois des limites au regard des exigences du projet. La plupart dépendent de services cloud pour fonctionner, ce qui pose des questions de dépendance à une connexion Internet constante et de sécurité des données. Ils n’intègrent généralement pas de système de planification, et sont le plus souvent pilotés via une application mobile.

L’enjeu était donc de proposer une alternative : un objet reposant sur une interface web intuitive plutôt que sur une application, offrant une plus grande flexibilité et mieux adaptée aux besoins administratifs des établissements scolaires, avec une gestion centralisée et planifiée des équipements électriques. Le tout devait s’inscrire dans la démarche éco-responsable de la loi « Abeille » et fonctionner aussi bien en ligne qu’hors ligne, ce qui exigeait un équilibre délicat entre stockage local et connectivité, ainsi qu’une liaison fiable entre l’objet et un serveur web externe.

Les risques

Le principal risque était d’ordre sécuritaire. Le dispositif étant destiné à un environnement scolaire, il fallait à la fois garantir que les enfants ne soient pas exposés inutilement au Wi-Fi, empêcher que l’objet soit accessible à n’importe qui, et prévenir toute faille — en particulier au niveau de la base de données et de l’interface web.

Mes veilles technologiques m’ont amené à intégrer plusieurs règles fondamentales de sécurité des bases de données en contexte PHP : requêtes préparées avec placeholders pour contrer les injections SQL, validation et assainissement systématiques des entrées, contrôle d’accès robuste (authentification solide, chiffrement des sessions, droits limités selon les rôles), hachage des mots de passe avec des algorithmes tels que bcrypt ou Argon2, configuration sécurisée du serveur de base de données et chiffrement des données sensibles.

J’ai également veillé à ce que la base de données ne soit pas directement accessible depuis Internet, à sécuriser les API et interfaces web, à maintenir les systèmes à jour, à conserver des journaux d’accès et à prévoir des sauvegardes régulières ainsi que des plans de récupération en cas de compromission.

C’est en partie pour ces raisons que je n’ai pas retenu AWS : cette solution aurait rendu le projet dépendant d’un service externe et aurait complexifié la configuration appareil par appareil. Je lui ai préféré une architecture reposant sur un serveur distant et une liaison sécurisée par tunnel SSH, mieux maîtrisée et mieux adaptée aux besoins.

Les étapes

Le projet s’est déroulé sur une durée d’environ un an, selon les étapes suivantes :

  • Rédaction du cahier des charges (environ une semaine) et choix du matériel ;
  • Développement proprement dit (environ neuf mois) : tests d’une solution hébergée sur AWS, finalement abandonnée ; mise en place du serveur distant et du reverse SSH ; développement de l’API et de la base de données ; conception de l’interface web et du planificateur ; sécurisation de l’ensemble ;
  • Phase de tests (environ deux mois). Le projet n’a pas fait l’objet d’une mise en service.

Méthodologie de suivi

La méthodologie adoptée pour le suivi de ce projet s’inspire des principes de l’agilité, notamment du modèle Scrum, dans une version simplifiée. Le processus s’est déroulé de manière itérative et incrémentale. Chaque cycle commençait par une réunion avec mon maître d’alternance, au cours de laquelle nous discutions d’une nouvelle fonctionnalité à développer. Je me chargeais ensuite de la concevoir et de l’implémenter, puis de la tester pour m’assurer qu’elle correspondait aux attentes définies. Si la fonctionnalité était conforme, elle était intégrée définitivement au projet, sous réserve de la validation de mon maître d’alternance, qui jouait un rôle proche de celui d’un product owner. Dans le cas contraire, des ajustements étaient effectués avant une nouvelle validation. Ce processus se répétait pour chaque fonctionnalité, garantissant un développement progressif et contrôlé, tout en permettant d’intégrer rapidement les retours et de s’adapter aux besoins.

Gestion du code source et traçabilité

Pour la réalisation de ce projet, j’ai assumé le rôle de développeur principal. Il n’était donc pas nécessaire de recourir à des outils de collaboration entre développeurs, puisque personne d’autre ne travaillait simultanément sur le même code. Il était en revanche impératif de pouvoir enregistrer et suivre mon travail sur le serveur de l’entreprise, à la fois pour assurer une traçabilité tout au long du projet et pour faciliter de futures modifications par d’autres développeurs.

J’ai choisi de créer un dépôt Git sur le serveur Alcante. Cela me permettait de conserver une copie sécurisée du projet sur un serveur distant, tout en facilitant la gestion des versions du code et le suivi des modifications. Après avoir initialisé le dépôt (git init) et l’avoir configuré (dépôt distant et identifiants d’accès), j’ai réalisé un premier commit puis un push pour envoyer les fichiers sur le serveur. J’ai ensuite utilisé différentes branches pour développer plusieurs fonctionnalités en parallèle sans affecter le code principal, en effectuant des commits et des pushs réguliers, chacun documenté de manière détaillée pour faciliter la compréhension du code par de futurs développeurs. Cette méthode a assuré la sauvegarde régulière et la traçabilité de mon travail, tout en posant les bases d’une collaboration efficace à l’avenir.

Les acteurs

Trois types d’acteurs sont intervenus sur ce projet :

  • Moi-même, en tant que concepteur et développeur unique : j’ai pris en charge l’intégralité de la réalisation, de la réflexion technique jusqu’aux tests ;
  • Jorge Beja, mon tuteur, à l’origine de la commande et de la validation des orientations du projet ;
  • Les établissements scolaires, clients et utilisateurs finaux visés par le produit.

Les résultats

L’ensemble des fonctionnalités visées a fonctionné, en particulier la planification, sur laquelle j’ai passé beaucoup de temps à concevoir et affiner l’algorithme : c’est la partie la plus aboutie et celle dont je suis le plus fier. L’interface web, la gestion des identifiants uniques via la base de données et la liste de bannissement destinée à sécuriser la page de connexion étaient également opérationnelles.

Le produit n’a toutefois pas été commercialisé : je n’ai pas eu le temps de finaliser la phase de tests, et la partie SSH ne fonctionnait pas encore de manière pleinement fiable — je l’ai d’ailleurs améliorée par la suite sur d’autres projets. À ce stade, le projet existe donc sous la forme d’une démonstration fonctionnelle.

Principaux éléments de preuve

  • Base MySQL structurée et API PHP assurant l’attribution et le stockage d’un identifiant propre à chaque appareil.
  • Serveur web embarqué optimisé pour tenir dans 150 Ko et mécanisme de mise à jour du firmware à distance.
  • Accès distant validé en environnement de test avec NGINX et reverse SSH, accompagné d’un déploiement automatisé en SCP.
  • Fonctionnement du planificateur contrôlé par des tests unitaires, après validation des maquettes de l’interface.

Les lendemains du projet

Le projet a été repris plus tard par l’entreprise, notamment pour retravailler la partie SSH et moderniser l’interface. La planification, partie la plus aboutie et celle dont j’étais le plus fier, a constitué une base solide pour ces développements ultérieurs.

Mon regard critique

Avec le recul, deux choix auraient mérité d’être mieux préparés. D’abord la partie SSH : je n’avais pas encore bien compris comment implémenter correctement ce protocole sur une carte embarquée, ce qui explique les difficultés rencontrées ; une étude plus approfondie en amont m’aurait fait gagner du temps. Ensuite le choix du matériel : la carte retenue manquait de mémoire, ce qui m’a empêché de développer davantage le site web. Une carte disposant de plus de mémoire aurait été un meilleur choix.

Ce projet m’a néanmoins beaucoup appris. J’ai notamment découvert le développement avec une date limite et la manière de mener un projet de développement d’envergure de bout en bout. Il m’a permis d’approcher le monde de l’Internet des objets, qui m’a beaucoup intéressé, au point d’en faire l’un de mes loisirs autour des plateformes Arduino et Raspberry Pi.

Plus largement, cette année d’alternance a été très enrichissante professionnellement. J’ai pu mettre en pratique les connaissances acquises en formation, en consolider certaines et en acquérir de nouvelles au contact de technologies que je ne connaissais pas. Rapidement intégré dans l’entreprise, je me suis senti réellement impliqué dans la création du projet, ce qui m’a encouragé à faire des propositions et à donner mon avis sur les tâches à développer. Cette expérience m’a conforté dans mon choix de voie professionnelle et m’a donné confiance pour la suite de mon parcours.

Compétences mobilisées

Les compétences mises en œuvre dans cette réalisation.