2016-12-05 3 views
0

Я использую модуль ESP-12F (ESP8266) с прошивкой NodeMCU, в которой включен модуль BME280. Я проверил датчик, вручную запросив температуру и влажность, все в порядке.Почему 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) 

Update: Не думал об этом раньше: это startreadoutозначает, чтобы вызвать функцию обратного вызова только один раз? Или поставить его в терминах JavaScript: работает ли оно как setTimeout, а не setInterval?

+0

Закрыто это или вам нужна дополнительная информация? –

ответ

1

Есть few issues with that module, но никто не влияет на вас AFAICT.

docs IMO совершенно ясно, что ваш обратный звонок запускается только один раз. Первый параметр называется delay, а не «интервал» или тому подобное. Таким образом, вам необходимо указать timer для считывания значений датчиков.

Смежные вопросы