Pour éditer le wiki, il faut demander un compte à un Lapin !

Difference between revisions of "LeLoopRFID rue Chapon"

From Le L∞p's Wiki
Jump to: navigation, search
(Electronics)
(Wikify is massive)
Line 1: Line 1:
= @ Rue Chapon =
+
LeLoopRFID, c'est notre propre système RFID qu'on pose là où on veut. Des fois on arrive dans un lieu déjà équipé en [[:Category:RFID|contrôle d'accès par RFID]], mais celui-là c'est mon mien à moi.
 
+
TODO:
+
* agrémenter le code et les commandes associées
+
** implémenter ArgParse, créer une méta commande de contrôle...
+
* écrire une API RESTful (vive bottle.py)
+
* écrire un bot IRC (non-public) ?
+
* ajouter des photos du montage ici
+
  
 
== RFID Reader ==
 
== RFID Reader ==
Line 24: Line 17:
 
== Code ==
 
== Code ==
  
Dispo sur Github : https://github.com/LeLoop/LeLoopRFID
+
* Github : https://github.com/LeLoop/LeLoopRFID
et sur Gitorious : https://gitorious.org/~le-loop/le-loop-rfid
+
* Gitorious : https://gitorious.org/~le-loop/le-loop-rfid
  
=== explications de texte ===
+
=== LeLoopRFID.pde ===
  
==== LeLoopRFID.pde, code source embarqué dans l'Arduino ====
+
Code source embarqué dans l'Arduino.
  
 
Il commence par 5 fonctions de contrôle de l'environnement :  
 
Il commence par 5 fonctions de contrôle de l'environnement :  
* les beeps, ''death_beep()'', ''coin_beep()'', ''mushroom_beep()'', ''high_beep()''
+
* les beeps, <tt>death_beep()</tt>, <tt>coin_beep()</tt>, <tt>mushroom_beep()</tt>, <tt>high_beep()</tt>
* l'allumage de la diode ''set_led()/reset_led()'' et  
+
* l'allumage de la diode <tt>set_led()/reset_led()</tt> et  
* l'ouverture de la porte ''open_door()''.
+
* l'ouverture de la porte <tt>open_door()</tt>.
  
Ensuite on retrouve la fonction, de setup du réseau, ''ether_setup()'', qui initialise la shield Ethernet et ouvre une socket serveur (192.168.42.242:4242). La LED est allumée au démarrage pendant l'initialisation du réseau.
+
Ensuite on retrouve la fonction, de setup du réseau, <tt>ether_setup()</tt>, qui initialise la shield Ethernet et ouvre une socket serveur (192.168.42.242:4242). La LED est allumée au démarrage pendant l'initialisation du réseau.
  
 
Enfin, arrivent les deux fonctions de base d'un sketch Arduino :
 
Enfin, arrivent les deux fonctions de base d'un sketch Arduino :
* ''setup()''
+
* <tt>setup()</tt>
  
qui va initialiser la connexion série pour le debug et appeler ''ether_setup()''.
+
qui va initialiser la connexion série pour le debug et appeler <tt>ether_setup()</tt>.
  
* et ''loop()''
+
* et <tt>loop()</tt>
  
 
qui va écouter sur la socket locale pour savoir si une requete est dans le buffer, et si tel est le cas, lire un caractère sur le buffer :
 
qui va écouter sur la socket locale pour savoir si une requete est dans le buffer, et si tel est le cas, lire un caractère sur le buffer :
 
** si ce caractère est '1' : on ouvre la porte avec un mushroom beep et la diode clignote une fois,
 
** si ce caractère est '1' : on ouvre la porte avec un mushroom beep et la diode clignote une fois,
** si ce caractère est '0' : on lance un ''death_beep()'' et la diode clignote deux fois.
+
** si ce caractère est '0' : on lance un <tt>death_beep()</tt> et la diode clignote deux fois.
  
 
Puis va demander à la lib rfid si un tag est passé, et si tel est le cas, se connecter au serveur distant et lui soumettre l'identifiant du tag.
 
Puis va demander à la lib rfid si un tag est passé, et si tel est le cas, se connecter au serveur distant et lui soumettre l'identifiant du tag.
  
==== leloop_rfid_model.py: bibliothèque servant de lien avec la base de données ====
+
=== leloop_rfid_model.py ===
 +
 
 +
bibliothèque servant de lien avec la base de données
  
 
On y retrouve "MembersDB" qui est l'objet de lien. Cet objet a trois méthodes :
 
On y retrouve "MembersDB" qui est l'objet de lien. Cet objet a trois méthodes :
* db = MembersDB(filename) initialise la connexion à la db ; filename est le chemin où stocker le fichier de base de données
+
* <tt>db = MembersDB(filename)</tt> initialise la connexion à la db ; filename est le chemin où stocker le fichier de base de données
* db.add_user(nick,id) ajoute un user en db, avec nick et id le pseudo et son tag associé
+
* <tt>db.add_user(nick,id)</tt> ajoute un user en db, avec nick et id le pseudo et son tag associé
* db.get_user(id) retourne un nick en fonction d'un id de tag. En cas d'échec retourne None.
+
* <tt>db.get_user(id)</tt> retourne un nick en fonction d'un id de tag. En cas d'échec retourne None.
  
==== leloop_rfid_add.py : pour ajouter un utilisateur en db ====
+
=== leloop_rfid_add.py ===
 +
 
 +
pour ajouter un utilisateur en db.
  
 
se contente d'implémenter MembersDB et prend l'argument 1 en pseudo et l'argument 2 en id de tag rfid :
 
se contente d'implémenter MembersDB et prend l'argument 1 en pseudo et l'argument 2 en id de tag rfid :
Line 64: Line 61:
 
  leloop_rfid_add.py toto 101010
 
  leloop_rfid_add.py toto 101010
  
==== leloop_rfid_open_door.py ====
+
=== leloop_rfid_open_door.py ===
  
bibliothèque et commande pour déclencher l'ouverture de la porte. Il suffit d'exécuter ce script pour que la porte soit ouverte. Mais on peut en exporter les deux fonctions ''open_door()'' et ''deny_entrance()'' pour les appeler à partir d'un autre code.
+
bibliothèque et commande pour déclencher l'ouverture de la porte. Il suffit d'exécuter ce script pour que la porte soit ouverte. Mais on peut en exporter les deux fonctions <tt>open_door()</tt> et <tt>deny_entrance()</tt> pour les appeler à partir d'un autre code.
  
==== leloop_check_entrance.py ====
+
=== leloop_check_entrance.py ===
  
 
Crée un serveur TCP sur 192.168.42.42:4242 et attend qu'y soit écrit des tags sous la forme :
 
Crée un serveur TCP sur 192.168.42.42:4242 et attend qu'y soit écrit des tags sous la forme :
Line 74: Line 71:
 
  CARD 101010
 
  CARD 101010
  
vérifie auprès de la db si l'identifiant est bien enregistré, puis logue sur stdout et appelle ''open_door()'' défini dans leloop_rfid_open_door.py si tel est le cas, ''deny_entrance()'' du meme module sinon.
+
vérifie auprès de la db si l'identifiant est bien enregistré, puis logue sur stdout et appelle <tt>open_door()</tt> défini dans leloop_rfid_open_door.py si tel est le cas, <tt>deny_entrance()</tt> du meme module sinon.
  
 
Ce script est aussi exécuté en daemon à partir du script init /etc/init.d/leloop-rfid sur le serveur.
 
Ce script est aussi exécuté en daemon à partir du script init /etc/init.d/leloop-rfid sur le serveur.
  
= @ Chateau Pirate =
+
== Todo ==
  
{{Attention|Les informations ci-dessous concernent l'ancienne installation au chateau}}
+
* agrémenter le code et les commandes associées
 
+
** implémenter ArgParse, créer une méta commande de contrôle...
== Arduino ==
+
* écrire une API RESTful (vive bottle.py)
* [http://www.stronglink.cn/english/SL030.htm Stronglink SL030]
+
* écrire un bot IRC (non-public) ?
** Black -> GND
+
* ajouter des photos du montage ici
** Vcc -> 3.3V (other end of the bus)
+
** CLK -> A4
+
** Data -> A3
+
 
+
[[File:LeLoopRFID_schematic.png|right|frame|Schematic of Relay Shield]]
+
  
== Shield Relay ==
+
== Voir aussi ==
  
* place shield on the 5V PIN on the lower left side
+
* [[LeLoopRFID au Château]]
* on the Analog ?? on the lower right side
+
* and both couple of pins on the top between the hole (6-7;8-9)
+
  
  
[[Category:RFID]] [[Category:Projets]]
+
[[Category:RFID]]
 +
[[Category:Projets]]

Revision as of 02:58, 6 August 2011

LeLoopRFID, c'est notre propre système RFID qu'on pose là où on veut. Des fois on arrive dans un lieu déjà équipé en contrôle d'accès par RFID, mais celui-là c'est mon mien à moi.

RFID Reader

  • Stronglink SL030
    • Black -> GND
    • Vcc -> 3.3V (other end of the bus)
    • CLK -> A4
    • Data -> A3

Electronics

  • one LED on PIN D8 and GND
  • one SPK on PIN D9 and GND
  • door line on PIN D2 and GND

Code

LeLoopRFID.pde

Code source embarqué dans l'Arduino.

Il commence par 5 fonctions de contrôle de l'environnement :

  • les beeps, death_beep(), coin_beep(), mushroom_beep(), high_beep()
  • l'allumage de la diode set_led()/reset_led() et
  • l'ouverture de la porte open_door().

Ensuite on retrouve la fonction, de setup du réseau, ether_setup(), qui initialise la shield Ethernet et ouvre une socket serveur (192.168.42.242:4242). La LED est allumée au démarrage pendant l'initialisation du réseau.

Enfin, arrivent les deux fonctions de base d'un sketch Arduino :

  • setup()

qui va initialiser la connexion série pour le debug et appeler ether_setup().

  • et loop()

qui va écouter sur la socket locale pour savoir si une requete est dans le buffer, et si tel est le cas, lire un caractère sur le buffer :

    • si ce caractère est '1' : on ouvre la porte avec un mushroom beep et la diode clignote une fois,
    • si ce caractère est '0' : on lance un death_beep() et la diode clignote deux fois.

Puis va demander à la lib rfid si un tag est passé, et si tel est le cas, se connecter au serveur distant et lui soumettre l'identifiant du tag.

leloop_rfid_model.py

bibliothèque servant de lien avec la base de données

On y retrouve "MembersDB" qui est l'objet de lien. Cet objet a trois méthodes :

  • db = MembersDB(filename) initialise la connexion à la db ; filename est le chemin où stocker le fichier de base de données
  • db.add_user(nick,id) ajoute un user en db, avec nick et id le pseudo et son tag associé
  • db.get_user(id) retourne un nick en fonction d'un id de tag. En cas d'échec retourne None.

leloop_rfid_add.py

pour ajouter un utilisateur en db.

se contente d'implémenter MembersDB et prend l'argument 1 en pseudo et l'argument 2 en id de tag rfid :

leloop_rfid_add.py toto 101010

leloop_rfid_open_door.py

bibliothèque et commande pour déclencher l'ouverture de la porte. Il suffit d'exécuter ce script pour que la porte soit ouverte. Mais on peut en exporter les deux fonctions open_door() et deny_entrance() pour les appeler à partir d'un autre code.

leloop_check_entrance.py

Crée un serveur TCP sur 192.168.42.42:4242 et attend qu'y soit écrit des tags sous la forme :

CARD 101010

vérifie auprès de la db si l'identifiant est bien enregistré, puis logue sur stdout et appelle open_door() défini dans leloop_rfid_open_door.py si tel est le cas, deny_entrance() du meme module sinon.

Ce script est aussi exécuté en daemon à partir du script init /etc/init.d/leloop-rfid sur le serveur.

Todo

  • agrémenter le code et les commandes associées
    • implémenter ArgParse, créer une méta commande de contrôle...
  • écrire une API RESTful (vive bottle.py)
  • écrire un bot IRC (non-public) ?
  • ajouter des photos du montage ici

Voir aussi