---
# System prepended metadata

title: Raspberry - Python led RGB et bouton

---

# Raspberry - Python led RGB et bouton

```
import RPi.GPIO as GPIO
from time import sleep
import urllib

greenpin = 12
redpin = 32
bluepin = 33
buttonpin = 7
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(buttonpin,GPIO.IN)
GPIO.setup(greenpin,GPIO.OUT)
GPIO.setup(redpin,GPIO.OUT)
GPIO.setup(bluepin,GPIO.OUT)
red = GPIO.PWM(redpin,100)
red.start(0)
blue = GPIO.PWM(bluepin,100)
blue.start(0)
green = GPIO.PWM(greenpin,100)
green.start(0)

while True:
	page=urllib.urlopen('http://195.83.128.21/~dev1905/API/recup_red.php')
	redstatut=page.read()
	page=urllib.urlopen('http://195.83.128.21/~dev1905/API/recup_green.php')
	greenstatut=page.read()
	page=urllib.urlopen('http://195.83.128.21/~dev1905/API/recup_blue.php')
	bluestatut=page.read()
	redstatut=float(redstatut)
	bluestatut=float(bluestatut)
	greenstatut=float(greenstatut)
	red.ChangeDutyCycle(redstatut)
	blue.ChangeDutyCycle(bluestatut)
	green.ChangeDutyCycle(greenstatut)
	buttonstatut=GPIO.input(buttonpin)
	if buttonstatut == 1:
		urllib.urlopen('http://195.83.128.21/~dev1905/API/button.php?statut=1')
	else:
		urllib.urlopen('http://195.83.128.21/~dev1905/API/button.php?statut=0')
	sleep(1)

```

---

## Côté Raspberry
Un script python récupère les informations de pages web afin d'actualiser chaques secondes la led RGB. A chaque démarrage du script les pins du raspberry sont initialisés, puis une boucle permet de changer l'intensité de chaques couleurs. Pour le bouton, l'état est vérifié régulièrement et actualisé dans la base de donnée grâce à une page avec des paramètres GET.
### Librairies python utilisées
* RPi.GPIO : Elle contrôle les pins de la raspberry grâce à plusieurs fonctions.
* time : Afin que la boucle soit exécutée toutes les secondes.
* urllib : récupère les données d'une page web.
## Côté base de données
Le bouton et la led n'étant pas liés nous avons préféré créer deux tables.

| ledlampe | button |
| -------- | -------- |
| id | id |
| red (int) | button (boolean) |
| green (int) |  |
| blue (int) |  |

Les valeur des colonnes red, green et blue doivent être entre 0 et 100 ce qui correspond au pourcentage de l'intensité. La valeur du bouton est de 0 quand il est désactivé et de 1 quand il est activé.
## Côté interface web
Notre interface web se compose de deux zones. La première permet de connaitre le status d'activation d'un bouton, elle s'actualise toute les secondes. La deuxième zone est un panneau de contrôle pour régler l'intensité des trois couleurs d'une led RGB.
## Évolution possible
* La création d'une API pour alleger les requêtes faites au serveur permettrait qu'une seule requête soit réalisée au lieu de trois actuellement.
* Ajouté plus de condition afin de ne pas faire de requêtes inutilement, par exemple lorsque le bouton ne change pas d'état.