首页 文章

为什么bme280.startreadout()只触发一次?

提问于
浏览
0

我正在使用带有NodeMCU固件的ESP-12F(ESP8266)模块,该模块启用了BME280模块 . 我通过手动查询温度和湿度来测试传感器,一切都很好 .

现在,我想使用 bme280.startreadout(...) 函数来定期将值发送到我的服务器(或者现在只需将它们打印到ESPlorer中的串行终端) . 以下代码不会抛出任何错误,但回调函数只运行一次 - 有人可以告诉我为什么会这样吗?

bme280.init(7, 6, nil, nil, nil, 0)
bme280.startreadout(2000, function ()
    T = bme280.temp()
    print(string.format("T=%d.%02d", T/100, T%100))
end)

当我将此脚本发送到模块并运行它时,正确的温度会在2秒后写出来,就是这样 .

以下是有关固件的一些详细信息:

NodeMCU custom build by frightanic.com
    branch: dev
    commit: 79013ae79a85798cba470ac1168e75c755f58f42
    SSL: true
    modules: adc,adxl345,am2320,apa102,bme280,crypto,dht,file,gpio,hmc5883l,http,i2c,l3g4200d,mqtt,net,node,ow,pwm,spi,tmr,tsl2561,uart,websocket,wifi
 build  built on: 2016-12-05 17:30
 powered by Lua 5.1.4 on SDK 1.5.4.1(39cb9a32)

Update: 之前没有想过:是 startreadout 只是为了触发回调函数一次?或者用JavaScript术语表示:它是否像 setTimeout 一样工作而不是 setInterval

1 回答

  • 1

    有一个few issues with that module但没有一个影响你AFAICT .

    docs是IMO非常清楚你的回调只被触发一次 . 第一个参数称为 delay 而不是"interval"等 . 因此,您需要timer来定期读取传感器值 .

相关问题