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

我在nodemcu esp8266上有一个可工作的init.lua:

-- 加载凭据,'SSID'和'PASSWORD'在其中声明并初始化
dofile("credentials.lua")

function startup()
    if file.open("init.lua") == nil then
        print("init.lua已删除或重命名")
    else
        print("正在运行")
        file.close("init.lua")
        -- 实际应用程序存储在'application.lua'中
        -- dofile("application.lua")
    end
end

print("连接到WiFi接入点...")
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)
-- wifi.sta.connect()不必要,因为config()默认使用auto-connect=true

tmr.create():alarm(1000, tmr.ALARM_AUTO, function(cb_timer)
    if wifi.sta.getip() == nil then
        print("等待IP地址...")
    else
        cb_timer:unregister()
        print("WiFi连接已建立,IP地址:" .. wifi.sta.getip())
        print("您有3秒钟的时间来中止")
        print("等待...")
        tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup)
    end
end)

它可以不出错地运行,并且已建立无线连接。

现在我编写了第二个bme280_mqtt.lua文件,我想自动运行它:

alt=45 -- 测量地点的高度

bme280.init(3, 4)

P, T = bme280.baro()
-- 将测量空气压力转换为海平面气压
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: 未连接
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?

此致敬意

点赞
用户131929
用户131929

如何正确从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函数中使用回调函数来发布,或者在调用connect之前注册一个关于连接事件的处理程序,例如:

m:on("connect", function(client)
  -- 在此处发布
 end)
2017-02-26 13:53:21