nous allons très rapidement voir comment récupérer des informations d'internet dans une 1ere partie puis ensuite montrer dans une seconde partie comment mixer le tout, pour monter ce projet d'afficheur de météo, et relevé de température et d'humidité sur écran LCD.
Voici la partie 1:
import urllib
page=urllib.urlopen('http://python.org')
strpage=page.read()
http://python.developpez.com/faq/?page=Reseau-Web#WebRead
http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/html_processing/extracting_data.php
Ca c'est fait
Partie 2:
récupérer la météo du jour:
j'utilise meteo24.fr qui permet d'afficher un minimum d'information annexe
exemple pour Paris : http://www.meteo24.fr/meteo/hptool/index.php
Pour les autre villes allez sur meteo24.fr, recherchez votre ville et notez le code
33Xxxxx (33 pour la France, et les xxxx pour le code de la ville)
adaptez le code dans l'URL ci-dessous
http://www.meteo24.fr/meteo/hptool/index.php?cid=33X3855
(pour bordeaux)
En Python:
import urllib2
url = "http://www.meteo24.fr/meteo/hptool/index.php?cid=33X3855
request = urllib2.Request(url)
handle = urllib2.urlopen(request)
content =handle.read()
splitted_page = content.split("splitted_page = splitted_page[1].split("", 1)
print "Downloads: " + splitted_page[0]
Oui mais on ne veux pas toute la page, juste les informations utiles
on utilisera pour cela, la fonction Split qui permet de couper une chaine de caratères.
splitted_page = content.split("splitted_page = splitted_page[1].split("", 1)
Ainsi on coupe la page en 2 jusqu'au Span Style, puis on recoupe jusqu'au /Span
Voici le résultat de mon script BUS.py
# -*- coding: utf-8 -*-
#pour importer des données d'internet
import urllib2
#pour écrire sur l'écran LCD
import I2C_LCD_driver
#pour avoir la date du jour
import time
#pour récupérer les valeurs d'une commande (DHT22)
import os
mylcd = I2C_LCD_driver.lcd()
#pour effacer l'écran
mylcd.lcd_clear()
#---DHT22 (sonde temperature et humidité)
dht22=os.popen("/home/pi/thermo3/DHTXXD/DHTXXD -g17").read()
#print dht22
#pour extraire les données retourné par la sonde
explose_dht22=dht22.split(" ")
temperature = explose_dht22[1]
humidite = explose_dht22[2]
humidite = humidite[:-1]
#mylcd.lcd_display_string(temperature, 3, 11)
#mylcd.lcd_display_string(humidite,3, 16)
print temperature
print humidite
#---icone bus-----------------------------
fontdata1 = [[0b00011, 0b10111, 0b00110, 0b10111, 0b00111, 0b11111, 0b00101, 0b00010 ],[0b11111,0b11111, 0b10101, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000 ], [0b11110, 0b11111, 0b01100, 0b11100, 0b11111, 0b11111, 0b10100, 0b01000] ]
mylcd.lcd_load_custom_chars(fontdata1)
#pour récupérer le météo sur internet (status, mini et maxi)
url = "http://www.meteo24.fr/meteo/hptool/index.php?cid=33X19027&cityName=Marly-le-Roi"
request = urllib2.Request(url)
handle = urllib2.urlopen(request)
content =handle.read()
splitted_page = content.split("",1)
splitted_page = splitted_page[1].split("", 1)
status = splitted_page [0]
status = status.replace('é','e')
status = status.replace ('è','e')
splitted_page = content.split("
max.
", 1)
splitted_page = splitted_page[1].split("", 1)
maxi = splitted_page [0]
maxi = maxi.replace('°',chr(223))
splitted_page = content.split("min.
", 1)
splitted_page = splitted_page[1].split("", 1)
mini = splitted_page [0]
mini = mini.replace('°',chr(223))
#----------------------BUS
#pour récupérer les informations des passages de bus
url2="http://wap.vtlesrabaux.mobi/horaireligne.php?ligne=268435463&arret=LES+LAMPES"
request2 = urllib2.Request(url2)
handle2 = urllib2.urlopen(request2)
content2 =handle2.read()
if content2.find("Ligne 10
vers MARLY LE ROI GARE") == -1 and content2.find("Ligne 10
vers MAIRIE DE MARLY LE ROI") == -1:
print "aucun bus"
bus = "aucun bus"
else:
splitted_page2 =content2.split("MARLY LE ROI")
splitted_page2 = splitted_page2[0]
splitted_page2 = splitted_page2.split("Prochains passage")
splitted_page2 = splitted_page2[1]
print "_______________________"
splitted_page2 = splitted_page2.split("mn")
lastsplit=len(splitted_page2)
lastsplit = (lastsplit -2)
bus = splitted_page2[lastsplit]
#----ok---
bus = bus.split("'left'>")
lastsplit = len(bus)
bus = bus[lastsplit -1]
#pour afficher les informations (date, status, mini, maxi)
mylcd.lcd_display_string("%s" %time.strftime("%d/%m/%y %H:%M"),1)
mylcd.lcd_display_string(status,2)
mylcd.lcd_display_string(maxi, 3, 5)
mylcd.lcd_display_string(mini, 3,)
#pour afficher un dessin de bus sympa sur 3 caractères
mylcd.lcd_write_char(0)
mylcd.lcd_write_char(1)
mylcd.lcd_write_char(2)
mylcd.lcd_display_string(" ", 4,3)
mylcd.lcd_display_string(bus, 4,3)
#pour afficher la temperature et le taux d'humidité de la sonde
mylcd.lcd_display_string(temperature, 3, 11)
mylcd.lcd_display_string(humidite,3, 16)
#afficher dans le programme (pour un fichier log) les informations
print status
print mini
print maxi
print bus
Pour le CRONTAB -e (et un fichier log)
#Bus
* * * * * /home/pi/ecran/bus.sh > /home/pi/ecran/logs/cronlog
Rapide Schéma de rappel des branchement du raspberry, de l'écran LCD et du capture DHT