Mes premiers essais
J'ai découvert grâce a internet ce petit
module qui permet de mettre du wifi sur des tas de montages ce qui permet de connecter des objets sur internet.
He bien c'est ce que j'ai commencé a faire avec un thermomètre qui surveille la température du frigo, pour cela j'ai utilisé le plus petit ESP de la gamme le
8266-01.
Le problème c'est que dans le frigo le montage est alimenté par des piles et lorsqu'il ce connecte au wifi il consomme plus de 200ma donc une mesure toute les 8 heures suffit amplement sinon les piles ne vont pas durer bien longtemps.On peut plonger l'ESP dans un sommeil profond ou il ne consomme que quelques microampères mais pas plus de 35mn avec les anciens firmware avec la fonction node.dsleep().Donc pour plusieurs heures j'ai contourné le problème avec le module de RTC de mémoire utilisateur qui survit au sommeil profond. Pour cela il faut charger le module RTCmem dans le firmware sur le site (par exemple)
http://nodemcu-build.com/.
Il faut aussi au préalable souder un petit fil entre une patte du processeur et RST voir
http://hackaday.com/2015/02/08/hack-allows-esp-01-to-go-to-deep-sleep/ c'est pas facile facile mais avec un bon fer a souder avec une panne très fine et bien propre ,une bonne vue et une main sure c'est faisable ,je l'ai fait sur plusieurs sans problèmes.
Voila donc le programme init.lua:
- val = rtcmem.read32 ( 0 ) --utilise memoire 0
- if (val>15)then
- rtcmem.write32 ( 0 , 0 )
- sleep_time =1 * 1000 * 1000 --1secondes
- tmr.alarm(2, 5000, 0, function() node.dsleep(sleep_time)end)
- elseif (val<0)then
- rtcmem.write32 ( 0 , 0 )
- sleep_time =1 * 1000 * 1000 --1secondes
- tmr.alarm(2, 5000, 0, function() node.dsleep(sleep_time)end)
- else
- if (val==15) then -- pour 8heures
-
- dofile('mesuretemp.lua')
- else
- val=val+1
- rtcmem.write32 ( 0 ,(val))
- sleep_time =1800* 1000 * 1000 --30minutes
- tmr.alarm(2, 5000, 0, function() node.dsleep(sleep_time)end)
- end
- end
programme mesuretemp.lua
- t=require("ds18b20")
- wifi.setmode(wifi.STATION) -- Wifi en mode station
- cfg = { ip="192.168.0.27", netmask="255.255.255.0", gatway="192.168.0.1"}
- wifi.sta.setip(cfg) -- on force l'adresse IP en dehors de la plage du DHCP
- wifi.sta.config("votre reseau,"la cle")
- print ("Config fait, IP est" ..wifi.sta.getip ())
- print(wifi.sta.getmac())
- t1=string.format( "%.1f",t.readNumber(4))
- --t1=20
- print("Temp:"..t1.." C\n")
- -- tempe="TEMPE" ..t1..""
- cu=net.createConnection(net.UDP) -- connexion Socket UDP
- cu:connect(5666,"192.168.0.20") -- Port d'écoute 5666 et adresse du serveur
- tmr.alarm(0,2000, 1, function()
- cu:send (" temperature du frigo = "..t1)
- end) -- lecture capteur
- val=val+1
- rtcmem.write32 ( 0 ,(val))
- sleep_time =1800* 1000 * 1000 --30minutes
- tmr.alarm(2, 5000, 0, function() node.dsleep(sleep_time)end)
programme ds18b20
- -- DS18B20 one wire module for NODEMCU
- -- LICENCE: http://opensource.org/licenses/MIT
- -- Vowstar <vowstar@nodemcu.com>
- -- Dramatic simplification: Peter Scargill
- --------------------------------------------------------------------------------
- -- Set module name as parameter of require
- local modname = ...
- local M = {}
- _G[modname] = M
- --------------------------------------------------------------------------------
- -- Local used modules
- --------------------------------------------------------------------------------
- -- Table module
- local table = table
- -- String module
- local string = string
- -- One wire module
- local ow = ow
- -- Timer module
- local tmr = tmr
- -- Limited to local environment
- setfenv(1,M)
- --------------------------------------------------------------------------------
- -- Implementation – you don’t get any shorter than this
- --------------------------------------------------------------------------------
- function readNumber(pin)
- ow.setup(pin)
- ow.reset(pin)
- ow.write(pin, 0xCC, 1)
- ow.write(pin, 0xBE, 1)
- data = nil
- data = ""
- for i = 1, 2 do
- data = data .. string.char(ow.read(pin))
- end
- t = (data:byte(1) + data:byte(2) * 256) / 16
- if (t>100) then
- t=t-4096
- end
- ow.reset(pin)
- ow.write(pin,0xcc,1)
- ow.write(pin, 0x44,1)
- return t
- end
- -- Return module table
- return M
Voila, les valeurs de la température sont envoyées sur un serveur a base de raspberry2 toutes les 8 heures qui me prévient par un mail si la température dépasse les 10°C.
Je suis électronicien de base et non informaticien donc les programmes ne sont sans doute pas fait dans les règles de l'art mais ça fonctionne et c'est bien là le principal.
Bonnes bidouilles