2017-02-26 33 views
0

我有我的nodemcu esp8266工作init.lua:nodemcu lua dofile - 如何調用另一個lua文件?

-- load credentials, 'SSID' and 'PASSWORD' declared and initialize in there 
dofile("credentials.lua") 

function startup() 
    if file.open("init.lua") == nil then 
     print("init.lua deleted or renamed") 
    else 
     print("Running") 
     file.close("init.lua") 
     -- the actual application is stored in 'application.lua' 
     -- dofile("application.lua") 
    end 
end 

print("Connecting to WiFi access point...") 
wifi.setmode(wifi.STATION) 
wifi.sta.config(SSID, PASSWORD) 
-- wifi.sta.connect() not necessary because config() uses auto-connect=true by default 
tmr.create():alarm(1000, tmr.ALARM_AUTO, function(cb_timer) 
    if wifi.sta.getip() == nil then 
     print("Waiting for IP address...") 
    else 
     cb_timer:unregister() 
     print("WiFi connection established, IP address: " .. wifi.sta.getip()) 
     print("You have 3 seconds to abort") 
     print("Waiting...") 
     tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup) 
    end 
end) 

它運行無差錯地建立無線連接。

現在我已經寫了,我想自動運行第二bme280_mqtt.lua:

alt=45 -- altitude of the measurement place 

bme280.init(3, 4) 

P, T = bme280.baro() 
-- convert measure air pressure to sea level pressure 
QNH = bme280.qfe2qnh(P, alt) 
ldk=string.format("Ld=%d.%03d ", QNH/1000, QNH%1000) 

H, T = bme280.humi() 
if T<0 then  
    temp=string.format("T=-%d.%02d°C ", -T/100, -T%100) 
else 
    temp=string.format("T=%d.%02d°C ", T/100, T%100) 
end 
luftf=string.format("Lf=%d%% ", H/1000, H%1000) 
D = bme280.dewpoint(H, T) 
if D<0 then 
    taupu=string.format("Tp=-%d.%02d°C ", -D/100, -D%100) 
else 
    taupu=string.format("Tp=%d.%02d°C ", D/100, D%100) 
end 
m = mqtt.Client("wetterstation", 120) 
m:connect("192.168.1.116", 1883) 
m:publish("wetterstation",temp .. taupu .. luftf .. ldk,0,0) 
node.dsleep(10*1000000) 

用手ESPlorer通過調用發送到ESP按鈕,一切工作正常。

但隨着

dofile(bme280_mqtt.lua) 

我得到:

dofile('bme280_mqtt.lua') 
bme280_mqtt.lua:25: not connected 
stack traceback: 
    [C]: in function 'publish' 
    bme280_mqtt.lua:25: in main chunk 
    [C]: in function 'dofile' 
    stdin:1: in main chunk 

什麼是錯在這裏?我該如何正確調用init.lua中的bme280_mqtt.lua?

親切的問候

+0

這個問題解決了還是您需要更多反饋? –

回答

1

我怎麼叫bme280_mqtt.lua從init.lua是否正確?

正確調用它。

bme280_mqtt.lua:25: not connected 

意味着從bme280_mqtt.lua的第25行出現錯誤。

我沒算行,但問題就在這裏

m:connect("192.168.1.116", 1883) 
m:publish("wetterstation",temp .. taupu .. luftf .. ldk,0,0) 

一旦成立,以代理的連接只能發佈。看看http://nodemcu.readthedocs.io/en/latest/en/modules/mqtt/#example的例子。您可以使用回調函數在connect功能來發布或登記上連接之前的事件處理程序你叫connect像這樣:

m:on("connect", function(client) 
    -- publish here 
end) 
0

謝謝

現在我bme280_mqtt.lua長相像這樣:

alt=45 -- altitude of the measurement place 

bme280.init(3, 4) 

P, T = bme280.baro() 
-- convert measure air pressure to sea level pressure 
QNH = bme280.qfe2qnh(P, alt) 
ldk=string.format("Ld=%d.%03dhPa ", QNH/1000, QNH%1000) 

H, T = bme280.humi() 
if T<0 then  
    temp=string.format("T=-%d.%02d°C ", -T/100, -T%100) 
else 
    temp=string.format("T=%d.%02d°C ", T/100, T%100) 
end 
luftf=string.format("Lf=%d%% ", H/1000, H%1000) 
D = bme280.dewpoint(H, T) 
if D<0 then 
    taupu=string.format("Tp=-%d.%02d°C ", -D/100, -D%100) 
else 
    taupu=string.format("Tp=%d.%02d°C ", D/100, D%100) 
end 
m = mqtt.Client("wetterstation", 120) 
m:on("connect", function(client) m:publish("wetterstation",temp .. taupu .. luftf .. ldk,0,0) end) 
m:connect("192.168.1.116", 1883) 

但是,如何重複傳感器讀數並通過mqtt每隔n秒發送一次值?