2016-12-05 107 views
0

我正在使用帶有已啓用BME280模塊的NodeMCU固件的ESP-12F(ESP8266)模塊。我通過手動查詢溫度和溼度來測試傳感器,一切都很好。爲什麼bme280.startreadout()只觸發一次?

現在,我想使用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) 

更新:沒有想到的是前:是startreadout意味着觸發回調函數只有一次?或者用JavaScript術語說明:它是否像setTimeout而不是setInterval那樣工作?

+0

這是封閉的還是你需要更多的反饋? –

回答

1

有一個few issues with that module但沒有影響你AFAICT。

docs是國際海事組織非常清楚,你的回調只發射一次。第一個參數被稱爲delay而不是「間隔」等。所以,你需要一個timer定期讀取傳感器值。