Le site du jour : raspbian-france.fr

Hello les visiteurs!
Je sais que c’est bientôt les vacances et pour certains, elles ont même commencé dés ce soir 🙂 En attendant votre tour, je vous propose une nouvelle rubrique intitulée,

Le site du jour

http://raspbian-france.fr.

Ce site est animé par des 4 étudiants en informatique. Ils réalisent essentiellement des tutoriels en français, autour des logiciels, des serveurs, etc.mais surtout quelques articles autour du hardware de la Raspberry Pi et de ses accessoires (http://raspbian-france.fr/tag/raspberry-pi/).

En espérant que cette expérience les aide dans la vie professionnelle, je leur souhaite de mener à bien leurs projets.

I2c Raspberry pi

Bonjour ami lecteur,

Voici un petit topo sur la liaison I2C présente sur les raspberry. Pour connaitre l’historique du protocole, je vous renvois à la page wikipédia.

A quoi te sert ce protocole dans le cadre de ton projet ?

Dans mon projet, le serveur raspberry utilise un afficheur i2c pour afficher (quoi de plus normal pour un afficheur 😉 les températures provenant des capteurs répartis dans la maison, les températures relevées par la cuve, l’intensité EDF consommée en temps réel etc.

afficheur

Vue du menu défilant

Il se trouve dans le salon à la place de l’ancien programmateur de chauffage. Il fallait bien boucher le trou avec quelque chose Le chauffage étant maintenant gérer par le serveur raspberry.

L’avantage principal réside dans le fait qu’il ne faut que 2 fils pour transmettre les informations (SDA et SCL).

Comment activer l’I2C ?

On se connecte sur le raspberry pi:

sudo nano /etc/modules

Puis ajouter les deux lignes suivantes à la fin du fichier:

i2c-bcm2708 
i2c-dev

puis aprés un reboot, ça devrait fonctionner.
Sachant que nous sommes prévoyant, on fera également une mise à jour

sudo apt-get install python-smbus
sudo apt-get install i2c-tools

Pour tester, un rapsberry modèle B répondra à la commande suivante:

sudo i2cdetect -y 1

resultati2cL’adresse 27 correspond à l’afficheur.

Je vous renvois à la lecture de cet excellent article sur les possibilités du protocole.
http://mchobby.be/wiki/index.php?title=ArduPi-I2C

Et chez toi ça marche comment ?

Toutes les 10 minutes, l’afficheur s’illumine et affiche toutes les informations via ce script python. Pour une fois, je suis assez fière de dire que je l’ai fait tout seul.

Mode crâneur = off 😉

#!/usr/bin/python
# -*- coding:utf-8 -*-

import os
import time
import lcddriver
import datetime
import sys
import RPi.GPIO as GPIO
import sqlite3
from time import sleep, localtime, strftime

# Chemin du fichier contenant les donnees de la telereleve EDF
chemin = "/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/Telereleve/edf"

# Initialisation de l'afficheur
lcd = lcddriver.lcd()

# Fonction qui met en route l'écran LCD
def lcd_allumage():
        Relai = 11
        # Fonction GPIO
        GPIO.setwarnings(False)
        # Synchronisation des PIN GPIO
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(Relai, GPIO.OUT)
        GPIO.output(Relai, GPIO.HIGH)
        return

# Presente un message d'attente
def lcd_attente():
        ligne1 = "    Eyes At Home    "
        ligne2 = "                    "
        ligne3 = "  Analyse en cours  "
        ligne4 = "                    "
        affiche_lcd (ligne1, ligne2, ligne3, ligne4)
        time.sleep(5)
        return

# Fonction qui récupère la fête du jour ainsi que l'heure du lever et du coucher du soleil dans la base de données
def lcd_bonjour():
        jour = strftime("%Y-%m-%d", localtime())
        bdd = sqlite3.connect("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/bdd/meteoPi.db")
        c = bdd.cursor()
        c.execute("SELECT Fete,SolLever,SolCoucher FROM Ephemeride WHERE Date = '"+ jour +"'")
        valeur = c.fetchall()

        for l in valeur:
                fete = str(l[0])
                lever = str(l[1])
                coucher = str(l[2])

        bdd.commit()
        bdd.close()
        bdd.close()

        jour = strftime("%A %d %b %Y", localtime())
        ligne1 = jour
        ligne2 = str (fete)
        ligne3 = "Lever soleil  :"+ str (lever)
        ligne4 = "Coucher soleil:"+ str (coucher)
        affiche_lcd (ligne1, ligne2, ligne3, ligne4)
        time.sleep(8)
        return

# Lance la fonction affichage sur le LCD (programme affichage.py fonction affiche_lcd)
def lcd_chauffage():
        # Application de la commande comprise dans le fichier de la zone
        # Pour la zone 1 (Chambres, bureau, dressing)
        lecture_z1 = open("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/Calendrier/therm_Z1", "r")
        # Retire les 6 premiers caracteres du texte pour ne conserver que l'ordre
        ordre_z1 = lecture_z1.readline(6)
        ordre_z1 = lecture_z1.readline(3)
        # Ferme le fichier
        lecture_z1.close()
        # Pour la zone 2 (Chambres, bureau, dressing)
        lecture_z2 = open("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/Calendrier/therm_Z2", "r")
        # Retire les 6 premiers caracteres du texte pour ne conserver que l'ordre
        ordre_z2 = lecture_z2.readline(6)
        ordre_z2 = lecture_z2.readline(3)
        # Ferme le fichier
        lecture_z2.close()
        # Préparation de l'affichage
        ligne1 = "  Etat du chauffage "
        ligne2 = "                    "
        ligne3 = "Z1 Chambres    : "+ ordre_z1
        ligne4 = "Z2 S. de bains : "+ ordre_z2
        affiche_lcd (ligne1, ligne2, ligne3, ligne4)
        time.sleep(6)
        return

#Module d'affichage des informations de la cuve
def lcd_vol_cuve():
        # Configuration de la ligne 1
        ligne1 = "    Cuve jardin"
        fichier = open("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/Cuve/f_pro", "r")
        i = 0
        for i in range (0,2):
         temp=fichier.readline()
         temp=temp.rstrip()
         if i == 0:
                ligne3 = "Haut. d'eau : "+temp+ " cm"
         if i == 1:
                ligne4 = "Volume      : "+temp+ " l"
                ligne2 = "    -----------"
                affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                time.sleep(6)
        return

def lcd_temp_cuve():
        # Configuration de la ligne 1
        ligne1 = "    Temperatures"
        #ligne1 = "Eyes at Home  (Temp)"
        fichier = open("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/Cuve/temp_cuve", "r")
        i = 0
        for i in range (0,3):
         temp=fichier.readline()
         temp=temp.rstrip()
         if i == 0:
                ligne2 = "Eau cuve     : "+temp
         if i == 1:
                ligne3 = "Exterieur    : "+temp
         if i == 2:
                ligne4 = "Boiter tech  : "+temp
                affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                time.sleep(6)
        return

# Fonction qui lit le fichier temperatures, puis effectue la mise en forme pour affichage
def lcd_temperature():
        # Configuration de la ligne 1
        ligne1 = "    Temperatures"
        fichier = open("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/Temperature/temperatures", "r")
        i = 0
        for i in range (0,10):
         temp=fichier.readline()
         temp=temp.rstrip()
         if i == 0:
                ligne2 = "Bureau       : "+temp
         if i == 1:
                ligne3 = "Cellier      : "+temp
         if i == 2:
                ligne4 = "Ch. Anais    : "+temp
                affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                time.sleep(6)
         if i == 3:
                ligne2 = "Ch. Parents  : "+temp
         if i == 4:
                ligne3 = "Ch. Romain   : "+temp
         if i == 5:
                ligne4 = "Couloir      : "+temp
                affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                time.sleep(6)
         if i == 6:
                ligne2 = "Dressing     : "+temp
         if i == 7:
                ligne3 = "Garage       : "+temp
         if i == 8:
                ligne4 = "S. de bains  : "+temp
                affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                time.sleep(6)
         if i == 9:
                ligne2 = "                    "
                ligne3 = "Salon        : "+temp
                ligne4 = "                    "
                affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                time.sleep(6)
        return

# Module d'affichage des donnees issues de la telereleve edf
def lcd_telereleve():
    if os.path.isfile(chemin):
        ligne1 = "Edf releve compteur"
        fichier = open("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/Telereleve/edf", "r")
        i = 0
        for i in range(0,7):
         temp=fichier.readline()
         temp=temp.rstrip()
         if i == 1:
                ligne2 = "H. creuses : "+ temp
         if i == 2:
                ligne3 = "H. pleines : "+ temp
         if i == 3:
                        if temp == "HC":
                                temp = "Heures creuses"
                        if temp == "HP":
                                temp = "Heures pleines"
                        ligne4 = "=> "+ temp +" <="
                        affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                        time.sleep(6)
         if i == 4:
                ligne1 = "Edf consommation    "
                ligne2 = "Intensite "+ temp +" amperes "
         if i == 5:
                ligne3 = "soit "+ temp +" watt.    "
         if i == 6:
                ligne4 = "Int. max "+ temp +" amperes."
                affiche_lcd (ligne1, ligne2, ligne3, ligne4)
                time.sleep(6)
        return

# Module d'affichage du cout finaincier de la journée de la veille
def lcd_valeur_edf():
        veille = (datetime.date.today()-datetime.timedelta(1)).strftime('%d/%m/%Y')
        bdd = sqlite3.connect("/usr/share/adafruit/webide/repositories/my-pi-projects/Serveur_1/bdd/cptedf.db")
        c = bdd.cursor()
        c.execute("SELECT * FROM edf WHERE timestamp = '"+ veille +"'")

        valeur = c.fetchall()

        for l in valeur:
                hc = l[1]
                hp = l[2]

        bdd.commit()
        bdd.close()
        bdd.close()

        v_hc = (hc * 0.0578)
        v_hp = (hp * 0.0935)
        v_tot = v_hc + v_hp
        ligne1 = "Edf cout de la conso"
        ligne2 = "H. pleines : "+ str(hp)+" Kwh"
        ligne3 = "H. creuses : "+ str(hc)+" Kwh"
        ligne4 = "soit pour hier %.2f"% v_tot
        affiche_lcd (ligne1, ligne2, ligne3, ligne4)
        time.sleep(6)
        return

# Module de nettoyage de l'écran entre chaque affichage
def clear_lcd():
        ligne1 = "                    "
        ligne2 = "                    "
        ligne3 = "                    "
        ligne4 = "                    "
        affiche_lcd (ligne1, ligne2, ligne3, ligne4)
        return

# Module d'affichage des messages sur ecran de controle i2c
def affiche_lcd (ligne1, ligne2, ligne3, ligne4):
        lcd.lcd_display_string(ligne1, 1)
        lcd.lcd_display_string(ligne2, 2)
        lcd.lcd_display_string(ligne3, 3)
        lcd.lcd_display_string(ligne4, 4)
        return

# Lance le programme d'affichage des informations sur le LCD
lcd_allumage()
clear_lcd()
lcd_attente()
clear_lcd()
lcd_bonjour()
clear_lcd()
lcd_chauffage()
clear_lcd()
lcd_vol_cuve()
clear_lcd()
lcd_temp_cuve()
clear_lcd()
lcd_temperature()
clear_lcd()
lcd_telereleve()
clear_lcd()
lcd_valeur_edf()

# Message de réinitialisation
lcd.lcd_display_string("                    ", 1)
lcd.lcd_display_string(" Supervision maison ", 2)
lcd.lcd_display_string("    Eyes At Home    ", 3)
lcd.lcd_display_string("        v1.0        ", 4)
time.sleep(10)

# Extinction de l'écran
GPIO.output(11, GPIO.LOW)

J’expliquerai plus en détail dans la page projet comment tout ça fonctionne.

Cette fois c’est bon

Bonjour amis visiteurs,

Cette fois, c’est bon !
J’ai défini une fois pour toute la charte graphique. La manière de saisir le code est également finalisée.
Plus de changement en pleine journée du thème et des plugins.
La mise à jour de ce site me rappelle un peu celui que j’animais dans les années 2000 pour mes collègues pompiers de la 26eme Compagnie à Paris.

Au passage, je remercie mon fils d’avoir pris le temps de me donner son impression générale et pour un ado c’est quasi surhumain 🙂

J’attends désormais la relecture d’animateurs de blogs spécialisés pour me donner leurs avis. Vous pouvez également me laisser un petit commentaire.

Je vous laisse à la lecture du 1er projet.

@ +