IDLabs-IoT Le site dédié aux objets connectés

Un site des laboratoires pédagogiques de l'école CampusID

Catégorie : Raspberry

BLINKT !

Posted on 7 janvier 2018  in Raspberry

1. Présentation

Blinkt! est une bande de 8 led rgb très lumineuses qui se branche sur le port GPIO du raspberry pi 3/2/B+/A+/Zero. On peut se procurer cet accessoire à un prix très accessible (aux alentours de 5-6€ en moyenne). On peut contrôler individuellement la couleur, l’intensité de lumière ainsi que la fréquence de chacun des pixels.

Nous utiliserons ici le raspberry pi 3 avec la dernière version desktop de Raspbian installée (« stretch »).

2. Connexion

Voici comment connecter la bande de led Pimoroni Blinkt! sur le port GPIO du raspberry pi
/!\ La bande possède deux angles arrondis, ceux-ci se placent côté extérieur du Raspberry

On peut désormais brancher l’alimentation du raspberry

 

3. Installation

Il est nécessaire d’installer le logiciel Blinkt! pour pouvoir commencer à utiliser la barre de led.
Ouvrir un terminal et taper la ligne suivante :

curl https://get.pimoroni.com/blinkt bash

4. Exécuter du code Python

Trois choix possible

a) Utiliser le terminal

Taper

python

dans le terminal puis valider

b) Utiliser l'IDE Python

Cela nous permet d’exécuter le code au fur et à mesure dans la console.

c) Ecrire un script et l’exécuter
On peut alors comme précédemment, choisir l’IDE Python puis File -> New File

Ou alors, on peut utiliser l’IDE “Thonny” plus simple pour les non-initiés à Python
Il est même disponible en “Simple Mode” qui nous permet de voir toutes nos variables sur le côté et de débuguer de façon simplifiée

5. Importer des méthodes

Pour pouvoir manipuler les leds, il faudra commencer par importer des méthodes. A chaque besoin d’une nouvelle méthode il faudra l’importer en précisant que l’on est en train de travailler avec la barre de led blinkt!
On commence à écrire

from blinkt

Puis

import

suivi du nom de la méthode que l’on souhaite importer. Si on veut en importer plusieurs, il suffit de séparer les méthodes par une virgule.
Exemple d’import :

from blinkt import show, clear

6. Lumière !

Avant de continuer, faisons un premier essai et allumons notre première led

  • On importe les quelques méthodes nécessaires pour allumer une led (on verra une liste des méthodes les plus utiles un peu plus loin)

from blinkt import set_pixel, set_brightness, show, clear

  • On définit la brillance voulue (100% pour tester le potentiel d’éclairage)

set_brightness(1)

  • Par sécurité, on va éteindre toutes les leds qui seraient déjà allumées

clear()

  • On peut alors décider quelle led allumer (la première led = indice 0) et la couleur RGB (lumière blanche = 255, 255, 255)

set_pixel(0, 255, 255, 255)

  • On peut alors finalement afficher le résultat

show()

On voit à quel point la luminosité est importante !!
Pour modifier la luminosité, il suffit de modifier la valeur de la méthode set_brightness() comprise entre 0 et 1

set_brightness(0.5) show() #luminosité de 50%
set_brightness(0.1) show() #luminosité de 10%

7. Les méthodes

Voici une liste non exhaustive des méthodes utiles pour la manipulation des leds :

  • Méthodes Blinkt

blinkt.clear()

Permet d’éteindre toutes les leds

blinkt.set_all(r, g, b, brightness=None)

Permet d’affecter une même couleur à toutes les leds

blinkt.set_brightness(brightness)

Permet d’affecter une luminosité à toutes les leds

blinkt.set_clear_on_exit(value=True)

Permet d’éteindre toutes les leds à la fin de l’exécution du script

blinkt.set_clear_on_exit(False)

Va ainsi permettre de ne pas éteindre les leds à la fin de l’exécution

blinkt.set_pixel(x, r, g, b, brightness=None)

Permet d’affecter une couleur à une led en particulier (0<x<7)

blinkt.show()

Permet d’afficher le résultat sur la barre de led

NB : en tapant

from blinkt import

suivi du nom des fonctions précédentes, il suffit alors d’appeler les méthodes sans le “blinkt.” avant chacune d’elles dans notre code

 

  • Méthodes Python

time()

Permet de manipuler le temps

On pensera aussi à utiliser les itérations et conditions habituelles pour pouvoir créer une animation

while condition: code à exécuter

for i in range(valeur_max): code à exécuter

if condition: code à exécuter

elif condition: code à exécuter

else: code à exécuter

8. Un exemple

Admettons que l’on veuille créer un timer (utile lors d’une partie de carte par exemple)
Essayons le code suivant :

#on importe les fonctions utiles pour utiliser blinkt

from blinkt import set_pixel, set_brightness, set_clear_on_exit, show, clear

#on importe la fonction time

import time

#ici on peut activer (True ou "") / desactiver (False) l'extinction des leds en sortie de script

set_clear_on_exit()

#on eteind toutes les leds qui seraient restes allumes

clear()

#on affecte une luminosite a toutes les led

set_brightness(0.3)

#on affecte a la variable temps (en secondes) la duree de notre timer

temps = 8

#on boucle sur les 8 leds

for i in range(8):

#on choisit une couleur differente a chaque led

if i==0:

r=90

g=0

b=90

elif i==1:

r=90

g=0

b=255

elif i==2:

r=0

g=0

b=255

elif i==3:

r=0

g=255

b=255

elif i==4:

r=0

g=255

b=0

elif i==5:

r=255

g=255

b=0

elif i==6:

r=255

g=90

b=0

else:

r=255

g=0

b=0

#on affecte la couleur a la led en cours

set_pixel(i, r, g, b)

#on affiche la led

show()

#on stoppe le temps de la duree du timer divise par le nombre de led

time.sleep(temps/8)

#on arrete le script

exit()

Résultat :

    Variantes

  • En changeant la valeur de la variable temps, le timer ira plus ou moins vite.

temps = 60

pour un timer de 60 secondes

  • On n’est pas obligé de donner une couleur différente à chaque led, il suffirait alors d’enlever le long “if – elif – else” et de simplement donner les valeurs voulues aux variables rgb

set_pixel(i, 255, 90, 0)

Pour avoir toutes les leds orange

  • En faisant varier une des valeurs r, g ou b on pourrait également créer un dégradé d’une couleur

set_pixel(i, i*30, 0, 255)

pour un dégradé de bleu vers le violet

De la même manière, on pourrait faire varier toutes les valeurs en même temps (en rajoutant « i* » une valeur pour chaque variable r, g et b)

 

  • On pourrait faire varier les couleurs en choisissant un nombre aléatoire entre 0 et 255 pour chaque led

random.randint(a, b)

Retourne un entier n tel que (a <= n <= b)

Ne pas oublier d’ajouter l’import “random” à côté de “time” en début de fichier

import time, random

On ajouterait ensuite 3 lignes

r =random.randint(0, 255)

g =random.randint(0, 255)

b =random.randint(0, 255)

set_pixel(i, r, g, b)

resterait tel quel car les valeurs sont calculées au-dessus

1er test random

2ème test random

 

[Top]

Catégorie : Raspberry

Wiring Pi

Posted on 5 novembre 2017  in domotique, Raspberry

I – Que sont la Raspberry Pi et le GPIO ?

Qu’est-ce que le Raspberry ? Le Raspberry Pi est un micro ordinateur de la taille d’une carte de crédit, vendu à bas prix, nu (sans boitier ni écran, alimentation, clavier ou souris…). Il a été créé par la fondation caritative Raspberry Pi, dont le but était d’encourager l’apprentissage de l’informatique. Différents OS peuvent être installés sur ce micro-ordinateur, principalement des distributions Linux, comme Debian ou Rasbian, mais aussi Windows 10 IoT Core, ou Android Pi.

Son prix d’achat peu élevé a pour but de stimuler l’utilisation de matériel de récupération, mais aussi de s’en servir pour des projets ou l’achat de composants d’ordinateur classiques n’est pas possible ou logique, comme par exemple dans la réalisation de projets de domotique, de média center, d’électronique embarqué…

Le micro ordinateur peut être alimenté en micro USB, sous réserve d’une puissance suffisante, par un transformateur, une batterie, ou d’autres solutions, cequi permet de ne pas limiter les usages qui peuvent en être fait. Doté de plusieurs ports USB, un port RJ45, un port HDMI, ainsi qu’un port DSI (pour un écran LCD) et un port CSI (pour une caméra), ainsi, les configurations peuvent être multiples.

Mais le port le plus « important », surtout dans le contexte de cette contribution, c’est le port GPIO.

Qu’est-ce que le GPIO ? Ce port, appelé General Purpose Input/Output permet de brancher bon nombre de composants électroniques divers et variés, comme des capteurs, des LEDs, des interrupteurs, ou bien d’autres choses encore. Le GPIO est composé de 40 pins, répartis entre les alimentations en 5v, en 3,3v, une interface SPI, une interface I2C, ainsi que 17 pins d’usage libre.

 

II – Qu’est ce que la bibliothèque WiringPi ?

A – Introduction à WiringPi

WiringPi est une bibliothèque écrite en langage C, dont le but est d’améliorer l’accès et l’utilisation du port GPIO de la Raspberry Pi. Elle n’est pas limitée au C et au C++, mais il faut alors utiliser différents wrapper pour les langages Python, Ruby, et Perl.

Comme dit plus haut, le port GPIO et composé de 40 pins qui peuvent transporter des signaux et des bus, et certaines broches peuvent être programmées en entrée digitale ou en sortie digitale. Les interfaces SPI, I2C, UART peuvent elles aussi être programmées comme des entrées ou sorties digitales lorsqu’elles ne servent pas comme bus de données.

La bibliothèque WiringPi inclus un utilitaire GPIO en ligne de commande, qui peut être utilisé pour programmer et configurer les broches GPIO comme décrit précédemment. La bibliothèque peut aussi être utilisée avec des cartes d’extension du port GPIO, qui permet de gérer des entrées analogiques bien que le Raspberry Pi ne soit pas équipé pour une telle utilisation au départ. Il rend donc possible et facilite l’utilisation de la carte Gertboard, ainsi que d’autres cartes du même genre…

B – Les avantages de l’utilisation de WiringPi

La bibliothèque offre de nombreux avantages, dont ceux cités dans l’introduction, comme la gestion d’entrée analogiques sans avoir à faire appel à un convertisseur analogique/numérique, mais simplement à une carte d’extension, qui sera gérée simplement à l’aide de la bibliothèque WiringPi.

Un autre des avantages de WiringPi est la gestion des pins du GPIO. En effet, WiringPi « renomme » et redéfini les noms de chaque pin, afin de ne plus avoir à appeler chaque pin par son nom originel. Ainsi, l’utilisation du GPIO est rendu bien plus simple, et grâce aux différentes fonctions de WiringPi, il est possible de régler le pin comme un pin d’entrée, ou de sortie, mais aussi de simuler, à l’aide des résistances de pull up ou pull down de la Raspberry pi, la valeur du pin.

Cette façon de renommer les pins du GPIO, en plus de rendre leur utilisation plus simple, permet, en cas de changement de modèle de Raspberry Pi, de garder un programme fonctionnel, et d’éviter ainsi les erreurs. En effet, entre les modèles A, B et 3, le nombre de pins a augmenté, mais aussi les emplacements sont différents…. Ainsi, par exemple, sur le premier modèle, à un pin donné sera affecté une fonction, comme l’interface SPI, tandis que sur le second modèle, il pourra être affecté a une autre fonction. Car sans le WiringPi, lorsque l’on cherche à utiliser un pin, on l’ « appelle » par son nom physique, par le nom de sa position dans le GPIO. Avec WiringPi, on renomme donc chaque pin avec sa fonction, ainsi, lors d’un changement de modèle de Raspberry Pi, c’est WiringPi qui redirigera correctement les informations reçus ou émises par les pins du GPIO.

C – Exemples de code :

Il est donc possible, à l’aide du WiringPi, d’exécuter simplement bon nombre de programmes utilisant le GPIO, comme les trois exemples disponibles dès l’installation de la bibliothèque de WiringPi.

Le code permettant le clignotement est très simple :

#include <wiringPi.h>

main ()

{

wiringPiSetup () ;

pinMode (0, OUTPUT) ;

for (;;)

{

digitalWrite (0, HIGH) ; delay (500) ;

digitalWrite (0,  LOW) ; delay (500) ;

}

}

On peut noter dans ce code, la façon de définir l’entrée ou la sortie d’un pin avec « pinMode (0, OUTPUT) ;». On remarque aussi de quelle façon on allume ou on éteint la LED, en réglant la valeur du pin à 1 (HIGH) ou à 0 (LOW).

 

II – Cas pratique : deux interrupteurs et deux LEDs :

 

Pour ce cas, on va donc réutiliser une partie du code vu en exemple, mais aussi l’adapter pour y intégrer les deux interrupteurs, et différencier les deux leds.

 

 

 

 

 

Dans ce cas, avec un branchement approprié, le contrôle des deux LEDs devient alors possible.

[Top]

Catégorie : Raspberry

Valise diagnostic avec une raspberry py Partie 2

Posted on 26 février 2017  in Raspberry

Installation de la Raspberry pour L'OBD2

 

Dans ce tutoriel, vous apprendrez à connecter votre Raspberry Pi à un adaptateur Bluetooth OBD-II et à afficher les données du moteur en temps réel sur votre unité de tête de rechange pour voitures.

1 : Installation :

Avant de commencer, vous aurez besoin d'une installation de travail de Raspbian avec un accès réseau.

Nous allons le faire à partir d'une connexion de câble de console, mais vous pouvez tout aussi facilement le faire à partir de la console HDMI / TV directe ou par SSH'ing po Tout ce qui vous amène à un shell fonctionnera!

Remarque: Pour les instructions de la ligne de commande suivantes, ne tapez pas '#', c'est-à-dire uniquement pour indiquer qu'il s'agit d'une commande à saisir.

Avant de continuer, lancez:

#  sudo apt-get update
#  sudo apt-get upgrade
#  sudo apt-get autoremove
#  sudo reboot

Installez ces composants à l'aide de la commande:

#  sudo apt-get install python-serial
#  sudo apt-get install bluetooth bluez-utils blueman
#  sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-i18n libwxgtk2.8-dev
#  sudo apt-get install git-core
#  sudo reboot

 

Votre raspberry est configuré pour recevoir votre premier code qui viendra pour le premier tuto

[Top]

Catégorie : Raspberry

Création d’une base de données sur Raspberry Pi

Posted on 26 février 2017  in Raspberry

Prérequis :

Avant toute chose, votre Raspberry doit être munie d’un serveur Web, et être à jour. Vous devez donc au préalable en installer un. Si ce n’est pas le cas, nous allons installer le serveur Apache.

Pour mettre la machine à jour c’est très simple. Il suffit de taper ces deux commandes, l’une après l’autre :

  • sudo aptitude update
  • sudo aptitude upgrade

Serveur APACHE

Une fois que la Raspberry Pi est à jour, passons à l’installation du serveur web Apache. Si vous avez déjà un serveur web installé, vous pouvez passer cette étape !

Encore une fois, il est très simple d’installer le serveur, il suffit de taper la commande :

  • sudo aptitude install apache2

Une fois le serveur installé, nous allons donner les droits aux dossiers d’Apache, ce qui permettra d’administrer facilement sans être confronté à des soucis de permissions. Pour cela, lancez les commandes suivantes :

  • sudo chown -R pi:www-data /var/www/html/
  • sudo chmod -R 770 /var/www/html/

Une fois terminé, nous allons quand même vérifier que le serveur fonctionne. Pour ça, il suffit d’ouvrir, depuis la Raspberry elle-même, le navigateur web et d’aller à l’adresse « http://127.0.0.1 ». Si tout a fonctionné, vous devriez voir une page avec un message mentionnant « It Works ! ».

Attention, si vous ne possédez pas d’interface graphique sur votre Raspberry ou que vous utilisez une connexion de type SSH, vous pouvez  utiliser la commande :

  • wget -O verif_apache.html « http://127.0.0.1 »

Suivie de la commande :

  • cat ./verif_apache.html

Si vous voyez affiché quelque part dans le code « It Works ! », c’est qu’Apache fonctionne correctement, et nous pouvons donc passer à la suite !

 

PHP

Afin de pouvoir interagir avec notre serveur web, et notre base de données, nous allons installer le langage PHP sur notre Raspberry.

Pour se faire, lancez la commande :

  • sudo aptitude install php

Une fois l’installation finie, nous allons vérifier que l’installation s’est bien déroulée à l’aide de deux commandes :

  • sudo rm /var/www/html/index.html , qui va supprimer l’index de notre serveur web
  • echo "<?php phpinfo(); ?>" > /var/www/html/index.php , qui va créer un nouvel index, mais cette fois-ci en PHP.

Une fois fait, faites la même vérification que pour le serveur Apache. Si vous avez passé cette étape, il suffit de lancer le navigateur de votre Raspberry et de se rendre à l’adresse « http://127.0.0.1 ».

Si l’installation s’est bien déroulée, vous devriez obtenir une page de ce style :

Si c’est le cas, passons à la suite, à savoir l’installation de MySQL et PHPMyAdmin, qui permettront de créer et administrer notre SGBD (Système de Gestion de Bases de Données).

 

MySQL

L’installation de MySQL va permettre de créer et gérer notre SGBD. Pour ce faire, nous allons installer « mysql-server » ainsi que « ph5-mysql », ce dernier servant de passerelle entre PHP précédemment installé et MySQL.

Lancez donc la commande suivante :

  • sudo aptitude install mysql-server php5-mysql

Pendant l’installation de « mysql-server », il sera demandé un mot de passe pour le compte administrateur. Choisissez en un et retenez le bien ! Nous allons en avoir besoin pour la suite.

Pour vérifier que MySQL fonctionne correctement, lancez la commande :

  • mysql --user=root --password=VotreMotDePasse

Si tout fonctionne, vous aurez un message vous souhaitant la bienvenue sur MySQL.

 

PHPMyAdmin

Nous aurions très bien pu nous arrêter là, mais pourquoi ne pas se faciliter la tâche pour la suite et l’administration de notre SGBD ?!

Tout le monde connaît PHPMyAdmin, n’est-ce pas ? Si ce n’est pas le cas, dites-vous que c’est tout bêtement une interface simplifiée de MySQL, ce qui va nous permettre de gérer extrêmement facilement nos bases de données. Cette installation n’est néanmoins pas obligatoire, et ne sert que de confort J.

Si vous aussi, vous préférez un bon canapé en cuir plutôt qu’une chaise en bois, tapez alors la commande suivante :

  • sudo aptitude install phpmyadmin

Il vous sera posé plusieurs questions pour les réglages. Choisissez un serveur de type Apache si vous avez utilisé celui-ci, sinon celui que vous aviez installé auparavant.

Ensuite, choisissez le choix par défaut pour la base de données (« dbconfig-common »), et rappelez-vous qu’il ne faudra pas toucher à cette base de données, c’est celle qui permet à PHPMyAdmin de fonctionner !

Et enfin, le mot de passe root vous sera demandé, il s’agit de celui que vous avez utilisé lors de l’installation de MySQL, et j’espère que vous vous en souvenez !

 

Pour terminer et confirmer que notre interface PHPMyAdmin est fonctionnelle, il vous suffit de vous y connecter via l’adresse « http://127.0.0.1/phpmyadmin ». Et à partir de là, vous pourrez créer et administrer vos futures bases de données !

 

C’est donc la fin de ce tutoriel, j’espère qu’il vous aura été bénéfique, et vous remercie de l’avoir lu en entier !

[Top]

Catégorie : Raspberry

Valise diagnostic avec une raspberry py Partie 1

Posted on 8 janvier 2017  in Raspberry

Prise ODB

1 - Prise ODB : Présentation ?

La norme OBD (pour On Board Diagnostic) a été mise en place au départ par la CARB (Californian Air Resources Board) pour contrôler les émissions polluantes des véhicules. L'arrivée des calculateurs électroniques de gestion du moteur et des capteurs associés a permis aux véhicules de diminuer leurs rejets polluants. L'OBD, en tant que tel, stipule que le véhicule doit, sur toute sa durée de vie, surveiller en permanence le bon fonctionnement du moteur.

Il existe plusieurs normes de l'OBD :

  • L'OBD ou OBDI qui standardise le connecteur afin qu'il soit identique pour tous les véhicules. Le protocole de communication lui reste plus ou moins spécifique suivant les marques.
  • L'OBDII est venu en 1996 aux Etats Unis pour spécifier des protocoles communs.
  • L'EOBD pour European OBD reprenant l'OBDII est spécifique pour les véhicules européens.

L'EOBD a lui été instauré en Europe en même temps que la norme EURO3 sur les rejets polluants des véhicules. Elle précise que les défaillances sur les émissions doivent être signalées par un voyant au tableau de bord et que des codes correspondants aux défaillances détectées doivent être enregistrés par le véhicule.

2 - Prise ODB : Connecteur ?

La directive stipule que le connecteur doit obligatoirement se situer dans l'habitacle. Généralement celui-ci se trouve sous le volant dans le compartiment à fusibles ou sous le cendrier près du frein à main.

Si vous ne trouvez pas votre connecteur de diagnostic rendez vous sur notre page emplacement des connecteurs OBD pour vous aider à le localiser.

 

 

2 - Prise ODB2 : Protocole de communication ?

Il y a différent type de protocol :

-AE J1850 PWM (41.6 kbaud)

-SAE J1850 VPW (10.4 kbaud)

-ISO 9141-2 (5 baud init, 10.4 kbaud)

-ISO 14230-4 KWP (5 baud init, 10.4 kbaud)

-ISO 14230-4 KWP (fast init, 10.4 kbaud)

-ISO 15765-4 CAN (11 bit ID, 500 kbaud)

-ISO 15765-4 CAN (29 bit ID, 500 kbaud)

-ISO 15765-4 CAN (11 bit ID, 250 kbaud)

-ISO 15765-4 CAN (29 bit ID, 250 kbaud)

2.1 : Interface :

L'interface OBD-II permet la lecture des Diagnostic Trouble Codes standardisés, ou DTC, générés par le système informatique embarqué, ainsi que les informations temps réel en provenance des capteurs connectés aux calculateurs de bord. La norme prévoit aussi l'effacement des DTC enregistrés par les calculateurs lorsque la maintenance a été effectuée.

Les voyants permettant d'alerter l'utilisateur des dysfonctionnements du moteur ont eux aussi été standardisés. Tout défaut pouvant mener à un dépassement des seuils provoque un allumage normalisé du voyant.

 

 

[Top]