alimA27
Bac STI2D

TP n°25 : IHM avec Python Node red et arduino

Nom :  
Centre d'intérêt : CI 
Classe : 1ère Sti2d Sin
Id programme : sin15, sin31  
Conditions : Seul, durée  3 heures.
Matériel : - Arduino;
- shield arduino.
Logiciel :  - ide arduino
-Idle python
Document :  

I. Objectifs

  • Créer une IHM avec python ou node red
  • Mettre en forme les données.

II. Etude du shield arduino

 

Nous allons utiliser le Shield Multifonctions (ci-dessous, à gauche)

 

Demandez au professeur de mettre la carte DangerShield sur la carte Arduino.

 

 

Cette carte se compose des capteurs suivants: En gras les entrées/sorties Arduino utilisées :
  • 1 potentiomètres rotatif – entrées analogiques A0.
  • 1 capteur de température - entrée analogique A4
  • 3 boutons poussoirs – entrées numériques (TOR) D15, D16, and D17.

Et des actionneurs :
  • 4 LEDs  - sortie logique D10, D11, D12 et D13.
  • 4 afficheurs 7 segments.
  • 1 buzzer - sortie logique D3.
 

 

Téléverser le programme suivant dans la carte arduino :

 

String commande; //la commande envoyée
const int led1=13; //definir la led à allumer
int mesure; //definir la mesure pour A0

void setup() {

   Serial.begin(9600); // Ouvrir le port série à 9600bauds (bit/seconde)
   pinMode(led1,OUTPUT);//définir la pin led comme une sortie 
   digitalWrite(led1,LOW);//éteindre la led
}//fin setup

void loop() {
   mesure=analogRead(A0);
   

   //test si une donnée est reçu sur le port série  
   while(Serial.available()) {

      commande= Serial.readString();// récupère la commande
      if(commande=="led1") { //test si commande est egale à led1
            digitalWrite(led1,digitalRead(led1)); //inverse ! l'état de la sortie 0->1 ou 1->0
      }
      

   }//fin while

Serial.println(mesure);//affiche la mesure sur le port série
  delay(10);

}//fin loop

 

Lancer le moniteur série.

Ecrire led1 sur le port série et décrire la fonction réalisée par le programme.

 

 III. Serveur python

Pour mettre en place le serveur python, il faut suivre les étapes suivantes :

Etape 1 : Installation de Python et Pyserial

Désinstaller toutes les versions de python supérieure à 3.0.

Télécharger et installer la dernière version de python sur le site python.org .

Redémarrer l'ordinateur.

Ouvrir le terminal de commande.

Installer pyserial à l'aide de la commande :

pip3 install pyserial

 

Etape 2 : Installation du serveur Python

Créer un répertoire www à la racine de c:

Ecrire à l'aide de l'IDLE python le programme serveur.py suivant dans le répertoire www:

import http.server
 
PORT = 8888
server_address = ("", PORT)

server = http.server.HTTPServer
handler = http.server.CGIHTTPRequestHandler
handler.cgi_directories = ["/"]
print("Serveur actif sur le port :", PORT)

httpd = server(server_address, handler)
httpd.serve_forever()

 

A l'aide du terminal de commande en mode administrateur, allez dans le répertoire www et lancez le serveur avec la commande suivante :

python serveur.py

Normalement, vous devez obtenir le résultat ci-dessous :

 

Etape 3 : Créer la page internet de l'IHM

import cgi 
import sys
import serial
import time

#Mettre le numero du port de la carte Arduino
ser =serial.Serial('COM5',9600)

#Pause pour se connecter au port série .
time.sleep(1.5)

form = cgi.FieldStorage()

led = form.getvalue("led") #recupère la value du name led de la page web
ser.write(led)

mesure = ser.readline() #recupère la donnée envoyée par arduino

print("Content-type: text/html; charset=utf-8\n")
print("<!DOCTYPE html>")
print("<html>")
print("<head>")
print("<title>IHM</title>")
print("</head>")
print("<body>")
print("<h1>IHM</h1>")
print("<p>Mesure : ")
print(mesure)
print("</p>")
print("<form action='/index.py' method='post'>")
print("<label>LED :</label>")
print("<input type='submit' name='led' value='led1'>")
print("</form>")
print("</body>")
print("</html>") 

A l'aide de chrome, allez à l'adresse http://localhost:8888/index.py et vous devriez obtenir le résultat suivant :

 

 

 Appuyer sur le bouton led1 et la led sur la carte arduino s'allume.

Refaire l'expérience et conclure.

IV. Modification du programme

Modifier le programme arduino et index.py pour pouvoir allumer une deuxième led.

 

V Node-red

5.1. Introduction

Node Red a été crée par IBM en 2013 afin de facilité la création d'objets connectés.

C'est un langage graphique (sous jacent en javascript) qui permet de créer des liens entre les flux de données entrant et sortant.

Il est gratuit et nécessite : NodeJS (javascript du coté serveur)

 

5.2. Installationd de NODE RED

Lancer le terminal de commande en mode administrateur

Mettre à jour NodeJS

npm install -g npm

Installer Node-Red

npm install -g --unsafe-perm node-red

 

5.2. Lancement sous Windows

Aller dans le dossier : c:\users\1sina\appdata\roaming\npm

Lancer la commande

node-red

Autoriser l'accès 

5.3. IHM avec Node Red

A l'aide de Node Red et des sources ci-dessous, créez une interface utilisateur pour allumer la led1 et visualiser la mesure de l'arduino.

 Sources : http://stssnsb.free.fr/telecharger/blusson/Iot/nodered/_utilisation%20de%20node%20red%20by%20sb.pdf

https://diyprojects.io/node-red-module-dashboard-gui/#.XKJjiZgzaMo

https://www.youtube.com/watch?v=nJ1wtUtcLfM

VI. Conclusion

 

 

footer2

Richard GAUTHIER
Professeur de Physique Appliquée
Certification ISN
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

 

 


Mentions légales


Plan du site

  Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.