Ce post est le vingt troisième d’une liste de tutoriels sur le raspberry PI et l’arduino, cliquez ici pour accéder au sommaire !
Salut bande de bras cassés syndiqués !!
Vu le temps j’espère que vous glandez sur les plages de rio (ou au minimum dans un petit bar à tapas de lacanau) mais je vais quand même tenter ma chance d’attraper un ou deux lecteurs désœuvrés pour la lecture de ce 23em tuto.
Aujourd’hui nous allons reprendre notre porte bluetooth du tuto 22 et en faire une vrai porte domotique.
Pour cela il vas nous falloir faire communiquer l’arduino de la porte et le raspberry pi de manière simple, rapide et sécurisée (on parles d’une porte, donc évitons qu’elle ne s’ouvre trop souvent ou pour de mauvaises raisons).
Une fois la porte relié à yana, tout devient possible :
- Génération de clés par utilisateur sur l’interface yana (et non une clé unique en dur dans le code de l’ardui)
- Génération d’un historique des entrées sur l’interface yana
- Création de code limités dans le temps ou le nombre d’utilisation ou utilisable uniquement certains jours (par exemple pour la femme de ménage ou le voisin qui viens nourrir les poissons)
- Déclenchements de scénarios en fonction de la personne qui entre
- etc..etc… tout deviens possible c’est une simple question de code de plugins.
Commençons par le traditionnel quart d’heure de honte (8 min en fait).
Dans la vidéo je suis un peu vague sur le “pourquoi ça marche dans un sens pas dans l’autre” il faut dire que c’est assez vague pour moi également (et aussi que je m’en fou un peu tant que j’arrive à mes fins 🙂 ).
Le rpi accepte au maximum du 3.3v sur ses pins, or l’ardui envoi du 5v, pour faire communiquer les deux il faudrait donc normalement utiliser un convertisseur i2c (qu’on peux voir sur ma vidéo mais qui n’est pas obligatoire grâce a notre montage) mais une histoire de résistance de pull up manquante d’un côté permet de faire communiquer du rpi vers l’arduino sans qu’il n’y ai de dégâts (j’ai testé pour vous :p)
Je parle également vite fait de “channels” j’ignore si c’est le terme en vogue, en gros c’est une adresse de communication choisie (dans ce tuto 0x12) qui permet de superposer plusieurs communications sur des adresse différentes, le rpi peut ainsi communiquer avec plusieurs portes en communiquant sur le canal de chacune.
Le matériel
Le matériel est le même que pour le tuto précédent, il vous faut bien entendu votre porte (avec son atmega328 ou son arduino inclus) un rpi à brancher à votre porte et trois fils électriques standard (de préférence un bleu, un vert et un noir), c’est tout.
Le montage
Encore une fois, le branchement est similaire au tuto précédent, il vous faudra simplement relier le port I2C du raspberry PI au port I2C de l’arduino.
Comme je suis une grosse quiche, il se peut que j’ai inversé le sda et le scl sur le rpi, si c’est le cas, n’hésitez pas à intervertir (ça n’explosera pas dans tout les cas, au pire ça ne communiquera pas)
Pour cela suivez le schéma suivant :
Le code du raspberry PI
Avant de mettre en place le code pour le rpi, il y a quelques manipulation à faire pour “activer”
la gestion i2c sur le rpi (désactivée par défaut, certainement pour un gain de perfs).
Ouvrez le fichier /etc/modprobe.d/raspi-blacklist.conf en édition
nano /etc/modprobe.d/raspi-blacklist.conf
commentez la ligne
blacklist i2c-bcm2708
en placant un # devant
Enregistrez et fermez ce fichier, puis ouvrez le fichier /etc/modules
nano /etc/modules
ajoutez y la ligne
i2c-dev
Fermez et enregistrez, installez ensuite l’utilitaire i2c
apt-get install i2c-tools
et enfin relancer votre rpi avec la commande
reboot
Mettez a jour votre yana, le plugin se trouve en natif dans le script
Puis dans l’interface web yana, allez dans configurations–>pluging–>activez le plugin
Le code de l’arduino
Comme d’habitude, branchez l’arduino (ou l’atmega) au pc et transférez via l’IDE arduino le code suivant sur la puce.
L’application android
L’application android est un peu excessivement merdoyante, c’est toujours la même et je n’ai pas eu le temps de la débugger,
elle est dispo ici :
http://idleman.fr/ressources/ANDROID/YanaBluetooth.apk
L’utilisation :
Dans votre application androïde, allez dans “configuration”, mettez un code à 4 chiffres/lettres de votre choix
Vérifiez que le nom du périphérique correspond bien a celui de la carte bluetooth votre porte
Vérifiez que la carte bluetooth de votre porte (normalement “bolutek” est bien enregistrée dans vos périphériques bluetooth
(si la première fois la carte vous demande un code, c’est généralement 1234 ou 0000).
Ouvrez le plugin domodoor dans le menu des configurations, et ajoutez un utilisateur à la porte (si vous voulez ajouter un autre utilisateur a la porte, il faudra d’abord l’ajouter aux utilisateurs généraux de yana)
et attribuez le même code à 4 chiffre à l’utilisateur que celui que vous avez sur votre téléphone.
Vérifiez que votre montage est bon et qu’il est sous tension
lancez la commande :
sudo python /var/www/yana-server/plugins/domodoor/i2c.py
Testez en lançant l’application android.
Par la suite, il peux être bon de lancer automatiquement le programme /var/www/yana-server/plugins/domodoor/i2c.py en tache de fond au démarrage, pour cela vous pouvez utiliser les CRON (taches planifiées) de linux, ou encore créer un petit script dans /etc/init.d
(cf la doc d’ubuntu par exemple).
Comme je suis un type fichtrement cool je vous donne même le script pour lancer ça au démarrage
tapez
sudo nano /etc/init.d/domodoor
Dedans, ecrivez votre commande :
#!/bin/sh
python /var/www/yana-server/plugins/domodoor/i2c.py
Enregistrez/fermez (ctrl+x puis “y”)
Rendez le script executable
sudo chmod +x /etc/init.d/domodoor
Ajoutez le script au boot
sudo update-rc.d domodoor defaults 80
Le programme se lancera maintenant à chaque démarrage.
Notez bien que seul l’utilisateur “root” a le droit d’utiliser l’i2c, vous devrez donc lancer le programme i2c.py avec l’utilisateur root au démarrage.
Explications sur le fonctionnement
Lors de son lancement, le programme (en python car il existe une très bonne librairie sous ce langage pour gérer l’i2c et aussi parce que je me suis fait engueuler par les pro-python comme quoi j’était un sale sectaire de communiste droggué du PHP 😀 ) i2c.py lance une boucle qui, toutes les 0.5 secondes vas interroger l’arduino en lui envoyant le texte “ping”, si il reçoit un numero de badge, il lance un fichier php du plugin yana.
Le fichier php vas verifier dans la base de donnée si le code existe pour un utilisateur, si c’est le cas il vas tracer l’entrée dans le log, puis ils retourne la réponse (code coorecte ou pas) au script python.
De son coté l’arduino interroge en temps réel le capteur blutooth, si un téléphone se connecte au capteur et lui envois un code, l’arduino vas stoquer ce code dans une file d’attente de “badge a verifier” et retournera ce code lors du prochain “ping” du script python.
Si le script python lui retourne une commande d’ouverture, l’arduino vas ouvrir un certain temps (2/3 secondes) son pin relié au relais (qui vas donc s’ouvrir aussi) ce qui coupe l’alimentation de la gâche électrique et qui déverrouille la porte.
Les améliorations
L’essentiel des améliorations a faire maintenant se situe du coté de l’appli android, celle ci étant un peu bugguée et pas encore très pertinente.
L’idéal serait qu’elle inclue un “timer” qui se connecte au bluetooth une fois par minute, cherche sur le périphérique de la porte est disponible, et ouvre la porte automatiquement si c’est le cas.
On ouvre qu’une fois la porte afin d’éviter qu’elle s’ouvre non stop qu’on on est dans l’appart, mais on continue a checker toutes les minutes la présence de la porte.
Si la porte est indisponible pendant plus de 3 min, on part du principe qu’on est sortis de l’appart, la prochaine détection de porte l’ouvrira donc de nouveau.
Le must du must sera aussi d’ajouter une serrure RFID a la porte en cas de perte du portable ou de portable déchargé, je ferais peut être une troisième
partie la dessus un de ces 4.
Salut,
Ben y a eu du boulot ces derniers jours !!
Bravo ! 😀
Merci BEAUCOUP !!!
Je suis avec intérêt tes aventures dans le monde RPi Arduino.
YANA tourne chez moi formidablement bien.
Encore merci !! 🙂
Hello
Un digicode peut être intéressant.
-Pas besoin de clé ou de badge magnétique.
-Au quotidien on combiné code + détection bluetooth dés fois qu’un petit malin aurai matté le code, dans ce cas 2 chiffres et c’est ouvert
-On peut gérer des plages horaires sur certains code: ex femme de ménage.
-Un code genre superutilisateur en cas de d’urgence ou de téléphone hs
-Un code à usage unique, par exemple pour le livreur de bière.
Jluc
Le digicode comprends aussi quelques inconvénient :
Pas de possibilité d’utiliser le mode free hand
Obligation de fixer un boitier de l’autre coté de la porte (dans un immeuble ou en location c’est interdit) et ça nécessite de faire au moins un trou dans le mur.
Il est beaucoup moins sécurisé pour deux raisons :
– Le cadran est visible de l’extérieur, on sait donc tout de suite quel système est utilisé pour l’ouverture de la porte
– Les touches les plus usées, les plus sales etc… peuvent être interprétées comme faisant partie du code (a juste titre)
Hey voila la suite.
C’est génial mais pour ma part je reste bloquer à installation de Yana Bluetooth.
Il me met application non installé.
Wiko Cink Five avec Android 4.1.2 tester également sur nexus 5 même symptôme.
Concernant la vidéo j’ai une petite critique quand à la phase de test.
Habituellement ces toujours bien expliqué la je trouve çà, fait un peu à la va vite.
Le reste est parfait par contre.
Ou alors mon cerveau ne suis plus.
Ça doit être surement ça.
Ce qui veut dire que j’ai besoin de vacances.
Intéressant 🙂 , j’ai une gâche électrique, mais elle appartient a la copro …
Je me vois mal briser le mur pour choper les fils du système.
Pourquoi pas mettre une caméra sur le Raspberry avec OpenCV pour la reconnaissance facial en + de la détection de smarphone.
Dommage que je ne puisse pas tester pour le moment, mon coucou tourne encore sous Bada 🙂
Bonne continuation 😀
Très très bien ce tutoriel, vraiment très intéressant! Et vraiment drole cette vidéo, ça me manquait.
Merci et bonne continuation
I2C pour une communication entre seulement 2 appareils? Feignasse! C’était trop chiant à configurer l’UART ou la SPI ? :p
Je trouve l’i2c bien plus puissant, plus rapide et plus simple a utiliser. J’utilise un seul périphériue dessous pour l’exemple et pour le moment, mais je compte bien passer par là pour tous mes prochains périphériques filaires 🙂
L’UART ça permettrait d’utiliser des transmetteurs RF! 😀
Cela permettrait aussi de laisser l’arduino gérer la connexion car le RPI ne peut pas être esclave en mode I2C (Linux est rebelle! 🙂 ), le RPI n’aurait plus qu’à traiter ce qui entrerait dans une FIFO (pour les amoureux des économies de ressources CPU, il y a la magie du DMA qui permet de prendre ce qui se passe sur un périph –genre I2C, SPI, UART, etc– et de le ranger dans un fichier).
?? pas compris le rapport entre l’uart et le kit rf ^^, peux tu détailler ?
Pour le mode esclave en uart, j’ignorais que le pi l’autorisait , effectivement c’est intéressant 🙂
Le trip RF c’est que j’ai quelques modules RF (et plus encore!) en UART (de récup’, j’avoue :siffle: ). Mais il est vrai que généralement c’est par GPIO libre.
Le Pi ne se comporte pas tout à fait “en esclave”, car on ne peut pas multiplier (sans bricole) les périph’ sur la ligne; le “mode esclave” est alors purement logiciel (perso je suis partisan de la parité).
Par contre pour de ma domotique je préfère confier la totalité du système à l’arduino/PIC qui se comporte alors en master sur l’I2C et occupe un minimum le Raspberry (qui plus est comme je n’utilise l’UART que pour le Pi, je peux donc gérer les interruptions/DMA comme bon me semble pour la jouer “dans les règles de l’art” des deux côtés).
Par contre je suis d’accord sur le fait que l’I2C, c’est cool 🙂
Arduino c’est pas encore pour moi, mais je remarque dans la vidéo des changement dans l’interface de Yana 🙂 ..
Salut Idle !
J’aurais une question, dans tes tutos, tu utilises quel diamètre de fil électrique pour tes soudures ?
Car il y a une infinité de diamètre et je ne sais pas quoi prendre, pourrais-tu m’éclairer stp ?
Le diametre importe peu tant que tu reste dans du petit gabarit du type 1mm de diametre 🙂
J’attendais avec impatience la suite de ton tuto 😉
Je sais je suis un peu long ^^, mais c’est la faute d’ebay et ses delais d’un mois de livraison pour se rendre compte que le composant acheté n’est pas le bon 😀
Ah.Un nouveau tuto 😀 .
Cool!Des nouveautés.
Merci! 🙂
Génial ! J’avais peur que cette magnifique série de tutos ait été abandonnée…
Dans le code le l’ardui, le temps d’ouverture est initialisé à 50s et non à 5s, rien de grave !
Je suis en plein aménagement d’un loft, et je crois que ce sera un véritable nid à microcontrôleurs, c’est tellement puissant pour seulement quelques € que ça me donne le vertige 😀
Salut Idleman !
Déjà bravo pour ton travail que je suis de prêt 🙂
Je voulais savoir quelle distrib’ tu utilises pour tout tes projets ? Il me semble que c’est Raspbian mais tu l’utilises tel quel à l’installation ou tu as remodifié ? (Genre suppression de l’interface graphique …)
Si un jour tu peux nous faire un petit truc sur Archlinux ça m’intéresse 🙂
Voilà merci d’avance de ta réponse 🙂
C’est raspian oui :), et je passe par un client ssh n’ayant pas d’écran alloué a mon pi, d’ou le manque d’interface graphique sur mes screenshots :), celà dit c’est vrai qu’on pourrait carrément la dégager pour l’utilité qu’on en a ^^.
Hey Idle,
Je suis ton blog depuis longtemps et je m’intéresse tout particulièrement au R-Pi, je retape une maison et je souhaite la domotiser. Je suis un gros bricoleur, mais je ne code pas super bien … Par contre si tu veux un conseil sur cette porte domotique, moi j’ai choisi le mode secure pour éviter les cambriolage par coupure électrique mais j’ai rajouté une clenche à l’intérieur, comme ça on peut quand même sortir. En fait je me suis inspiré de ce qui se fait sur les portes d’immeubles.
Oui je me suis fait la même reflexion quelques jours après le tuto ^^, seule faille de ce système : si tu as le feu et que tu es bloqué (mourant, évanoui etc..) a l’intérieur, les pompiers ne peuvent pas intervenir sans défoncer ta porte (ce qui te laisse quelques minutes de plus au chaud)
Fais gaffe, ton IP publique est visible sur la vidéo …
Sinon super tuto, comme d’hab !
Je vous présente l’avancement de mon bar automatique géré via un raspberry https://www.youtube.com/watch?v=UOFhQZektTI
dsl de poster ici mais on peut pas poster sur le forum.
salut idle 🙂
petite question d’un zéro en programmation…
est ce que tu pense que si j’utilise une carte de type Gertboard (ATmega328 embarqué)
j’arriverai au même résultat sans grosse modification des fichiers ou c’est une illusion totale ?? ^^
bonjour
pour le i2c pour quoi tu a pas utiliser ceci
http://www.ebay.fr/sch/i.html?_odkw=sparkfun+logic+level+converter+-+bi-diectional&LH_PrefLoc=2&_from=R40%7CR40&_osacat=0&_from=R40&_trksid=p2045573.m570.l1313.TR0.TRC0.H0.Xsparkfun+logic+level+converter++bi-diectional&_nkw=sparkfun+logic+level+converter++bi-diectional&_sacat=0
j’avoue le lien et un peu indigeste désoler
trouver l’astuce sur le hackable no4
a bientot
Effectivement le sda et scl sont inversés sur le schéma (source : http://f-leb.developpez.com/tutoriels/arduino/bus-i2c/) .
En ce qui concerne l’architecture matérielle, le câblage est très simple. Ceux qui disposent de l’Arduino Uno ou d’une carte compatible utiliseront les connecteurs A4 pour SDA (les données) et A5 pour SCL (l’horloge) :
Image non disponible
Si vous utilisez une carte Arduino Mega, SDA est sur le connecteur 20 et SCL sur le connecteur 21.
Daniel.
Merci beaucoup!
Tu aurais pu n’utiliser que le Rpi au lieu d’y ajouter l’Arduino
Pourquoi tous deux les utiliser ?