Здравствуйте, уважаемые форумчане!
Появилась необходимость реализовать следующую задачу: при появлении высокого уровня на одном из GPIO модуля ESP-07 передавать какую-либо информацию на ПК, находящийся в той же сети, что и модуль. В общем поставленную задачу я реализовал (скрипт прилагаю). Вопрос в энергопотреблении, так как модуль должен работать от батареи типа Крона и потреблять минимум возможного.
При запуске модуля ток потребления составляет 70мА и держится таковым порядка 5-7 с. Затем он уменьшается до 20мА и начинает скакать от 20 до 60 мА. При этом модуль находится в состоянии STATION, ничего не передает и просто подключен к роутеру.
Подскажите пожалуйста почему в таком режиме потребление скачет?
Промежутки между появлениями высокого уровня на GPIO модуля могут составлять десятки секунд. Логично, на это время погружать модуль в сон, но время от момента появления высокого уровня до момента передачи сообщения на ПК должно быть не более 1с, т.е. времени на подключение к WiFi нет. Режим deepsleep, как я понимаю, использовать не получится, так как после выхода из этого режима программа начинает выполняться заново (повторное подключение к WiFi и т.д.). Видимо, нужно использовать режимы сна WiFi модема (wifi.sta.sleeptype). Я поигрался со всеми режимами, но ничего путного не получилось - как потребление скакало от 20 до 60 мА, так и скачет. Даже в режиме MODEM_SLEEP, при котором, судя по описанию, связь с роутером теряется, ничего не вышло. Подскажите пожалуйста, как грамотно добиться минимума потребления модуля без потери соединения с точкой доступа, чтобы при появлении высокого уровня на GPIO, сообщение на ПК передавалось без больших задержек? И вообще на практике какого минимального потребления можно добиться в режиме поддержания связи с точкой доступа?
Появилась необходимость реализовать следующую задачу: при появлении высокого уровня на одном из GPIO модуля ESP-07 передавать какую-либо информацию на ПК, находящийся в той же сети, что и модуль. В общем поставленную задачу я реализовал (скрипт прилагаю). Вопрос в энергопотреблении, так как модуль должен работать от батареи типа Крона и потреблять минимум возможного.
При запуске модуля ток потребления составляет 70мА и держится таковым порядка 5-7 с. Затем он уменьшается до 20мА и начинает скакать от 20 до 60 мА. При этом модуль находится в состоянии STATION, ничего не передает и просто подключен к роутеру.
Подскажите пожалуйста почему в таком режиме потребление скачет?
Промежутки между появлениями высокого уровня на GPIO модуля могут составлять десятки секунд. Логично, на это время погружать модуль в сон, но время от момента появления высокого уровня до момента передачи сообщения на ПК должно быть не более 1с, т.е. времени на подключение к WiFi нет. Режим deepsleep, как я понимаю, использовать не получится, так как после выхода из этого режима программа начинает выполняться заново (повторное подключение к WiFi и т.д.). Видимо, нужно использовать режимы сна WiFi модема (wifi.sta.sleeptype). Я поигрался со всеми режимами, но ничего путного не получилось - как потребление скакало от 20 до 60 мА, так и скачет. Даже в режиме MODEM_SLEEP, при котором, судя по описанию, связь с роутером теряется, ничего не вышло. Подскажите пожалуйста, как грамотно добиться минимума потребления модуля без потери соединения с точкой доступа, чтобы при появлении высокого уровня на GPIO, сообщение на ПК передавалось без больших задержек? И вообще на практике какого минимального потребления можно добиться в режиме поддержания связи с точкой доступа?
Код:
--подключаемся к точке доступа
ssid,pass = "SSID","PASS";
wifi.setmode(wifi.STATION);
wifi.sta.config(ssid,pass);
wifi.sta.connect();
print("Looking for a connection");
--пока подключаемся выводим "Connecting..."
tmr.alarm(1, 500, 1, function()
if(wifi.sta.getip()~=nil) then
tmr.stop(1) --если подключились, то останавливаем таймер
print("Connected!")
print("Client IP Address:",wifi.sta.getip())
gpio.mode(2, gpio.INPUT); --задаем GPIO2 как вход
--при появлении высокого уровня на GPIO2 подключаемся к ПК
--и передаем "INDICATION"
gpio.trig(2,"up",function()
cl=net.createConnection(net.TCP, 0)
cl:connect(8080,"192.168.1.75")
cl:on("connection", function(conn)
cl:send("INDICATION", function()
print("SENT DATA");
cl:close();
end);
end)
end)
else
print("Connecting...")
end
end)