Pour éditer le wiki, il faut demander un compte à un Lapin !
LeLoopRFID rue Chapon
@ Rue Chapon
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
- 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
Dispo sur Github : https://github.com/LeLoop/LeLoopRFID et sur Gitorious : https://gitorious.org/~le-loop/le-loop-rfid
explications de texte
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.
@ Chateau Pirate
Arduino
- Stronglink SL030
- Black -> GND
- Vcc -> 3.3V (other end of the bus)
- CLK -> A4
- Data -> A3
Shield Relay
- place shield on the 5V PIN on the lower left side
- on the Analog ?? on the lower right side
- and both couple of pins on the top between the hole (6-7;8-9)