Hello FidoBoulettes,
J'ai essayé ton code tel quel avec les deux programmes concaténés, il ne fonctionne pas sur ma version 0.9.6.
Il s'agit peut être d'une saturation mémoire.
Pour infos:
Dans la puce esp8266 il y a plusieurs types de mémoires.
-32KBytes de RAM (instructions) ,96KBytes of data RAM(données), 64KBytes boot ROM
Plus la mémoire flash SPI pour les programmes et/ou les données persistantes de 512KO[ESP-01] , et de 4MO ESP-12=kit NodeMcu.
L'ESP8266 a une architecture des données de type Harvard.
L’architecture de type Harvard est une conception de microprocesseurs qui sépare physiquement la mémoire de données et la mémoire programme. L’accès à chacune des deux mémoires s’effectue via deux bus distincts.
La saturation peut provenir de la mémoire iram (instructions) ou dram (données=pile).
Durant un dofile("xxx.lua") ou dofile ("xxx.lc") le programme est copié de ma mémoire flash vers la mémoire iram(instructions).
La pile est utilisée en particulier pour stocker les variables locales.
A l'entrée dans une fonction, l'emplacement des variables locales est réservée dans la pile.
A la sortie d'une fonction l'emplacement des variables locales est récupérée dans la pile.
On déclare une variable locale par
local x
En fonction du code la pile est plus ou moins sollicitée.
voir par exemple
http://www.esp8266.com/viewtopic.php?f=18&t=663
Voici la taille de la pile pour différentes versions (avec aucun programme en mémoire).
Les version Float permettent d'utiliser des variables flottantes (avec des décimales).
0.9.5 intégrée 22688
0.9.5 integer version 21400
0.9.6 integer version print(node.heap()) -> 21120
0.9.6 float version print(node.heap()) ->20200
la version intégré correspond à celle que l'on utilise en cliquant sur "restore Default"
C'est avec cette version que la pile à le plus de place.
Voici ton code un peu remanié, chez moi il fonctionne avec la version 0.9.5 intégrée (heap=22688) et avec la version 0.9.6 Integer (heap=21120) Mais comme je n'ai pas de BMPO85 donc les valeurs des capteurs sont toujours les mêmes.
Avant j'ai chargé et compilé bmp085.lua en bmp085.lc
node.compile("bmp085.lua")
J'initialise la connexion Wifi une seule fois après un flash par le programme init-wifi.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","xxxxxxxxxxxxxxxxxxxxx")
while (wifi.sta.getip() == nil) do tmr.delay(500000) end print(wifi.sta.getip()) -- verification adresse IP
Voici ton code un peu remanié
Code : Tout sélectionner
bmp085 = require("bmp085")
bmp085.init(3, 4)
tmr.alarm(0, 15000, 1, function()
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=xxxxxxxxxxxxxxx "
.." &field1="..bmp085.getUT(true)
.." &field2="..bmp085.getUP()
.." 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 )
Et voici la trace
Code : Tout sélectionner
dofile("fido.lua")
init done
> Envoi OK
Deconnexion
Envoi OK
Deconnexion
Envoi OK
Deconnexion
Envoi OK
Deconnexion
Envoi OK
Deconnexion
Envoi OK
Deconnexion
Envoi OK
Deconnexion
Envoi OK
Deconnexion
Envoi OK
SMBA38