nodemcu lua dofile - 如何调用另一个lua文件?

时间:2017-02-26 09:43:14

标签: lua esp8266 nodemcu

我的nodemcu esp8266上有一个工作的init.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)

通过发送到ESP按钮在ESPlorer中手动调用按钮一切正常。

但是

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?

亲切的问候

1 个答案:

答案 0 :(得分:1)

  

如何正确调用init.lua中的bme280_mqtt.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函数中的回调函数来发布或注册on-connect事件处理程序,然后再调用connect,如下所示:

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