ESP8266 : détecteur d’ouverture

Avec le développement de mon RaspiDomo, le branchement de détecteurs d’ouverture est rapidement arrivé à l’ordre du jour. Comme je n’ai pas envie de tirer des fils de partout, la solution totalement connectée semble la plus intéressante : tout passe via le réseau ethernet ou WiFi, un réseau sauvegardé et protégé, et donc impossible à interrompre par le cambrioleur de base.

nodemcu

C’est ici que va intervenir le petit ESP8266, associé à un bout de code Lua que nous allons injecter dans init.lua pour qu’il se lance dès la mise sous tension :

-- connexion au reseau wifi
wifi.sta.config("nom_du_reseau","password")
wifi.sta.connect()
tmr.delay(1000000)
print(wifi.sta.status())
print(wifi.sta.getip())
-- contact porte ferme par defaut
ouvert = 0
function contact(level)  -- on lit le contact du gpio3
  etat = gpio.read(3)
  if etat == 1 then
    ouvert = 1
    print('PORTE OUVERTE')
    cu=net.createConnection(net.UDP)
    cu:on("receive",function(cu,c) print(c) end)
    cu:connect(5665,"192.168.1.124") -- envoi port 5665 udp a l ip 192.168.1.124
    -- code ouvertA et retour ligne
    cu:send("ouvertA\n")
  else ouvert = 0
  end
  end
-- configuration port gpio 3 en entree
gpio.mode(3, gpio.INT, gpio.PULLUP)
gpio.trig(3, 'down', contact)  -- si changement etat on lance la fonction contact

Sur la platine d’expérimentation Nodemcu, voici le branchement du contact de fermeture :

esp8266_ouverture

En bas à gauche, la masse (GND), en haut à droite, 4ème broche en partant de la droite, GPiO3. Lorsque le port est lu, à l’intérieur de la fonction contact, la valeur 1 est retournée si le contact est ouvert, 0 s’il est fermé.

En cas d’ouverture, nous indiquons PORTE OUVERTE et émettons une trame ouvertA sur le port UDP 5665, à destination de l’IP de notre Raspberry Pi, 192.168.1.124 (à adapter selon VOTRE configuration donc).

Coté Raspberry Pi, il va nous falloir recevoir cette trame avec un bout de code python, à placer dans udp.py par exemple :

import socket
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.bind( ('',5000) )

while True:
    data, addr = sock.recvfrom(1024)
    data = str(data, encoding='utf8')
    if "ouvertA" in data:
      print ("PORTE OUVERTE")

que vous allez lancer avec un sudo python udp.py.

A vous désormais de tester avec un ou plusieurs capteurs d’ouverture connectés au WiFi de votre box internet, et de programmer des actions sur le Raspberry Pi : alerter par email, alerter par SMS, etc.

 

Publications similaires

2 commentaires

  1. Bonjour,
    Comment faire pour envoyer l’état du capteur vers un autre esp8266 (récepteur) en wifi et monter un gpio en sortie sur le esp8266 récepteur
    Merci

Les commentaires sont fermés.