Journal du projet #3 : le PHP et les bases de données
Une autre semaine et de nouvelles idées!
Dans mon article précédent sur mes aventures de constructeur d’une station météorologique pour le Musée de l’aviation et de l’espace du Canada, j’expliquais comment je suis parvenu à faire en sorte que les capteurs mesurent des données physiques (comme la température et l’humidité) et les transmettent au Raspberry Pi. Malheureusement, cette fonctionnalité n’a pas encore atteint le degré de perfectionnement souhaité. Bien que je puisse voir les données sur un écran, je suis encore incapable d’en faire quoi que ce soit. Je peux seulement voir les données s’afficher localement sur le moniteur série de l’Arduino. Le moniteur série est un écran qui affiche les données transmises de la carte Arduino au Raspberry Pi. Naturellement, l’étape suivante devrait consister à créer une méthode pour sauvegarder les données au fur et à mesure qu’elles sont reçues.
Ce que je connais du langage de programmation Python m’a amené à penser qu’il serait idéal pour ce projet. Il se trouve que la lecture des données qui circulent par transmission série est une chose assez courante dans tous les langages de programmation. Cela simplifie donc considérablement mon travail. Grâce aux ressources que j’ai trouvées en ligne et à mes connaissances en rédaction de fichiers en Python, j’ai créé un programme simple capable de lire des données, puis de les ajouter dans un simple fichier texte.
Bout de code qui collecte les données et qui les inscrit dans un fichier. Tout le code est disponible à l’adresse https://github.com/mebsim/WeatherStation
Toutefois, un fichier texte n’est pas utile si l’objectif ultime est de rendre les données disponibles en direct sur Internet. La meilleure façon de rendre les données disponibles sur Internet est de les stocker d’abord dans une base de données. Comme diverses méthodes permettent d’afficher les données de la base de données, je veux commencer par utiliser la plus élémentaire possible pour qu’elle puisse se prêter à de multiples usages.
Dans la communauté Raspberry Pi, l’utilisation de ce dernier comme miniserveur est populaire. Puisqu’il s’agit d’un mini-ordinateur et que le modèle que nous avons est compatible Wi-Fi, nous pouvons l’utiliser de diverses façons. J’ai donc décidé de créer un site Web interne (accessible uniquement sur le réseau du Musée) pour afficher les données provenant d’une base de données sur le Pi. Après avoir effectué quelques recherches, j’ai déterminé qu’un mélange de MySQL et de PHP: Hypertext Preprocessor (PHP) était la meilleure façon de procéder. PHP est une forme de langage de script qui s’exécute sur un serveur. Quant à MySQL, c’est un système de gestion de base de données très populaire.
Pour savoir comment m’y prendre pour la configuration, j’ai utilisé ce tutoriel, mais on en trouve de nombreux autres en ligne. En résumé, le tutoriel explique qu’on doit passer en revue, puis installer les ressources appropriées, faire un peu de programmation simple (voir le code ci-dessous) et exécuter le programme. Petite mise en garde : le tutoriel en question utilise une version obsolète de PHP pour récupérer les données de MySQL. Pour que ça fonctionne, j’ai dû mettre à jour le PHP à l’aide de la bibliothèque PDO. J’ai fait la mise à jour avec PDO à l’aide de ce site.
Mise à jour du code PHP que j’ai écrit pour collecter et afficher les données de la base de données.
La dernière chose qu’il me restait à faire était de mettre à jour le code qui sauvegarde les données afin de modifier l’emplacement de sauvegarde en le faisant passer d’un fichier à la base de données. Le tutoriel ci-dessus contenait également une méthode d’accès à la base de données. Je l’ai incorporée dans mon propre programme en lui apportant quelques modifications mineures, puisque le tutoriel était encore une fois un peu dépassé.
Code Python mis à jour qui enregistre les données dans la base de données. Ceci a été ajouté au code Python présenté ci-dessus.
Cela a pris un certain temps, mais j’ai fini par obtenir un petit serveur qui donne accès aux données à quiconque le désire. Il servira de base au développement.
La fin de mon stage au Musée approchant, je consacrerai maintenant davantage de temps à la conception physique qu’à la programmation. Ne ratez pas le prochain article sur notre défi suivant!
Tout le code qui a été écrit se trouve sur ma page GitHub : https://github.com/mebsim/WeatherStation