Tous les capteurs reliés au RPI par Wifi avec module ESP8266
Modérateur : Francois
- Jean-Marie
- Raspinaute
- Messages : 240
- Enregistré le : sam. 24 janv. 2015 18:01
- Localisation : Arlon, Belgique
- Contact :
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Fidoboulettes
Je ne sais pas si cela a quelque chose à voir mais j'ai eu beaucoup de problèmes de flasher jusqu'au moment où SMBA38 m'a dit qu'il y avait peut-être interaction entre le portable (en Windows 8.1) et l'ESP.
En éloignant l'ESP de 2 mètres, l'expérience a été complètement différente.
Je ne sais pas si cela a quelque chose à voir mais j'ai eu beaucoup de problèmes de flasher jusqu'au moment où SMBA38 m'a dit qu'il y avait peut-être interaction entre le portable (en Windows 8.1) et l'ESP.
En éloignant l'ESP de 2 mètres, l'expérience a été complètement différente.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Jean-Marie,
en fait, c'est pas tant le flashage qui pose problème mais bien tout ce qui se passe après... envoi scripts, tests, stabilisation....
en fait, c'est pas tant le flashage qui pose problème mais bien tout ce qui se passe après... envoi scripts, tests, stabilisation....
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello à tous.
Une nouvelle version de NodeMCU est disponible celle du 25/06/2015.
https://github.com/nodemcu/nodemcu-firm ... v_20150625
Voici un tableau des différentes versions précédentes de NodeMcu . Au fur et à mesure des versions la taille de la pile (visualisable par print(node.heap()) était de plus en plus réduite.
Par exemple avec le package « bmp085.lua » (capteur I2C) il fallait compiler le package pour pouvoir l’exécuter.
La version compilée d'un programme Lua -> node.compile("xxx.lua") genère un fichier xxx.lc qui occupe moins de place en mémoire.
Il existe deux versions de firmware de NodeMcu la version Integer et la version float(float+integer).
La version Float permet de manipuler des nombre entiers et des nombres flottants.
Avant la version du 25/06/2015 le package bmp085 ne pouvait pas s’éxecuter en float.
Avec la version Float il est surement possible de réduire la taille du code du package bmp085 en le réécrivant.
A partir de la version du 25/06/2015 la taille de la pile a fortement augmentée et il est possible d’exécuter le package bmp085.lua sans compilation en mode integer ou float.
NodeMcu n'utilise pas les dernières versions du SDK d'expressif, il utilise la version 0.9.6 (la dernière version du SDK est la 1.1.2)
Au fur et à mesure des versions du SDK celui ci prend de plus en plus de place en mémoire, c'est peut-être pour cette raison que NodeMcu reste à la version 0.9.6.
J'ai seulement testé la partie compilation de la nouvelle version et je ne peux pas confirmer si cette nouvelle version pose moins de problèmes de stabilité.
Sur le Web on trouve pas mal de critiques sur NodeMcu est Lua, par exemple.
4 raisons pour abandonner NodeMcu http://internetofhomethings.com/homethings/?p=424
C'est dommage car Lua est un langage orienté réseau qui permet de programmer avec peu de lignes de code toute la partie communications.
Lua est un langage compilé (pseudo code).
Il existe d'autres solutions pour utiliser les puces ESP8266 avec un vrai compilateur.
Directement en C.
Avec l'IDE ESP8266 / Arduino .
Il semble que l’on puisse appeler depuis Lua des modules développés en C (non testé).
SMBA38
Une nouvelle version de NodeMCU est disponible celle du 25/06/2015.
https://github.com/nodemcu/nodemcu-firm ... v_20150625
Voici un tableau des différentes versions précédentes de NodeMcu . Au fur et à mesure des versions la taille de la pile (visualisable par print(node.heap()) était de plus en plus réduite.
Par exemple avec le package « bmp085.lua » (capteur I2C) il fallait compiler le package pour pouvoir l’exécuter.
La version compilée d'un programme Lua -> node.compile("xxx.lua") genère un fichier xxx.lc qui occupe moins de place en mémoire.
Il existe deux versions de firmware de NodeMcu la version Integer et la version float(float+integer).
La version Float permet de manipuler des nombre entiers et des nombres flottants.
Avant la version du 25/06/2015 le package bmp085 ne pouvait pas s’éxecuter en float.
Avec la version Float il est surement possible de réduire la taille du code du package bmp085 en le réécrivant.
A partir de la version du 25/06/2015 la taille de la pile a fortement augmentée et il est possible d’exécuter le package bmp085.lua sans compilation en mode integer ou float.
NodeMcu n'utilise pas les dernières versions du SDK d'expressif, il utilise la version 0.9.6 (la dernière version du SDK est la 1.1.2)
Au fur et à mesure des versions du SDK celui ci prend de plus en plus de place en mémoire, c'est peut-être pour cette raison que NodeMcu reste à la version 0.9.6.
J'ai seulement testé la partie compilation de la nouvelle version et je ne peux pas confirmer si cette nouvelle version pose moins de problèmes de stabilité.
Sur le Web on trouve pas mal de critiques sur NodeMcu est Lua, par exemple.
4 raisons pour abandonner NodeMcu http://internetofhomethings.com/homethings/?p=424
C'est dommage car Lua est un langage orienté réseau qui permet de programmer avec peu de lignes de code toute la partie communications.
Lua est un langage compilé (pseudo code).
Il existe d'autres solutions pour utiliser les puces ESP8266 avec un vrai compilateur.
Directement en C.
Avec l'IDE ESP8266 / Arduino .
Il semble que l’on puisse appeler depuis Lua des modules développés en C (non testé).
SMBA38
Modifié en dernier par smba38 le sam. 27 juin 2015 09:19, modifié 1 fois.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour SMBA,
là tu m'as redonné de l'espoir....
Alors, très rapidement, j'ai reflashé l'ESP avec cette version (après avoir flashé avec ton blank512).... et après avoir relancé plusieurs fois la connection (connection/déconnection clé FTDI, Reset, CH_PD)
j'ai quelque chose qui semble stable... même après plusieur re-set via Esplorer...
Ai pu envoyer:
-Initi.lua (connection au wifi)
-I2c_scanner(ben la c'est clair je crois...
)
-Bmp085.lua (ta deuxième version)
-fido.lua (ou je fais des envois vers Thinkspeak)
Maintenant, les valeurs de données (temp et pressions) sont pour le moins bizarre... je pense que le script ne fait pas appel aux bonne données... je vais essayer de repartir sur le script de base pour voir ce que ça donne....
Un grand merci à toi.
là tu m'as redonné de l'espoir....
![Très content :D](./images/smilies/icon_e_biggrin.gif)
Alors, très rapidement, j'ai reflashé l'ESP avec cette version (après avoir flashé avec ton blank512).... et après avoir relancé plusieurs fois la connection (connection/déconnection clé FTDI, Reset, CH_PD)
j'ai quelque chose qui semble stable... même après plusieur re-set via Esplorer...
Ai pu envoyer:
-Initi.lua (connection au wifi)
-I2c_scanner(ben la c'est clair je crois...
![Clin d’œil ;)](./images/smilies/icon_e_wink.gif)
-Bmp085.lua (ta deuxième version)
-fido.lua (ou je fais des envois vers Thinkspeak)
Maintenant, les valeurs de données (temp et pressions) sont pour le moins bizarre... je pense que le script ne fait pas appel aux bonne données... je vais essayer de repartir sur le script de base pour voir ce que ça donne....
Un grand merci à toi.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Bonjour à tous,
donc effectivement, je confirme que cette nouvelle version est bien plus stable en ce qui me concerne... malgré quelques moment ou je n'arrive plus à reprendre la main sans de-connecter/re-connecter le CH_PD... j'ai pu plusieurs supprimer des fichier, modifier en ré-envoyer plusieurs... bref c'est beaucoup plus confortable...
Mais du coup, SMBA38, j'ai plusieurs interrogations concernant les scripts pour le BMP085.....
Tout d'abord, les scripts compressé que tu m'avais modifié (pour mémoire fin de la page 45) fonctionnent vraiment très bien...seulement, ils sont un peu obscurs pour moi car si j'ai bien compris, le script bmp085.lua ne sert pas seulement à indiquer à l'ESP comment se comprote le capteur mais aussi à envoyer des valeurs dans des variables qui sont ensuite récupérées dans le fichier "fido.lua"
D'ailleurs, dans ce script, où se trouvent les valeurs de température et de pression....?
Bref, je suis repartit sur quelque chose de plus scolaire... qui est en même temps mon script de base que voici:
Seulement, je voudrais afficher les valeurs de température et de pression dans la boucle qui se répète toutes les 15sec mais rien a faire... j'ai systématiquement un message d'erreur (commenté dans le script)... le reste fonctionne bien et envoie bien les données vers thinspeak, donc je me tourne une nouvelle fois vers la communauté pour tenter d'y voir clair...
J'ai enfin une dernière question.... je me suis dit que ce serait pas mal de pouvoir piloter le module via le wifi un peu de la même manière que lorsque celui-ci est branché en filaire à l'ordi... je me suis dit que cela devait bien être possible et ai tenté de trouver ça sur le net mais pour l'instant j'ai fait chou blanc....
Beaucoup de questions encore..
merci à vous
donc effectivement, je confirme que cette nouvelle version est bien plus stable en ce qui me concerne... malgré quelques moment ou je n'arrive plus à reprendre la main sans de-connecter/re-connecter le CH_PD... j'ai pu plusieurs supprimer des fichier, modifier en ré-envoyer plusieurs... bref c'est beaucoup plus confortable...
Mais du coup, SMBA38, j'ai plusieurs interrogations concernant les scripts pour le BMP085.....
![Très content :D](./images/smilies/icon_e_biggrin.gif)
Tout d'abord, les scripts compressé que tu m'avais modifié (pour mémoire fin de la page 45) fonctionnent vraiment très bien...seulement, ils sont un peu obscurs pour moi car si j'ai bien compris, le script bmp085.lua ne sert pas seulement à indiquer à l'ESP comment se comprote le capteur mais aussi à envoyer des valeurs dans des variables qui sont ensuite récupérées dans le fichier "fido.lua"
Code : Tout sélectionner
--fido.lua
bmp085 = require("bmp085")
function sendData()
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
conn:connect(80,'184.106.153.149')
conn:send("GET /update?key=YG5WIF3I6HN1YAJS"
..dofile("bmp085.lua").read(3,4)
.."HTTP/1.1 \r\n"
.. "Host: api.thingspeak.com\r\n"
.. "Connection: close\r\n"
.. "Accept: */*\r\n"
.. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
.. "\r\n")
conn:on("sent", function(conn) print("Envoi OK") conn:close() end)
conn:on("disconnection", function(conn) print("Deconnexion ..") print(node.heap()) end)
end
sendData() -- première fois
tmr.alarm(2, 30000, 1, function() sendData() end )
Bref, je suis repartit sur quelque chose de plus scolaire... qui est en même temps mon script de base que voici:
Code : Tout sélectionner
--fido4.lua
bmp085 = require("bmp085b")
bmp085.init(3, 4)
t = bmp085.getUT()
p = bmp085.getUP() / 100 --valeurs en hpa mais comment avoir les décimales?
print(t)
print(p)
tmr.alarm(0, 15000, 1, function()
--t = bmp085.getUT()
--p = bmp085.getUP() / 100
--print(t)
--print(p)
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
conn:connect(80,'184.106.153.149')
conn:send("GET /update?key=YG5WIF3I6HN1YAJS "
.." &field1="..t
.." &field2="..p
.." HTTP/1.1 \r\n"
.. "Host: api.thingspeak.com\r\n"
.. "Connection: close\r\n"
.. "Accept: */*\r\n"
.. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
.. "\r\n")
conn:on("sent", function(conn) print("Envoi OK") conn:close() end)
conn:on("disconnection", function(conn) print("Deconnexion ") end)
end )
J'ai enfin une dernière question.... je me suis dit que ce serait pas mal de pouvoir piloter le module via le wifi un peu de la même manière que lorsque celui-ci est branché en filaire à l'ordi... je me suis dit que cela devait bien être possible et ai tenté de trouver ça sur le net mais pour l'instant j'ai fait chou blanc....
Beaucoup de questions encore..
![Yeux tournants :roll:](./images/smilies/icon_rolleyes.gif)
merci à vous
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Fidoboulettes,
Je répond juste à ta question sur le print.
je répondrai à tes autres questions un peu plus tard.
car je pars faire une petite marche avec des collègues retraités de mon village.
Essaye un truc de vieux développeur, Ajoute un "" en fin de print.
Il y a un bug dans Lua, il faut dans certains cas qu'un print se termine par une variable texte.
Il faut parfois être plus rusé que le compilateur.
J'ai utilisé dans l'exemple la version Integer du 25/06/2015 de Nodemcu.
SMBA38
Je répond juste à ta question sur le print.
je répondrai à tes autres questions un peu plus tard.
car je pars faire une petite marche avec des collègues retraités de mon village.
Essaye un truc de vieux développeur, Ajoute un "" en fin de print.
Il y a un bug dans Lua, il faut dans certains cas qu'un print se termine par une variable texte.
Il faut parfois être plus rusé que le compilateur.
J'ai utilisé dans l'exemple la version Integer du 25/06/2015 de Nodemcu.
Code : Tout sélectionner
bmp085 = require("bmp085")
sda = 3
scl = 4
bmp085.init(sda, scl)
--- Envoi données à thingspeak.com
function sendData()
t=bmp085.getUT(true)
p= bmp085.getUP()
print ("t="..t.." p=".. p .."" )
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
conn:connect(80,'184.106.153.149')
conn:send("GET /update?key=KEY FIDO "
.." &field1="..t
.." &field2="..p
.." HTTP/1.1 \r\n"
.. "Host: api.thingspeak.com\r\n"
.. "Connection: close\r\n"
.. "Accept: */*\r\n"
.. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
.. "\r\n")
conn:on("sent", function(conn) print("Envoi OK") conn:close() end)
conn:on("disconnection", function(conn) print("pile="..node.heap() .."") end)
end
sendData() -- première fois
tmr.alarm(2, 15000, 1, function() sendData() end )
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Fidoboulettes,
Suite des réponses.
Quelques infos sur la pile.
La pile (node.heap()) conserve les variables d’un programme.
Il y a deux sortes de variables
Les globales qui sont définies une fois pour toutes et qui sont accessibles par toutes les fonctions d’un programme.
Les variables locales définies à l’intérieur d’une fonction ou définies avec l’attribut « local ».
Ces fonctions disposent d’une portée locale à la fonction et elles ne sont pas accessibles par les autres fonctions.
Les variables sont conservées dans la pile.
Les variables globales disposent d’un emplacement fixe dans la pile.
L’emplacement d’une variable locale est attribué au début de l’exécution d’une fonction, et à la fin de la fonction
La place utilisée par la variable et récupérée dans la pile.
Une fonction peut également être déclarée comme locale.
xxx.nil permet récupérer l’emplacement d’une variable ou d’une fonction dans la pile.
Ensuite c’est le ramasse miettes ( le garbage collector) qui se charge de récupérer les trous laissés libres dans la pile
On peut utiliser le package « bmp085 » de plusieurs façons:
1)En le chargeant et en le déchargeant à chaque utilisation.
bmp085 = require("bmp085")
...
bmp085 = nil
package.loaded["bmp085"]=nil
2) en appellant directement une fonction de package par un dofile
dofile("bmp085b.lc").read(3,4)
(2,4) sont les adresses des GPIO utilisés.
J’ai modifié le package bmp085 en bmp0845b pour que la fonction read retourne en une seule fois les deux variables séparées par une virgule, variables post fixées par les noms des variables.
Voir la ligne « return "&field1="..t.. " &field2=".. p * 3 / 40 » dans le package bmp085b.lua
Dans cd cas le bmp085 = require("bmp085") n’est pas à utiliser.
3) en chargeant le package bmp085 une seule fois.
bmp085 = require("bmp085")
Les deux premières méthodes sont à utilisées dans le cas ou la taille de la pile et réduite et que les packages utilisent beaucoup de variables.
Mais à partir de la version du 25/06/2015 de NodeMcu on peut utiliser la troisième méthode (même sans compiler les programme via node.compile().
Pour ta dernière question, il est possible de configurer NodeMcu en serveur Telnet et via un client Telnet envoyer des commande Lua.
Serveur telnet en Lua.
Exemple avec le client putty http://the.earth.li/~sgtatham/putty/lat ... /putty.exe
Il faut configurer le terminal avec « Implicit CR in every LF » Dans Session, Il faut cocher Telnet et indiquer 2323 comme port.
On peut saisir des commandes Lua comme si l’on était connecté en USB.
Trace du client Telnet putty
A+
SMBA38.
Suite des réponses.
Quelques infos sur la pile.
La pile (node.heap()) conserve les variables d’un programme.
Il y a deux sortes de variables
Les globales qui sont définies une fois pour toutes et qui sont accessibles par toutes les fonctions d’un programme.
Les variables locales définies à l’intérieur d’une fonction ou définies avec l’attribut « local ».
Ces fonctions disposent d’une portée locale à la fonction et elles ne sont pas accessibles par les autres fonctions.
Les variables sont conservées dans la pile.
Les variables globales disposent d’un emplacement fixe dans la pile.
L’emplacement d’une variable locale est attribué au début de l’exécution d’une fonction, et à la fin de la fonction
La place utilisée par la variable et récupérée dans la pile.
Une fonction peut également être déclarée comme locale.
xxx.nil permet récupérer l’emplacement d’une variable ou d’une fonction dans la pile.
Ensuite c’est le ramasse miettes ( le garbage collector) qui se charge de récupérer les trous laissés libres dans la pile
On peut utiliser le package « bmp085 » de plusieurs façons:
1)En le chargeant et en le déchargeant à chaque utilisation.
bmp085 = require("bmp085")
...
bmp085 = nil
package.loaded["bmp085"]=nil
2) en appellant directement une fonction de package par un dofile
dofile("bmp085b.lc").read(3,4)
(2,4) sont les adresses des GPIO utilisés.
J’ai modifié le package bmp085 en bmp0845b pour que la fonction read retourne en une seule fois les deux variables séparées par une virgule, variables post fixées par les noms des variables.
Voir la ligne « return "&field1="..t.. " &field2=".. p * 3 / 40 » dans le package bmp085b.lua
Dans cd cas le bmp085 = require("bmp085") n’est pas à utiliser.
3) en chargeant le package bmp085 une seule fois.
bmp085 = require("bmp085")
Les deux premières méthodes sont à utilisées dans le cas ou la taille de la pile et réduite et que les packages utilisent beaucoup de variables.
Mais à partir de la version du 25/06/2015 de NodeMcu on peut utiliser la troisième méthode (même sans compiler les programme via node.compile().
Pour ta dernière question, il est possible de configurer NodeMcu en serveur Telnet et via un client Telnet envoyer des commande Lua.
Serveur telnet en Lua.
Code : Tout sélectionner
wifi.setmode(wifi.STATION) -- Wifi en mode station
cfg = { ip="192.168.1.154", netmask="255.255.255.0", gatway="192.168.1.1"}
wifi.sta.setip(cfg) -- on force l'adresse IP
wifi.sta.config("WRT54G_409B","xxxxxxxxxxxxxxxxxxxxxx")
while (wifi.sta.getip() == nil) do tmr.delay(500000) end print(wifi.sta.getip()) -- verification adresse IP
--Serveur telnet
s=net.createServer(net.TCP,180)
s:listen(2323,function(c)
function s_output(str)
if(c~=nil)
then c:send(str)
end
end
node.output(s_output, 0)
-- re-direct output to function s_ouput.
c:on("receive",function(c,l)
node.input(l)
--like pcall(loadstring(l)), support multiple separate lines
end)
c:on("disconnection",function(c)
node.output(nil)
--unregist redirect output function, output goes to serial
end)
print("Welcome to NodeMcu world.")
end)
Il faut configurer le terminal avec « Implicit CR in every LF » Dans Session, Il faut cocher Telnet et indiquer 2323 comme port.
On peut saisir des commandes Lua comme si l’on était connecté en USB.
Trace du client Telnet putty
Code : Tout sélectionner
Welcome to NodeMcu world.
stdin:1: unexpected symbol near '
> dofile("list.lua")
name:bmp085b.lua, size:2636
name:telnet.lua, size:931
name:init-wifi.lua, size:347
name:list.lua, size:83
name:bmp085b.lc, size:1928
> print("Récupération deux variables " .. dofile("bmp085b.lc").read(3,4))
Récupération deux variables &field1=-128 &field2=-2294
> print (node.heap())
29952
SMBA38.
Modifié en dernier par smba38 le lun. 29 juin 2015 20:46, modifié 3 fois.
-
- Messages : 33
- Enregistré le : mar. 26 mai 2015 07:18
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
smba38 a écrit :....Essaye un truc de vieux développeur, Ajoute un "" en fin de print.
Il y a un bug dans Lua, il faut dans certains cas qu'un print se termine par une variable texte.
Il faut parfois être plus rusé que le compilateur.
J'ai utilisé dans l'exemple la version Integer du 25/06/2015 de Nodemcu....
Superbe, comme d'hab... merci à toi....
- Jean-Marie
- Raspinaute
- Messages : 240
- Enregistré le : sam. 24 janv. 2015 18:01
- Localisation : Arlon, Belgique
- Contact :
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello les amis
Je suis rentré de vacances, directement à l'hôpital pour des ennuis de santé. Je serai opéré mercredi, donc j'en ai encore pour un bout de temps. Mais j'espère bien que vous entendrez encore parler de moi et de mes ESP.
A bientôt.
Je suis rentré de vacances, directement à l'hôpital pour des ennuis de santé. Je serai opéré mercredi, donc j'en ai encore pour un bout de temps. Mais j'espère bien que vous entendrez encore parler de moi et de mes ESP.
A bientôt.
Re: Tous les capteurs reliés au RPI par Wifi avec module ESP
Hello Jean-Marie.
J'espère que ton opération va se passer super bien.
Revient vite discuter sur le forum de la framboise pour peaufiner des montages électroniques.
A bientôt.
Michel.
J'espère que ton opération va se passer super bien.
Revient vite discuter sur le forum de la framboise pour peaufiner des montages électroniques.
A bientôt.
Michel.