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.
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)
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 »
- putty.JPG (50 Kio) Vu 8981 fois
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
A+
SMBA38.