Le code du tuto se trouve ici : https://github.com/pihito/nodeMcuTutorial/blob/master/DHT.lua
Si vous n’avez jamais fait de lua, je vous conseille la lecture de ce site : http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/Introduction_Programmation.html
Et la sheet de synthèse : http://thomaslauer.com/download/luarefv51.pdf
a.Connexion au wifi :
Le code ci-dessous permet de se connecté au wifi, remarquez le 1 dans les paramètres de la fonction wifi.sta.config qui permet de connecter la node quand le wifi est à porté
–fonction de connexion au WIFI en mode station
function connect()
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD, 1)
wait_for_wifi_conn ( )
end
b.Attendre que le wifi soit connecté avant de continuer
Comme on ne connait la le temps de connection au wifi on réaliser un wathdog avec un timer pour suveiller que nous nous sommes connecté. Le timer utilise un callabck qui est ici réaliser à l’aide d’une fonction anonyme :
function wait_for_wifi_conn ( )
tmr.alarm (1, 1000, 1, function ( )
if wifi.sta.getip ( ) == nil then
print (“Waiting for Wifi connection”)
else
tmr.stop (1)
print (“ESP8266 mode is: ” .. wifi.getmode ( ))
print (“The module MAC address is: ” .. wifi.ap.getmac ( ))
print (“Config done, IP is ” .. wifi.sta.getip ( ))
…….
end
end)
end
Bien nous allons trarvailler cette fonction annonyme pour remplacer les « …. » par le lancement du serveur web.
c.Lancer le serveur et intercepter les demandes de connexion
Rien de plus simple, on a une fonction qui crée un serveur TCP puis on écoute le port 80 avec celui-ci (et le port 80 est le port standard du http hein). Dans la fonction d’écoute on passe le nom d’une fonction qui sera appelée en cas de connexion.
–lancement du serveur web
svr = net.createServer (net.TCP, 30)
svr:listen (80, http_conn)
d.Lire le capteur :
La lecture se fait via l’objet dht inclus dans le firmware de base. La seule particularité ici est dû au langage LUA qui permet à la fonction dht.read de retourner plusieurs paramètres en une seule fois.
–lecture du capteur de température
–pin : numéro de la patte ou est branche le capteur
–temp,humi temperature et humidite
function readDht(pin)
status,temp,humi,temp_decimial,humi_decimial = dht.read(pin)
if( status == dht.OK ) then
print(“DHT Temperature:”..temp..”;”..”Humidite”..humi)
elseif( status == dht.ERROR_CHECKSUM ) then
print( “DHT Checksum error.” );
elseif( status == dht.ERROR_TIMEOUT ) then
print( “DHT Time out.” );
end
return temp,humi
end
e.Traiter les clients :
C’est la fonction http_comm que j’ai créé qui se charge du traitement, elle prend une connexion, affiche l’entête http dans la console, envoie une réponse, une fois envoyé ferme la connexion. Tous cela utilise des callbacks avec des fonctions anonymes d’où l’intérêt de bien indenter le code.
— fonction de prise en charge des clients web, renvoie la pages HTML
function http_conn(sock)
sock:on(“receive”,function(sock,payload)
print(payload) — for debugging only
–generates HTML web site
temp,humi =readDht(PIN)
sock:send(……)
sock:on(“sent”,function(sock) sock:close() end)
end)
end
f.Envoyer la purée HTML
Il ne reste plus qu’à envoyer le HTML dans la fonction send, c’est du HTML standard. La seule particularité est la syntaxe ‘..variable..’ au milieu du code qui réalise une concaténation de la string et d’une variable avec l’opérateur ..
Je vous laisse regarder le code HTML dans le GitHub.
Et voilà….
Salut Seb, j'ai refait le montage ça marche nickel. Sur ton schéma il y a un petit bug sur le GND qui est mal cablé sur le schéma. Par contre quand je débranche le nodemcu du pc et que je le branche sur une alim de téléphone ça ne se connecte pas sur le wifi :S.
Merci pour le tuto en tout cas 🙂