Cet interrupteur connecté vous permettra de notifier les autres utilisateurs que votre FabLab est ouvert ou fermé grâce à une carte ou un badge NFC.
Matériel :
* Un ESP8266 (NodeMCU ou Wemos Mini D1)
* Une carte NFC
* Une platine NFC de type MRC-522
* Un anneau de Leds de type NéoPixel
Étapes du projet
-
Étape 1
Le boitier
Un simple boitier rond, fendu sur le dessus pour laisser rentrer la carte NFC. Le disque se met devant et la platine NFC en appui derrière la fente pour permettre de détecter le passage de la carte.
On remarque trois trous dans l'arrière du boitier pour fixer au mur et deux sur les côtés pour rendre les deux parties solidaires.
-
Étape 2
Le montage électronique
Par rapport à la version 1 du boitier, il faut câbler le lecteur RFID. Attention, il y a deux versions qui se ressemblent beaucoup mais l'une est de mauvaise qualité et ne lit pas toutes les cartes RFID. Cela vient de la qualité de l'antenne dessus et des condensateurs dessus. Une méthode pour les reconnaître, l'écriture du nom des condensateurs et résistances sur la carte. Si les noms sont tous vers l'intérieur, du côté de contrôleur, vous êtes en possession d'une version de mauvaise qualité.
RC522 - VCC --> 3,3V ESP8266
RC522 - RST --> D1 ESP8266 (GPIO 5)
RC522 - GND --> G ESP8266
RC522 - MISO --> D2 ESP8266 (GPIO 4)
RC522 - MOSI --> D4 ESP8266 (GPIO 2)
RC522 - SCK --> D3 ESP8266 (GPIO 0)
RC522 - SDA (ou CS) --> D5 ESP8266 (GPIO 14)NEOPIXEL 5V --> 3,3V ESP8266
NEOPIXEL GND --> G ESP8266
NEOPIXEL DI (IN) --> D6 ESP8266 (GPIO)
(Les couleurs représentent les fils sur le schéma de câblage)
-
Étape 3
Le code Python
import mfrc522 from os import uname import network, machine, time import urequests as requests import neopixel import network, machine, time url_users='https://pastebin.com/raw/<CodeDuPastebin>' url_ntfy='http://ntfy.sh/<SujetAbonné>' url_ntfy_new='<http://ntfy.sh/<SujetNouvellesCartes>' #Nbre de led Neopixels nbr_leds=16 #OnBoard led pour v茅rifier si l'esp se connecte led = machine.Pin(2, machine.Pin.OUT) #NeoPixel sur pin D6: ring = neopixel.NeoPixel(machine.Pin(12), nbr\_leds) couleurs=[(255, 102, 0), (255, 0, 102),(153, 51, 255),(0, 0, 255),(63, 255, 63)] #Petite animation de lancement for c in couleurs: for k in range(nbr\_leds): ring[k] = c ring.write() time.sleep(0.1) sta_if=network.WLAN(network.STA\_IF) if not sta_if.isconnected(): sta_if.active(True) sta_if.connect('SSID_DU_WIFI','MotDePasseDuWifi') while not sta\_if.isconnected(): pass print(sta_if.ifconfig()) users={} try: res = requests.get(url_users) for user in (res.text).split('\n'): users[user.split(':')[0]]=user.replace('\r','').split(':')[1] print(users) except: c=(128,63,0) for k in range(nbr\_leds): ring[k] = c ring.write() time.sleep(0.1) pass #Sous la forme : sck, mosi, miso, rst, cs #CS est noté SDA sur la plupart des cartes rdr = mfrc522.MFRC522(0, 2, 4, 5, 14) rdr.antenna_on() state=0 user_in='' try: while True: (stat, tag\_type) = rdr.request(rdr.REQIDL) if stat == rdr.OK: (stat, raw\_uid) = rdr.anticoll() if stat == rdr.OK: u="0x%02x%02x%02x%02x%02x" % (raw\_uid[0], raw\_uid[1], raw\_uid[2], raw\_uid[3], raw\_uid[4]) try: #Si l’utilisateur existe il est pris en compte utilisateur=users[u] except: #Si l’utilisateur n’existe pas il est appelé “Quelqu’un” utilisateur="Quelqu'un" post\_data=(u).encode('utf-8') #Comme c’est un nouvel utilisateur son numéro de carte est envoyé sur le salon dédié pour être envoyé sur res = [requests.post](http://requests.post)(url\_ntfy\_new, data = post\_data) if state==1 and utilisateur==user\_in: state=0 user\_in='' post\_data=("🔴 "+utilisateur+" vient de fermer le FabLab").encode('utf-8') couleur=(255,0,0) #Rouge elif state==1 and utilisateur!=user\_in: state=1 user\_in=utilisateur post\_data=("🟢 "+utilisateur+" vient de prendre la responsabilité du FabLab").encode('utf-8') #Petite anim pour montrer que le changement de responsabilité a été pris en compte couleur=(0,255,0) #Vert for i in range(2): for k in range(nbr\_leds-1): ring[k] = couleur if couleur==(0,255,0): couleur=(255,0,0) else: couleur=(0,255,0) ring.write() time.sleep(0.1) couleur=(0,255,0) #Vert else: state=1 user\_in=utilisateur couleur=(0,255,0) #Vert post\_data=("🟢 "+utilisateur+" vient d'ouvrir le FabLab").encode('utf-8') res = [requests.post](http://requests.post)(url\_ntfy, data = post\_data) for i in range(2): for k in range(nbr\_leds): ring[k] = couleur ring.write() time.sleep(0.1) except KeyboardInterrupt: print("Bye") | -
Étape 4
Héberger les cartes reconnues
Chaque carte possède un numéro de série, nous pourrions les inscrire en "dur" dans le code python pour valider les présences :
- 0x90e0d5588d:Jean-Paul
- 0x93574a36c8:Jawad
- 0x7ac3df1a78:Lilou
- 0x92deb30df2:Tom
Le souci c'est que toute nouvelle personne vous devriez reprendre le code python, la rajouter et renvoyer votre code Python dans votre microcontrôleur.
Pour cela j'ai opté pour un stockage des numéros et noms en ligne. J'ai essayé plusieurs service d'hébergement (google drive, anotepad...) mais j'ai été confronté à des soucis avec la librairie urequest qui ne pouvait charger les pages pour des raisons de certificats non compatibles. En revanche Pastebin.com lui peut être consulté par l'ESP au format brut (raw).
Rendez-vous sur le site, inscrivez-vous pour pouvoir revenir ajouter des comptes au fur et à mesure.
Passez votre pastebin en Unlisted et donnez lui un nom pour le reconnaitre.
Une fois cliqué sur "Create" vous allez être redirigé vers la page de votre pastebin. Le lien est de la forme : https://pastebin.com/M9eGvFxS . Pour obtenir la version "brute", c'est-à-dire le texte seulement, transformez le lien en rajoutant raw : https://pastebin.com/raw/M9eGvFxS Vous avez votre constante url_users à mettre dans votre code python.
-
Étape 5
L'application web ou mobile
Vous avez deux possibilités : l'application mobile ou l'application internet.
Vous avez choisi deux noms de fils à suivre dans votre programme Python :
url_ntfy='http://ntfy.sh/<SujetAbonné>'
url_ntfy_new='http://ntfy.sh/<SujetNouvellesCartes>'Le premier url_ntfy vous permettra de suivre qui a badgé mais si c'est une carte inconnue, le programme écrira "Quelqu'un". A ce moment là, vous recevrez un message sur le second fil url_ntfy_new avec le numéro de la carte qui a badgé, il vous permettra alors de mettre à jour votre fichier pastebin.
L'application mobile :
Rendez-vous sur le store de votre téléphone et installé l'application ntsy.sh.
Au lancement vous trouverez un signe "+" permettant de rajouter un fil à suivre, rentrez celui que vous avez déclaré dans votre programme Python.
N'oubliez pas d'activer les notifications en haut.
La web app (ou application internet):
Vous pouvez directement vous rendre sur la page https://ntfy.sh/app choisir "S'abonner à un sujet" en bas à gauche de la page et saisir le fil que vous avez intégré dans votre script Python.
-
Étape 6
Résultat final
-
Étape 7
Evolutions possibles
Le prochain objectif est juste un boitier permettant de comptabiliser le nombre total de personnes passant dans le lieu, le temps moyen passé, ... avec un affichage sur un écran.
Commentaires (0)
Aucun commentaire pour le moment.