J'ai récemment acquis une carte d'extension pour le raspberry pi appelée GrovePi, elle permet de brancher les extensions utilisant la connectique Grove sur le raspberry pi. Elle comporte également un microcontroleur identique à celui de l'arduino. Ce dernier communique avec le raspberry pi via le protocole i2c. On peut ainsi utiliser les instructions similaires à celles du langage c d'arduino dans un programme en python: pinMode, digitalRead, analogRead, etc.
Tout de suite une application inspirée du site de DexterIndustries utilisant les capacités du raspberry pi et des capteurs : envoyer un tweet automatique affichant la température à intervalles réguliers.
Il faut au préalable obtenir de twitter des codes d'authentification à entrer dans l'application:
Rendez vous sur le site https://apps.twitter.com/ et identifier vous avec votre compte twitter. Faites Create New App et renseignez les champs demandés. Vous verrez apparaître des codes : Api key et Api secret. Modifiez tout de suite la paramètre Access level en Read and write sinon vous ne pourrez pas poster de tweets. Il faut ensuite générer des access token pour votre appli, vous aurez notamment deux codes: Access token et Access token secret.
Il faut maintenant installer python-twitter, la procédure est décrite ici.
Il faut maintenant installer python-twitter, la procédure est décrite ici.
Voici le code:
import twitter
import smbus
import time
import grovepi
import math
bus = smbus.SMBus(0)
address = 0x04
#identification twitter
api=twitter.Api(consumer_key='...', #correspond à API key
consumer_secret='...', #correspond à API secret
access_token_key='...',
access_token_secret='...')
while(1):
#A chaque heure on envoie un tweet
if time.localtime().tm_min==0 and time.localtime().tm_sec==0:
#Lecture de la température
t = grovepi.temp(0)
message="Salut, il est "+time.strftime("%H:%M.")+" La température est de %.2f°." %t
#Envoi du tweet
status=api.PostUpdate(message)
#Message de confirmation
print(message)
#délai nécessaire pour que plusieurs tweets identiques ne soient pas envoyés
time.sleep(1)
