diff --git a/projets/projet_biere/main.py b/projets/projet_biere/main.py index 0a3ad77..69fded2 100644 --- a/projets/projet_biere/main.py +++ b/projets/projet_biere/main.py @@ -1,24 +1,48 @@ -import os -import glob import time -# On active le capeteur dans le système -os.system('modprobe w1-gpio') -os.system('modprobe w1-therm') +# -------------------------------------------------------------------------------- +# Gestion des pages web +# -------------------------------------------------------------------------------- + +import bottle, threading + +def nouvelle_temp_cible (temperature): + """ Cette fonction sauvegarde la température cible """ + with open('cible.txt', 'w', coding="utf8") as f: + f.write(température) + +def temp_format_html (): + """ Cette fonction retourne un texte HTML contenant les mesures de températures""" + return 'Non implémenté' + + +@bottle.get('/') +def get_temp(): + return temp_format_html() + +threading.Thread(target=bottle.run, kwargs=dict(host='', port=8080)).start() + +# -------------------------------------------------------------------------------- +# Gestion du capteur de température +# -------------------------------------------------------------------------------- + +import os +import glob # On trouve où sont les valeurs du capteurs dossier_base = '/sys/bus/w1/devices/' -dossier_capteur = glob.glob(base_dir + '28*')[0] +dossier_capteur = glob.glob(dossier_base + '28*')[0] fichier_capteur = dossier_capteur + '/w1_slave' +fichier_actionneur = 'TODO' def lecture_temp_brute(): - """Cette fonction retourne la valeur du capteur sans traitement""" + """ Cette fonction retourne la valeur du capteur sans traitement """ with open(fichier_capteur, 'r') as f: lines = f.readlines() return lines def lecture_temp(): - """Cette fonction calcule la température à partir des mesures brutes""" + """ Cette fonction calcule la température à partir des mesures brutes """ lines = lecture_temp_brute() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) @@ -29,7 +53,40 @@ def lecture_temp(): temp_c = float(temp_string) / 1000.0 return temp_c -# Programme principal +# -------------------------------------------------------------------------------- +# Gestion du capteur de température +# -------------------------------------------------------------------------------- + +def chauffage_on (): + """ Cette fonction allume le chauffage de la cuve """ + with open(fichier_actionneur, 'w') as f: + f.write('1') + +def chauffage_off (): + """ Cette fonction éteint le chauffage de la cuve """ + with open(fichier_actionneur, 'w') as f: + f.write('0') + +# -------------------------------------------------------------------------------- +# Fonctions d’aide +# -------------------------------------------------------------------------------- + +def ajout_ligne_fichier(nom_fichier, ligne): + """ Cette fonction ajoute le texte dans la variable ligne à la fin du fichier « nom_fichier » """ + with open(nom_fichier, 'a', encoding="utf8") as f: + f.write(ligne) + +def temp_cible(): + """ Cette fonction retourne la température cible qui doit être maintenue pendant la fermentation """ + with open("cible.txt", 'r', coding="utf8") as f: + return f.read().strip() + +# -------------------------------------------------------------------------------- +# Programme principal +# -------------------------------------------------------------------------------- + while True: - print(read_temp()) + print(lecture_temp()) time.sleep(1) + + diff --git a/projets/projet_biere/sujet.pdf b/projets/projet_biere/sujet.pdf new file mode 100644 index 0000000..197dc1c Binary files /dev/null and b/projets/projet_biere/sujet.pdf differ diff --git a/projets/projet_biere/sujet.tex b/projets/projet_biere/sujet.tex index 456a377..74f3ced 100644 --- a/projets/projet_biere/sujet.tex +++ b/projets/projet_biere/sujet.tex @@ -8,6 +8,7 @@ \def\thesequence{Données structurées, web} \begin{document} +Ceci est une trame à suivre, les détails techniques ne sont pas réglés. Durée : 3h % @@ -15,22 +16,63 @@ Durée : 3h \section{Microcontrolleur programmable} Nous travaillerons sur un raspberry pi pour récupérer les valeurs des capteurs. +\subsection{Mesure de la température} +% En vrai on peut aussi mesurer la pression et le pH +Durée : 1h \begin{exercice} Connectez le capteur de température et la résistance au raspberry pi comme sur le shéma suivant : \includegraphics[width=\textwidth]{circuit.png} \end{exercice} \begin{exercice} - Récupérez le fichier python à cette adresse : \url{https://git.jean-cloud.net/adrian/cours-snt/raw/branch/master/projet_bière/main.py} + Récupérez le fichier python à cette adresse : \url{https://git.jean-cloud.net/adrian/cours-snt/raw/branch/master/projets/projet_biere/main.py} \\ et exécutez-le sur votre raspberry pi. Vérifiez qu’il affiche bien la valeur de la température chaque seconde \end{exercice} +\begin{exercice} + Modifiez le programme principal pour qu’il écrive dans un fichier CSV, la date, l’heure actuelle et la température mesurée. + Votre fichier CSV devra ressembler à cela : + \begin{verbatim} + date;heure;temperature + 11/02/2021;15:14:10;22 + 11/02/2021;15:15:10;21 + 11/02/2021;15:16:10;21 + 11/02/2021;15:17:10;20 + 11/02/2021;15:18:10;20 + \end{verbatim} + + Vous pourrez vous aider de la fonction « ajout\_ligne\_fichier » disponible dans le fichier python que vous avez téléchargé. +\end{exercice} -\subsection{Mesure de la température} -% En vrai on peut aussi mesurer la pression et le pH +\subsection{Régulation du chauffage} +Durée 1h +\begin{exercice} + Le chauffage de la cuve de fermentation n’est pas réglable, le chauffage est donc mis à fond pour faire monter la température, puis eteint lorqu’elle est acceptable. + \\ + La fonction « temp\_cible » retourne la valeur de la température idéale pour la fermentation. + \\ + Dans votre programme principal, activez le chauffage si nécessaire (en fonction de la température relevée) pour que la température soit optimale dans la cuve. + \\ + Vous vous aidere des fonctions « chauffage\_on » et « chauffage\_off » fournies. + +\end{exercice} + +\subsection{Affichage des mesures sur une page web} +Durée 1h +\begin{exercice} + Exécutez votre programme python puis rendez-vous à l’adresse \url{http://localhost:8080}. Vous devriez voir le message « Non implémenté ». + \\ + Pour que cette page web affiche la liste des températures mesurées, modifiez la fonction « temp\_format\_html » pour qu’elle génère un code HTML qui met en forme les mesures dans un tableau. +\end{exercice} + +\begin{exercice} + Bonus : Ajoutez une page « /reglage » qui affiche un formulaire pour que l’utilisateur puisse renseigner une température à maintenir. + \\ + Faites en sorte que lorsque l’utilisateur valide le formulaire, la valeur qu’il a entré soit passée à la fonction « nouvelle\_temp\_cible ». +\end{exercice} \end{document}