Transformons un petit ESP8266 (version ESP12) en capteur d’ouverture de porte. Je passe sur le script init.lua destiné à initialiser la connexion Wifi par exemple, vous en trouverez un exemple sur ce billet.
Voici le script que j’ai appelé contactESP2.lua, on se retrouve après pour détailler son fonctionnement :
-- on active le GPIO4 en entree gpio.write(2, gpio.LOW) gpio.mode(2, gpio.INT, gpio.PULLUP) -- contact porte ferme par defaut ouvert = 0 cu = nil -- -- nom = nom du capteur -- porttcp = port TCP d'émission de trame si détection d'ouverture -- portudp = port UDP d'écoute des trames de status -- ip = adresse IP du serveur TCP Raspi Domo en écoute -- nom = "sonde1" porttcp = 5665 portudp = 5665 ip = "192.168.1.60" print(nom .. "/n") function contact(level) -- on lit le contact du gpio4 etat = gpio.read(2) if etat == 1 then ouvert = 1 print('PORTE OUVERTE') cu=net.createConnection(net.TCP) cu:on("receive",function(cu,c) print(c) end) cu:connect(porttcp,ip) -- connexion du port tcp sur l'ip choisie cu:send(nom .. "\n") -- envoi du code du capteur suivi d'un retour ligne tmr.delay(1000000) else ouvert = 0 end end -- configuration port gpio 4 en entree gpio.trig(2, "both", contact) -- si changement etat on lance la fonction contact -- si on emet une trame udp "sat"+nom du capteur sur le port udp sélectionné -- la sonde repond par "ok" suivi du nom du capteur s=net.createServer(net.UDP) s:on("receive",function(s,c) print(c) if c == "stat" .. nom then print('status sonde ok') cu=net.createConnection(net.TCP) cu:connect(porttcp,ip) cu:send("ok".. nom .. "\n") end end) s:listen(portudp)
Et voilà, de retour, c’est long, oui je sais 😉
Branchez un contacteur de porte sur le port GPIO4 de votre ESP 12 (j’ai utilisé cette version pour éviter certains bugs logiciels au boot) d’un coté, sur GND (la masse) de l’autre.
Dans notre exemple, lorsque le contact s’ouvre (= port ouverte), une trame “sonde1” est envoyée sur l’ip 192.168.1.60 port TCP 5665. Si j’envois une trame “statsonde1” sur le port UDP 5665, la sonde va me répondre “oksonde1” sur son port TCP 5665.
Bien entendu, tout se configure :
- le port TCP
- le port UDP
- l’IP du serveur qui va recevoir les trames (j’ai programmé un Raspberry Pi en Python3 pour cela)
On peut faire différent, et imaginer par exemple recevoir l’impulsion de détection d’un capteur de mouvement, lui aussi alimenté en 3.3v si je ne m’abuse, un peu ce genre de platine :
La fonction d’interrogation de la sonde est un gadget, mais cela peut être utile si vous souhaitez demander à votre domotique de surveiller régulièrement le fonctionnement des différents capteurs : c’est mieux qu’un ping, et on peut au besoin envoyer d’autres informations, comme avec cette sonde de température domotique que Blogwifi vous avait présentée par le passé.
L’ESP12 disposant de multiples GPIO, vous devriez pouvoir rajouter d’autres possibilités de détection en parallèle avec le GPIO4. A vous de jouer, n’hésitez pas à faire part de vos expériences dans les commentaires.
Commentaires fermés.