TP n°24 : Serveur Web
|
||
Noms : | ||
Centre d'intérêt : | CI 2 Instrumentation / Acquisition et restitution de grandeurs physiques | |
Classe : | Term Sti2d Sin | |
Id programme : | sin15, sin31 | |
Conditions : | Par 2 , durée 3 heures. | |
Matériel : | - un ordinateur; | |
Logiciel : | - nano - terminal de commande |
|
Document : |
I. Objectifs
- Mettre en place un serveur Php;
- Gérer les GPIO.
II. Gestion du wifi sur raspberry Pi 3
Mettre à jour Raspbian pour supporter le Wi-Fi:
sudo apt update sudo apt dist-upgrade
Lorsque l’opération sera terminée, il vous suffit de redémarrer votre Raspberry Pi.
sudo reboot
Connecter la Raspberry au WiFi via l’interface graphique
Si vous utilisez la Raspberry Pi avec une interface graphique, cette partie est faites pour vous.
L’icône réseau se situe en haut à droite de l’écran, à côté de l’horloge. Si vous passez par une connexion filaire, débranchez le câble Ethernet avant de continuer l’opération.
Une fois l’icône trouvé, cliquez sur celui-ci, une liste de box (plus précisément, leur SSID) va alors apparaître, il vous faudra trouver la votre, par exemple « sti2dsin ».
Par défaut, les box demande un mot de passe ou une clé de chiffrement, ainsi lorsque vous aurez sélectionné votre box, une popup vous demandera alors cette information, si besoin !
Une fois le mot de passe rentré, cliquez sur le bouton OK. La Raspberry va alors tenter d’établir la connexion, l’icône va alors changer au bleu ! Si la connexion est un succès, l’icône affichera la puissance du réseau !
Vous voilà maintenant avec une Raspberry Pi 3 connecté au réseau via le WiFi intégré !
Se connecter au Wi-Fi en ligne de commande
Si la connexion au Wi-Fi avec une interface graphique est très facile, c’est le plus souvent la connexion au Wi-Fi en ligne de commande qui pose problème.
Nous allons donc apprendre à utiliser la bonne vieille ligne de commande pour connecter la Raspberry Pi 3 au WiFi !
Tout d’abord, nous allons éditer le fichier wpa_supplicant.conf
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Rendez-vous à la fin du fichier et ajoutez la définition de votre box en suivant ce template :
network={ ssid="STI2D" psk="MotDePasseADemanderAuProfesseur" key_mgmt=WPA-PSK }
Remplacez nomDeLaBox
par le SSID de votre box internet et cléDeSécurité
par le mot de passe de votre box.
Enfin, si vous vous connectez à une box ouverte, non protégé par un mot de passe, vous n’aurez besoin que de renseigner le SSID.
Une fois que vous avez modifiez la configuration Wi-Fi, sauvegarder le fichier en faisant CTRL+O, puis quittez-le avec CTRL+X !
Votre Raspberry Pi 3 est maintenant configurer pour se connecter à internet via sa puce Wi-Fi. Il ne vous reste plus qu’à démarrer le Wi-Fi de la Raspberry Pi avec cette commande :
ifconfig wlan0
La Raspberry Pi n’arrives pas à se connecter au Wi-Fi
Si vous avez bien suivi toutes ces étapes et que vous avez bien fait toutes les configurations, votre Raspberry Pi devrait désormais réussir à se connecter au Wi-Fi.
Q1 : Donner la signification de l'acronyme SSID.
III. Créer un hotspot Wi-Fi (Point d'accès Wifi)
Par ailleurs, en bidouillant un peu dans les configurations, et si vous ajouter une deuxième interface Wi-Fi sur votre raspberry pi, vous pourrez également transformer votre hotspot en répéteur Wi-Fi, afin d’augmenter la portée de votre box !
Installer hostapd et son interface pour transformer votre raspberry pi en borne Wi-Fi
Une fois que vous avez installé Raspbian, la première chose a faire va être de brancher votre raspberry pi à votre box internet en utilisant le câble Ethernet, puis de prendre le contrôle de votre raspberry, soit directement avec un clavier/écran, soit par SSH, comme expliqué sur ce tutoriel.
Ceci fait, nous allons nous assurer que la connexion Wi-Fi de la raspberry reste disponible pour la création du hotspot. Dans ce but, nous allons simplement créer une copie du fichier de configuration permettant la connexion à une box, afin de le garder de côté, et vider le fichier principal.
Pour cela, accédez au terminal de la raspberry pi et lancez les commandes suivantes :
sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.sav sudo cp /dev/null /etc/wpa_supplicant/wpa_supplicant.conf
Maintenant que nous sommes sûr que l’interface Wi-Fi est disponible, il ne nous reste plus qu’à installer les différents logiciels permettant de faire de la raspberry pi un point d’accès.
Nous allons utiliser le logiciel hostapd, qui permet de fabriquer un point d’accès avec la raspberry pi. Et pour faciliter l’installation et l’administration de ce point d’accès, nous allons également installer une interface web qui nous permettra de contrôler notre hotspot, RaspAP (pour plus d’infos, allez lire la page Github du logiciel, https://github.com/billz/raspap-webgui).
Et la bonne nouvelle, c’est que pour faire tout ça nous n’aurons besoin de lancer qu’une seule commande :
wget -q https://git.io/voEUQ -O /tmp/raspap && bash /tmp/raspap
Une fois la commande lancée, vous n’avez plus qu’à répondre aux quelques questions qui vous seront posées, et l’installation de tous les composants va se faire toute seule.
Se connecter à votre hotspot Wi-Fi
Lorsque l’installation est terminée, la raspberry pi redémarre, et vous devriez voir apparaître un réseau « raspi-webgui » dans la liste des réseaux accessibles.
Si toutefois le réseau n’apparaît pas, trouvez l’IP de la raspberry pi, et connectez-vous dessus via votre navigateur web. Vous devriez arriver sur l’interface d’administration du hotspot, le mot de passe par défaut est indiqué sur la page github du logiciel. Une fois connecté, rendez-vous dans la partie « Configure Hotspot », et modifiez le champs « Wireless Mode », cela devrait résoudre le problème.
Une fois le réseau visible, il ne vous reste plus qu’à vous y connecter, le mot de passe par défaut est ChangeMe
.
Vous pouvez modifier ce mot de passe, le nom du réseau, et bien d’autres choses en vous connectant à l’interface d’administration de votre hotspot raspberry via votre navigateur internet, par défaut l’adresse devrait-être 10.3.141.1
.
Il ne vous reste plus qu’à configurer votre hotspot pour l’adapter à vos besoins.
V. Le Raspberry PI sur le réseau Ethernet
Le Raspberry PI possède un port Ethernet et peut être connecté à un réseau local (LAN) ainsi
qu’à Internet par le biais d’un routeur.
Il existe plusieurs paramétrages possibles concernant l’adresse IP du Raspberry PI.
Il est possible soit de laisser la gestion de l’adresse IP du Raspberry :
- Automatique (serveur DHCP du routeur). Adresse dynamique.
- Manuelle. Adresse statique.
A l’origine le RaspBerry est paramétré pour que la création de son adresse réseau (ip) se
fasse de façon dynamique (DHCP). Dans ce cas l’accès internet est automatique si le routeur
est relié au réseau local (LAN). Pour savoir si votre Raspberry est en DCHP il suffit de taper dans
l’invite de commande
sudo nano /etc/network/interfaces
Le contenu du fichier qui s’ouvre doit contenir "Iface eth0 inet dchp" .
Si ce n’est pas le cas il faut réécrire cette ligne et supprimer les IP fixes (voir procédure suivante). Puis CTRL+o
pour sauvegarder et CTRL+x pour quitter.
Choix d’une adresse IP fixe pour le réseau local (LAN):
Dans le cas où vous souhaitez paramétrer en statique l’adresse ip du Raspberry pour la bonne et simple raison que vous ne souhaitez pas qu’elle change de façon à la connaitre à tous moments, il faut modifier le réglage d’origine.
Lors de la construction d’un réseau local il est nécessaire d’une adresse réseau, d’un masque de sous-réseau, d’une adresse de passerelle (un routeur permettant communication entre 2 sous-
réseaux). Exemple avec notre réseau LAN classe C:
IP réseau : A completer
Masque : 255.255.240.0
Passerelle : A compléter
Choisissez une adresse IP qui ne soit utilisée par aucune autre machine du réseau local mais qui soit adaptée au LAN (le masque 255.255.240.0 implique que la partie haute de l’adresse est identique à tous les éléments du LAN (192.168.x.x), seule la partie basse permettra de les distinguer.
Par exemple 192.168.1.19.
Configuration de l’adresse statique(fixe) sur le Raspberry Pi
• Saisir sur l’invite de commande la ligne suivante afin d’ouvrir le contenu du fichier permettant
le paramétrage de l’adresse ip puis tapez sur « ENTREE »:
sudo nano /etc/network/interfaces
Le contenu du fichier apparait et on observe sur la 3ème ligne écrite apparaît que l’adresse ip du module ethernet est générée automatiquement par le serveur DCHP (routeur ou box).
• Modifiez ce fichier de façon à attribuer une adresse IP fixe (static). La ligne qui contient « iface
iface eth0 inet dhcp pour l’ethernet ou ajoutez les lignes suivantes pour le WIFI :
iface eth0 inet static |
WIFI (DHCP) ajoutez : allow-hotplug wlan0 |
Modifier le WIFI en statique remplacez : iface wlan0 inet dhcp par iface wlan0 inet static |
ATTENTION : Supprimer les 2 dernières lignes wpa roam wpa supplicant.conf et iface default inet dhcp pour le WIFI
Sauvegardez le fichier avec « Ctrl+o » puis valider en tapant sur « ENTREE » et fermez l’éditeur avec « Ctrl+x ». A ce stade le Raspberry est paramétré pour être reconnu sur le réseau LAN.
VI. Raspberry en serveur : Serveur Apache, Serveur Mysql
Le Raspberry peut être utilisé en serveur surtout si vous n’envisagez pas de nombreuses connexions simultanées. Il servira de serveur WEB avec la gestion d’une base de données.
Vous allez installer un serveur Apache afin de gérer un site dynamique (HTML, CSS, JavaScript, php) associé à un serveur MySql gérant les bases de données MySQL.
Pour installer cet ensemble il faut disposer de droits plus élevés. La première étape sera de définir le mot passe du super utilisateur "root" différent du simple utilisateur "pi" afin de pouvoir gérer facilement ce serveur. La procédure ci-dessous permet d’activer le compte super utilisateur "root" qui n’est pas activé lors de l’installation d’origine et ceci par sécurité.
Ce mot passe sera identique à celui utilisé dans phpMyadmin et MySQL pour simplifier sa mémorisation. Nous utiliserons pour nos besoins le mot de passe : azerty
• Tapez la commande suivante :
sudo passwd root
Entrez le mot de passe : azerty
On vous le demandera une 2eme fois et un message de confirmation apparaitra si les 2 entrées sont identiques
• Installer le serveur Apache en tapant la commande suivante:
sudo apt-get install apache2 php5 mysql-server phpmyadmin
Pendant l’installation il est demandé de confirmer, répondez o(OUI).
Apparait ensuite une fenêtre demandant un mot passe pour le super utilisateur du serveur MySql. Entrez pour simplifier le même de mot de passe que précédemment « azerty ».
Une fenêtre de confirmation s’ouvre. Retapez le même mot de passe et valider en allant sur « OK » avec la touche de tabulation.
Une nouvelle fenêtre s’affichera.
Sélectionnez "apache2"en tapant sur la barre espace puis avec la tabulation aller sur "ok" et valider.
L’installation se poursuit (5 à 10minutes), accepter en validant le o(oui) présélectionné.
Saisissez le mot passe de l’administrateur toujours identique aux précédents : azerty
Une fenêtre de confirmation s’ouvre, entrez à nouveau le même mot de passe et validez en allant sur "OK" avec la touche tabulation et attendre la fin de l’installation.
• Tester l’installation du serveur Apache:
Connectez un autre PC sur le réseau local (la carte réseau devra être paramétrée pour faire partie du LAN IP Réseau/Masque Sous-réseau/ IP Passerelle). Ce PC sera utilisé en client WEB qui à
partir d’un navigateur permettra d’accéder au serveur WEB du Raspberry.
Lors de l’installation du serveur Apache sur RaspBerry PI un fichier « index.html » est créé et ajouté, ce dernier contient le message texte « it works » suivi de 2 lignes (voir image ci-dessous).
Tapez dans la barre URL du navigateur client l’adresse IP du Raspberry pi défini lors du paramétrage du réseau local (Ex : 192.168.1.17). Une page devrait s’afficher avec le mot "it works" prouvant ainsi que le serveur fonctionne bien.
En indiquant l’adresse IP du Raspberry PI, une requête http est envoyée au serveur WEB du Raspberry PI qui recherche alors un fichier se nommant "index... " et l’exécute, ce dernier est de type html ou php (comme on le verra par la suite).
On aurait pu taper également dans la barre de l’url : adresse ip Rasp/index.html soit par exemple :
192.168.1.17/index.html ce qui aurait revenu au même.
• Tester l’installation du serveur MySql
Pour tester le serveur MySql il faut installer un site WEB associé à une base de données.
Pour cela on réutilisera le site météo et la base de données qui ont été créés lors des TP MySQL et PHP.
Dans un premier temps on recréera la base de données meteo dans laquelle on importera une table « mesure_pression » existante et contenant les valeurs datées de la pression atmosphérique.
Ensuite on importera le site WEB dans le Raspberry PI grâce au logiciel WINSCP en SSH (Secure SHell : Connexion Sécurisée à Distance permettant d’accéder aux fichiers et aux répertoires du RaspBerry PI par le réseau local à partir d’un autre PC).
Il suffira ensuite de tester à partir du navigateur client l’accès à distance au site installé sur le Raspberry PI ainsi qu’à la base de données.
* A partir du navigateur client (sur un autre PC) accéder à la page d’administration du serveur installé sur le Raspberry PI en tapant dans l’url « adresse IP/phpmyadmin » ou adresse IP est l’adresse de votre RaspBerry PI.
la page d’accès de phpMyAdmin doit s’afficher.
Entrez l’identifiant et le mot de passe
Utilisateur : root
Mot passe : azerty
S’il y a une erreur pour atteindre PHPMyAdmin. Repassez en root. Accédez au fichier apache2.conf avec l’éditeur nano:
sudo nano /etc/apache2/apache2.conf
Ajoutez à la fin du fichier :
# Include PHPMYADMIN
Include /etc/phpmyadmin/apache.conf
Sauvegarder (CTR+o) et sortir (CTR+x)
La page s’ouvre d’administration s’ouvre. Créez une base de données qui se nommera meteo.
Une fois créée la base de données (ici meteo) elle apparait dans la liste.
Cliquez sur « Vérifiez les privilèges » puis sur la page qui s’ouvrira.
Ajoutez un utilisateur avec les caractéristiques suivantes :
eleve (local host, mot de passe « 1234 » tous les privilèges, tout cocher)
Pour accéder à cette base avec un client extérieur par exemple une application mobile :
sudo service mysql stop
sudo nano /etc/mysql/my.cnf
Remplacer la ligne bind-address = 127.0.0.1 par ligne bind-address = 0.0.0.0 qui permet l’accès par n’importe quels client ayant une adresse IP valide d’interroger ce serveur.
Sauvegardez le fichier avec "Ctrl+o " puis valider en tapant sur "ENTREE" et fermez l’éditeur avec "Ctrl+x".
sudo service mysql restart
Afin de permettre l’accès à des clients extérieurs au serveur changer les privilèges de l’utilisateur.
Pour l’utilisateur eleve modifier la ligne client en sélectionnant "Tout Client" (%):
Un message de confirmation en vert lors la création de l’utilisateur apparait quand tout est bon.
Cliquez sur meteo puis sur l’onglet « Importer ». Parcourir les répertoires pour sélectionner le fichier "mesure_pression.sql" de votre table (extension sql) et cliquez sur "exécuter"
Un message de confirmation en vert apparait si tout s’est bien passé.
ATTENTION lors d’une mise à jour de votre raspberry arrêter/ redémarrer le serveur Apache et MYSQL :
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql restart
La dernière étape est d’importer le site dans le Rasberry PI en SSH (Secure SHell) :
Lancer WinSCP et préciser :
- Adresse IP du Raspberry PI et le n° du port 22 (ssh)
- Le nom du super utilisateur "root" et son mot passe "azerty".
Nom d’hôte : IP de votre
Raspberry Pi 192.168.1.17
Numéro port :22 (ssh)
Nom d’utilisateur : "root"
Mot de passe : Celui que
vous avez choisi "azerty"
Cliquez sur connecter
La fenêtre debug s’ouvre. La fenêtre de droite correspond au Rasberry PI et celle de gauche au PC distant où est lancé WinSCP. Le principe est de copier des fichiers d’un côté vers l’autre.
A ce stade vous vous situez à droite dans le répertoire « Racine/root » du Raspberry Pi.
bRemonter d’un niveau pour accéder au répertoire « Racine » puis entrez dans le sous répertoire /var puis /www. Le rôle de ce répertoire est de stocker les sites WEB que va gérer le serveur Apache.
Actuellement dans le répertoire « Racine/var/www/ » il existe le « index.html » utilisé lors de l’installation du serveur Apache et de son test.
Souhaitant exécutez le fichier
« index.php » du site météo et non « index.html » cité précédemment il faut créer un sous-répertoire que vous nommerez « meteo » dans le répertoire « www » et dans lequel on stockera tout les fichiers du site météo évitant ainsi toutes confusions entre les 2 fichiers se nommant « index ».
Pour copier les fichiers du site météo, il faut dans la fenêtre de gauche se déplacer dans le répertoire du PC contenant le site WEB puis faites une copie (F5) de tous les fichiers et répertoires du site météo vers le répertoire « Racine/var/www/meteo » du Raspberry PI.
Tout est prêt pour tester le serveur Apache à nouveau ainsi que le serveur MySQL. Tapez dans l’URL du navigateur client « adresse IP/meteo/index.php », l’adresse IP étant celle du Raspberry PI.
Vous allez visualiser le site météo sur le PC client (tapez le login TSIN et le mot de passe 1234) et si le serveur MySQL fonctionne correctement les valeurs de la pression apparaîtront.
Autre possibilité permettant d’ajouter une valeur à la base de données.
Tapez dans l’URL du navigateur Client la ligne suivante http://192.168.1.17/meteo/page2.php?pressio=1059
Le message suivant doit apparaitre «1254 Salut SIN 423456789abcdefs».
Tapez ensuite dans l’URL pour accéder à la page d’acceuil du site météo et vérifiez que la valeur que vous avez passé (ici 1059) a été ajoutée à la base de données.
VII. Un serveur Web pour piloter des LED avec HTML5 et Python
Un bel article que nous devons à Bruno Il a pris comme base deux articles publiés sur le blog et s’en est inspiré pour créer un système « simple » qui met quand même en œuvre des fonctionnalités avancées… Je lui laisse la parole :
C’est sur framboise314 que j’ai trouvé ces deux descriptions. La première signée TheFreeElectron concerne l’interface web qui permet de piloter facilement 8 sorties GPIO du Raspberry Pi.
La seconde est une application de cette interface, réalisée par rleddington. Elle permet de piloter facilement 8 prises secteur à partir de votre smartphone. Je vous propose de la modifier et d’utiliser uniquement la librairie python GPIO.
L’électronique
La partie électronique n’a rien de spécial, elle ne comporte que 8 LED avec leur résistance de protection… La seule partie délicate est de bien relier chaque LED à la bonne broche sur le GPIO du Raspberry Pi.
Le GPIO (General Purpose Input/Output = Entrée/Sortie pour un Usage Général) sont des broches d’entrée/sortie permettant au Raspberry PI de communiquer avec des périphériques extérieurs. Ces broches peuvent assurer différentes fonctions mais sont uniquement de type numérique :
- Entrée/Sortie Numérique (Tout ou Rien).
- Bus SPI.
- Bus I2C.
- Bus Série (UART).
- PWM.
- et les broches d’alimentation : GND, 3,3V et 5V
Pour ce qui est des résistances, elles devraient valoir 1,5kΩ pour une diode LED rouge HLMP-K150
Calcul UR=Vs-VLED=3,3-1,6= 1,7 V avec IF=1mA -> R=UR/IF= 1700Ω
Utilisation de la bibliothèque GPIO
Le choix se porte sur du Python car ce langage de programmation est celui retenu à l’origine pour le développement sur le Raspberry PI et il est proche des langages de programmation comme le C mais avec sa propre syntaxe, ceci facilitera malgré tout son apprentissage et le 2eme avantage est que la librairie RPi.GPIO est déjà installée sur le Raspbery PI si ce dernier est à jour où si vous utilisez une version de la distribution Raspbian de 2016.
Pour vérifier et connaitre la version installée tapez la commande à l’invite de commande:
1
|
pi@raspberry - $ find /usr | grep -i gpio |
Toutefois si vous souhaitez utiliser la dernière version, tapez au niveau de l’invite de commande la commande suivante pour installer la librairie :
1
|
pi@raspberry - $ sudo apt-get install raspi-gpio |
La librairie RPi.GPIO
La librairie Python RPi.GPIO nécessite d’être en ROOT (super utilisateur) ou d’en posséder les droits (SUDO) pour utiliser le GPIO. Avec la nouvelle distribution « Jessie » de Raspbian le problème ne se pose plus puisqu’un simple utilisateur peut accéder au GPIO (PI par exemple) mais actuellement travaillant avec un Rasberry PI2 sur « Wheezy » (ancienne distribution) il me sera nécessaire de faire précéder les commandes Python par sudo.
Plusieurs possibilités existent, vous pouvez exécuter vos commandes Python soit:
- En ligne de commande Python.
- Avec un script Python.
- A partir d’une page WEB en PHP qui appel un script Python.
Accès au GPIO par ligne de commande
Cette manière est surtout utilisée lorsque l’on est en cours de développement pour tester une partie des commandes ou pour l’apprentissage de façon à comprendre la réaction d’une commande particulière.
Interpréteur Python avec les droits du Super Utilisateur
Tapez la commande sur l’invite de commande :
1
|
pi@raspberry - $ sudo python3 |
Apparait la version de Python et l’invite de commande Python représentée par 3 chevrons : >>>
Si vous souhaitez sortir de l’interpréteur de commandes Python tapez sur l’association des touches CTRL+D
Importer la librairie RPi.GPIO
Pour utiliser les commandes de la librairie RPi.GPIO il faut dans un premier temps importer la librairie avec la commande :
1
|
>>> Import RPi.GPIO as GPIO |
Choix de la désignation des broches BCM (N° de broche du microcontrôleur) ou Connecteur GPIO :
GPIO.setmode(GPIO.BCM) ou GPIO.setmode(GPIO.BOARD)
Il est plus simple de choisir le connecteur, exemple pour le GPIO 0 le numéro broche du connecteur est 11
Commandes des broches d’entrée/sortie TOR (Tout ou Rien):
Les commandes suivantes permettent de gérer des entrées/sorties TOR (Tout Ou Rien).
Définir le sens d’une broche
Il est nécessaire avant d’utiliser une broche de définir le type d’utilisation c’est-à-dire soit une entrée soit une sortie avec la commande suivante :
Sortie : GPIO.setup(11, GPIO.OUT)
ou
Entrée : GPIO.setup(11, GPIO.IN)
Réinitialiser la configuration d’une broche ou de l’ensemble du GPIO
Il est conseillé de réinitialiser la configuration des broches ou de l’ensemble du GPIO à la fin d’un script pour finir proprement Pour réinitialiser une broche, il faut mettre entre les parenthèses le N° de la broche concernée.
GPIO.cleanup(11)
Pour réinitialiser l’ensemble du GPIO, il ne faut rien mettre en les parenthèses.
GPIO.cleanup()
Imposer un état logique sur une sortie
Une des commandes les plus utilisées est celle permettant de fixer un état logique Haut ou Bas sur une sortie de façon à commander un périphérique. La syntaxe générale de la commande imposant un niveau logique sur une sortie est :
Sortie à « 1 » : GPIO.output (11, GPIO.HIGH) ou GPIO.output (11, 1)
Sortie à « 0 » : GPIO.output (11, GPIO.LOW) ou GPIO.output (11, 0)
Lire l’état logique d’une entrée
Les systèmes doivent tenir compte de stimuli extérieurs, il est donc nécessaire de pouvoir lire les broches en entrée. La syntaxe générale permettant de lire l’état d’une broche qu’elle soit en entrée ou en sortie est :
GPIO.input (11) -> Variable = GPIO.input (11)
Python Shell
La fenêtre python Shell s’ouvre permettant de tester les lignes de commande une après l’autre et de vérifier le résultat mais il est possible de regrouper ces lignes dans un fichier. Dans le fichier fifi.py ajoutez la ligne suivante en entête pour qu’il puisse être interprété comme du python3 : #!/usr/bin/env python3
Vous allez tester vos lignes avec le Shell (fenêtre de droite) puis les copier dans fichier (fenêtre de gauche) si elles fonctionnent correctement.
Puis sauvegarder votre fichier :
Donner les droits à votre fichier
1
|
pi@raspberry - $ sudo chmod 777 /home/pi/titi/fifi .py |
Droits 777 : correspond à rwxrwxrwx (soit tous les droits) :
La commande ls –l exécutée dans le répertoire où se situe le fichier permet de lister les fichiers et leurs droits.
Testez votre programme ainsi si vous êtes dans son répertoire :
Sinon il faut taper son chemin absolu : /home/pi/titi/fifi.py
Pour exécuter de n’importe où votre programme, on va le copier dans un répertoire particulier, pour connaitre l’ensemble des répertoires ou votre programme peut-être stocké et exécuté sans avoir à préciser son chemin taper :
Chaque chemin proposé est séparé par « : », on va choisir /usr/local/bin, on copie le fichier dans ce répertoire
On peut simplifier l’écriture du fichier en supprimant son extension .py. Pour cela effectuez la commande suivante, ainsi le fichier devient exécutable sans extension :
Taper le nom du fichier sous n’importe quel dossier :
Exécution du script python au démarrage :
Puis placer le nom du programme avec son chemin : /home/pi/titi/fifi.py & (entre fi et exit 0)
Sauvegardez le fichier avec « Ctrl+o » puis valider en tapant sur « ENTREE » et fermez l’éditeur avec « Ctrl+x ».
Installation du SERVEUR apache voir ce lien
Accès au GPIO à partir d’un site WEB en PHP
Introduction
Vous allez découvrir comme gérer le GPIO et exécuter des commandes Pythons à partir d’une page WEB qui est écrite en langage PHP. Dans le PHP il existe des commandes permettant d’exécuter des programmes externes et de récupérer des données renvoyées par ces derniers.
Droits super utilisateur au Serveur APACHE
Cette bibliothèque ne peut être utilisée qu’en super utilisateur (root) ou avec la commande « sudo ».
Il faut paramétrer le Raspberry pi pour que le serveur apache2 (www-data) puisse exécuter des commandes système linux.
Ouvrir le fichier suivant :
1
|
pi@raspberry - $ sudo nano /etc/sudoers |
Limiter les privilèges de www-data uniquement à certains fichiers, ici ecriture.py, lecture.py pour la suite de notre application.
Les programmes en python pourront être exécuté à partir d’un site WEB avec les commandes PHP EXEC() et SYSTEM().
Du côté de Python il existe une librairie système permettant de gérer entre autre le passage d’arguments. Il faut donc l’importer au début du programme Python au niveau des autres librairies importées (RPi.GPIO et tempo).
Import sys
Ensuite il ne reste qu’à récupérer les arguments, ces derniers sont stockés dans une variable système argv de type tableau. Ce tableau contiendra une case de plus que le nombre d’arguments passés en PHP. En effet la 1ere case contient le nom du programme (ici le fichier Python) à qui sont passés les arguments.
Syntaxe
sys.argv[0] contient le nom du programme Python destinataire des arguments.
sys.argv[1] contient le 1er argument passé en PHP et ainsi de suite.
Droits des fichiers Python
Copier : sur /usr/local/bin les deux fichiers python « lecture.py » et « ecriture.py » puis donner les droits suivants
1
2
|
pi@raspberry - $ sudo chmod 777 /usr/local/bin/lecture .py pi@raspberry - $ sudo chmod 777 /usr/local/bin/ecriture .py |
Tester les deux fichiers avec la broche 11 en passant les arguments.
Placer vos fichier web
Utiliser WinSCP en SSH
Copier sur /var/ www l’ensemble des fichiers (sans oublier les droits) du zip
Le langage client (exécuté sur votre machine) HTML5 et langage serveur PHP
Conclusion
Nous gérons les entrées sorties avec des scripts Python.
Remarque importante : pour des processus complexes, la méthode préconisée est la suivante :
Ecrire un programme Python indépendant (exécuté par exemple au démarrage du Raspberry Pi) qui gère le processus comme sur un microcontrôleur de façon autonome. Avec la méthode suivante nous allons procéder de la sorte.
GESTION DE MULTIPLES PROCESSUS:
Nous voulons pouvoir partager des données entre plusieurs programmes Python qui tournent au même moment car nous aurons un processus principal qui gère le GPIO et une application web qui va lancer grâce aux instructions PHP SYSTEM() et EXEC() des scripts Python, afin qu’il n’y ai qu’un unique programme qui effectue la gestion du GPIO, nous définirons une zone mémoire commune afin de transmettre des données entre différents processus. Nous ne sommes plus obligés de donner des droits au serveur Apache.
Méthodologie
Création d’un fichier texte (led.txt) qui sera lancé par les différents scripts Python et placé dans une zone mémoire RAM dont l’accès en écriture/lecture par ces différents scripts Python sera extrêmement rapide.
Copier ce fichier dans le répertoire: /usr/local/bin/led.txt (3 octets).
Lui donner les droits complets :
1
|
pi@raspberry - $ sudo chmod 777 /usr/local/bin/led .txt |
On remplira au préalable ce fichier par un nombre de caractères qui définira la taille de la zone mémoire réservée :
Exemple : fichier led.txt
La taille du fichier est de 3 octets.
On va donc réserver une zone mémoire de 3 octets, un tableau de 0 à 2 (tableau de 3 cases).
Attention chaque case à une valeur numérique entre 0 et 255 (1 octet)
Copier dans le répertoire /usr/local/bin les deux fichiers python « lececri.py » et « g_gpio.py » puis donner les droits
1
2
|
pi@raspberry - $ sudo chmod 777 /usr/local/bin/lececri .py pi@raspberry - $ sudo chmod 777 /usr/local/bin/g_gpio .py |
Mettre en tache de fond le script principal au démarrage ou lancer en local avec sudo g_gpio.py
Vous pouvez tester vos fichiers python : broche 11 ici j’ai choisi comme argument 0->broche 11, 1->broche 12,….
Je lance deux fenêtres et je mets en tâche de fond g_gpio.py puis je teste avec lececri.py
Explication sur les deux fichiers, ils partagent une zone mémoire identique si l’un modifie cette zone, le processus de l’autre fichier est modifié :
Ici dans le processus principal, j’effectue une boucle infinie et je teste la broche sélectionnée par lececri.py et lui renvoie l’état de cette sortie sélectionnée.
Mes deux fichiers sont correctement installés je peux mettre en route mon application web avec mes nouveau fichiers index.php et gpio.php
Taper la commande ps -aux | more dans une autre fenêtre console qui va lister tous les processus lancés sur le système (appuyer sur la touche entrée pour faire défiler la liste).
Nous pouvons observer dans la deuxième colonne le numéro représentatif du PID de chacun des processus. Pour arrêter le processus vous pouvez utiliser la commande kill. Ainsi la commande suivante demandera au processus 3294 de s’arrêter :
Conclure
Source :