Bonjour à tous,
Aujourd'hui je vais vous parler de l'Arduino
conjuguer avec un Raspberry Pi. Pour commencer pour ceux qui ne
connaisse pas un Arduino est un microcontrôleur open source qui se
programme via un logiciel aussi open source bien sûr, le tout dans
une forme de C++, sont avantage sur le raspberry pi est qu'il dispose
de plus de ports d’entrée/sortie, des entre analogique, une
dizaine de sorties PWM et quelques sortie Tx/Rx.
Et importante il dispose de port I2C, car le bute
dans mon cas est d'utilisé l'Arduino comme esclave du Raspberry Pi
pour simplement éviter d'utiliser les GPIO du RPI.
L'autre avantage de l'Arduino sur le Rapsberry Pi
qui est du notamment à sont ancienneté, c'est la quantité de
librairies disponible pour tout et n'importe quoi, exemple dans mon
cas j'utilise un petit afficheur LCD qui lui est en esclave sur
l'Arduino il suffit simplement d'ajouter la librairie correspondante
pour utilise « Plug and Play » l'afficheur.
Ensuite autre avantage à son utilisation le nombre
de capteur et de périphérique dédié qui se trouve très
facilement sur le net.
Je vais maintenant vous
exposer ma petite installation qui est composée donc d'un Raspberry,
d'un Arduino et sur celui-ci y est connecter un buzzer, un afficheur
LCD, un capteur de température et d'humidité (DHT11), une matrice
de LED 8x8, et j'ai encore bien d'autres capteur et autres à
ajouter.
Vous allez donc vous
apercevoir que vous n'êtes plus limité par le nombre
d'entrées/Sorties et les possibilités qu'offrent ce type
d’installation.
I – Mon Projet :
Mon projet est un peu la
suite du Home Dash Screen, je vais utiliser l'Arduino pour récupérer
les informations comme la température et l'humidité pour y stocker
dans une base de données MySQL, ensuite sur ma page web via un
script PHP je récupère ces donné pour en faire un graphique.
Par la suite j'aimerais
pouvoir faire des voyants sur ma page web qui lit les valeurs de
l'Arduino et aussi faire des boutons pour actionner dans sortie
Arduino.
Mais rien de mieux pour
des explications qu'un petit schéma :
On peut ajouter une multitude de périphérique sur le bus I2C.
II – Communication :
Pour cette partie je me
suis beaucoup aidé d'un tutoriel de McHobby (lien) qui explique
comment créer sur l'Arduino des registres d’exécution et de
retour le tout en événementielle.
Schéma de connexion
entre RPI et Arduino :
<div id="temperature">
<img src="histo.php" border=0 align=center width=500 height=400>
</div>
a – Arduino
Dans la partie Arduino il
suffit de lui envoyer son programme en lui définissant un numéral
sur le bus I2C, exemple avec mon programme (la totalité des programme sera disponible à la fin):
#include
void setup()
{
// Joindre le Bus I2C avec adresse #4
Wire.begin(0x04);}
Ici J'utilise la valeur
0x04 sur le bus. Voir le programme Arduino complet ici.
b – Raspberry Pi
Mais pour commencer, il
faut configurer le RPI pour activer le bus i2c en éditant le fichier
suivant:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
et
mettre un commentaire avec # devant la ligne :
blacklist i2c-bcm2708
Il
faut maintenant activer i2c au démarrage en éditant le fichier
suivant :
sudo nano /etc/modules
et
ajouter la ligne suivante :
i2c-dev
Ensuite,
installons les outils de gestion I2C :
apt-get install i2c-tools
Ensuite
il faut lister les
périphériques I2C disponibles, ici deux solutions selon votre
modèle de RPI, pour les modèles 512 Mo il faut faire :
i2cdetect -y1
pour
les modelés 256 Mo :
i2cdetect -y0
Dans
mon cas on peut voir deux choses l'Arduino avec sont adresse 0x04 et
un 0x27 qui est l'afficheur LCD :
Maintenant
la partie programme, j'utilise la librairie Adafruit pour la
communication I2C, il faut donc commencer par la télécharger :
Ensuite créer votre dossier par exemple I2C_Arduino :
git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
Ensuite créer votre dossier par exemple I2C_Arduino :
sudo mkdir ./I2C_ArduinoEnsuite on s'y place :
cd ./I2C_ArduinoIl faut créer un lien symbolique vers la librairie I2C Adafruit avec :
ln -s ../Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/Adafruit_I2C.pyNe reste plus qu'a écrire notre programme :
Mon programme est le suivant ICI.sudo nano ./I2C.py
Pour le lancer :
sudo python ./I2C.py
III - Web
Pour cette partie j'ai repris se que j'avais avec le Home Dash Screen du reveil, pour rappelle c’était une page web avec l'heure et un widget météo. Il ma juste suffit d'ajouter un champ pour la vidéo de la caméra via "mjpeg-streamer", pour le graphique vue que les relever de température sont stocker dans une base de donnés il suffisait de faire un jolie graphe en lissant les données.
Le plus compliqué à donc été la partie graphique de température le reste étant juste du placement de widget. Pour faire se fameux graphique j'ai utilisé une librairie php qui se nomme JpGraph (http://jpgraph.net/) très complète qui offre une multitude de possibilité.
Je vais donc développer plus la partie graph que les autres mais tout sera disponible au téléchargement un peu plus bas. Les librairies sont toutes intégrer dans l'archives les explications sont la à titre d'informations ou pour vos projets.
Il faut commencer par télécharger la librairie jpgraph :
Ensuite j'ai créer une simple page web avec le graphique, c'est ensuite grâce à cette page web que je récupérer sur le Home Dash Screen le graphique.
Mon code de la page php que j'appelle histo.php est celui-ci :
Petites explications, pour commencer on importes les librairies utiliser. Je me connecte ensuite à ma base de donnés local puis à la table température.
Je stock dans des tableau grâce à une boucle for les dernières 48 valeur, sachant que je prend la température toutes les 30 minute j'ai donc sur mon graphe une journée complète de mesure.
Et ensuite je définie via la doc tous les paramètres nécessaire, comme la taille, les couleurs, les légendes, ... , reste à définir quelles axe avec telle valeurs du tableau et de l'afficher.
Maintenant si en local si tapez sur votre navigateur http://IP-RPI/histo.php vous devriez voire apparaître votre graphique.
Pour l'intégrer au Home Dash Screen il suffit d'ajouter dans l'index.php une "div" comme ceci :
Bien sur la page histo.php est dans le même répertoire que la page index.php.
IV - Les liens
Le liens des programme de communications Raspberry Pi, Arduino sont disponible si dessous :
https://github.com/kkiwill/I2C_Arduino_RPI
Le liens pour la partie web est disponible si dessous, mais un serveur LAMP doit être installer avant :
https://mega.co.nz/#!wtIwlRBR!JTQvYJQ4C1vAXVVE_vOmKkyfBbgVN2_EAlmG080uvQs
Il faut commencer par télécharger la librairie jpgraph :
wget http://jpgraph.net/download/download.php?p=1.27.1Et ensuite dézipper cette librairie dans le dossier de votre projet web :
tar czvf ./jpgraph-1.27.1.tar.gz /var/wwwcette archive contient donc les librairie mais aussi des exemples sur lesquelles s'appuyer.
Ensuite j'ai créer une simple page web avec le graphique, c'est ensuite grâce à cette page web que je récupérer sur le Home Dash Screen le graphique.
Mon code de la page php que j'appelle histo.php est celui-ci :
<?php
include ("/var/www/src/jpgraph.php");
include ("/var/www/src/jpgraph_line.php");
mysql_connect("localhost","root","raspberry") or die("Impossible de se connecter");
mysql_select_db("temperature") or die("pas possible de trouver la base");
$result = mysql_query("SELECT * FROM ValeurSonde ORDER BY tDate DESC, tTime DESC");
for ($i=0;$i<48;$i=$i+1) {
$xdata[] = mysql_result($result,$i,"tDate");
$ydata[] = mysql_result($result,$i,"tTime");
$zdata[] = mysql_result($result,$i,"temperature");
}
$graph = new Graph(500,400);
$graph->SetMarginColor('black');
$graph->SetColor('gray1');
$graph->SetScale("textlin");
$graph->SetMargin(60,40,40,80);
$graph->xaxis->SetFont(FF_FONT0,FS_BOLD);
$graph->xaxis->SetTickLabels($ydata);
$graph->xaxis->SetLabelAngle(90);
$graph->title->Set("Temperature C");
$lineplot=new LinePlot($ydata);
$lineplot->SetColor("green");
$lineplot2=new LinePlot($zdata);
$lineplot2->SetColor("red");
$graph->Add($lineplot2);
$graph->Add($lineplot);
$graph->Stroke();
?>
Petites explications, pour commencer on importes les librairies utiliser. Je me connecte ensuite à ma base de donnés local puis à la table température.
Je stock dans des tableau grâce à une boucle for les dernières 48 valeur, sachant que je prend la température toutes les 30 minute j'ai donc sur mon graphe une journée complète de mesure.
Et ensuite je définie via la doc tous les paramètres nécessaire, comme la taille, les couleurs, les légendes, ... , reste à définir quelles axe avec telle valeurs du tableau et de l'afficher.
Maintenant si en local si tapez sur votre navigateur http://IP-RPI/histo.php vous devriez voire apparaître votre graphique.
Pour l'intégrer au Home Dash Screen il suffit d'ajouter dans l'index.php une "div" comme ceci :
<div id="temperature">
<img src="histo.php" border=0 align=center width=500 height=400>
</div>
Bien sur la page histo.php est dans le même répertoire que la page index.php.
IV - Les liens
Le liens des programme de communications Raspberry Pi, Arduino sont disponible si dessous :
https://github.com/kkiwill/I2C_Arduino_RPI
Le liens pour la partie web est disponible si dessous, mais un serveur LAMP doit être installer avant :
https://mega.co.nz/#!wtIwlRBR!JTQvYJQ4C1vAXVVE_vOmKkyfBbgVN2_EAlmG080uvQs
Bonjour
RépondreSupprimerTuto très intéressant, je cherchait depuis longtemps comment lier arduino et raspberry Pi!
j'attend avec impatience la suite !
En effet, tuto très intéressant mais le fichier I2C.py n'est plus dispo.
RépondreSupprimerLien mise à jour :D
RépondreSupprimer=))
SupprimerUn grand merci pour ce tuto!
RépondreSupprimerBonjours, je viens de tester votre tuto mais a la fin de celui-ci,lorsque je lance le ./I2C.py
RépondreSupprimerj'ai une erreur de connexion à la base de donnée:
Error: the database is being rolled back.
Et je ne trouve d'ou cela viens.
Bonjour James,
RépondreSupprimerL'erreur décrite arrive quand lors de l'ajout à la base de données MySql, avez-vous correctement configurer la connexion à cette dernière ?
J'ai créé une base nommé temperature avec un tableau nommé ValeurSonde.
RépondreSupprimerMais après je suis bloquée pour compléter les champ du tableau.
Merci pour votre aide.
Pas de soucis, contact moi sur kiwilsgeek@gmail.com sa sera plus simple pour échanger.
SupprimerImpeccable je te remerci :)
Supprimer:))
Supprimer:))
Supprimer8-) :-t
SupprimerCe commentaire a été supprimé par l'auteur.
RépondreSupprimerBonjour
RépondreSupprimerll suffit de raccorder les broches A4 ensemble et A4 ensemble (et partager la même masse) pour constituer le Bus I2C. Sur le schéma I2c SCL et SDA sont croisés, est ce normal entre Rspi et Arduino ?
@+
Cdlt
Dans mon cas, je veux que Rspi demande à arduino d'allumer 4 DEL. Ce n'est pas de la lecture de capteur, je ne sais pas encore si c'est possible ..
RépondreSupprimerOui c'est tout à fait possible il faut par exemple ajouter un registre sur l'Arduino puis demander au Raspberry d’appeler se registre comme se que l'ont fait aujourd'hui sur se tuto.
Supprimerlooooooooooooooooooooooooolll
SupprimerBonjour, justement aurais tu un exemple de programme pour activer tel ou tel pins sur l'arduino depuis le raspberry? Mon but à terme serait de pouvoir piloter 2 moteurs CC branchés sur mon arduino depuis mon raspy. Je t'en remercie par avance
SupprimerVery great post. I simply stumbled upon your weblog and wanted to say that I’ve truly enjoyed surfing around your weblog posts. In any case I will be subscribing for your rss feed and I hope you write once more very soon! https://royalcbd.com/product/cbd-oil-1000mg/
RépondreSupprimerWe are providing Programming Assignment Help. anyone who is looking for the same check the complete details of the same by going through the provided link.
RépondreSupprimer