Конфигурация nodeMCU DeepSleep

Я работаю над настройкой WeMos D1 Mini с nodeMCU, чтобы он делал http-публикацию каждую минуту, а затем переходил в глубокий сон, повторяю. У меня есть контакты 32 и 8, подключенные кабелем-перемычкой, как указано в документации nodeMCU. Когда я запускаю следующий код (без глубокого сна), он работает нормально, но не когда я включаю код глубокого сна, тогда он не может сделать какой-либо HTTP-пост вместе, любая помощь будет оценена.

init.lua
-- configure network 
dofile("credentials.lua")

-- dht22 sensor for humidity&temperature 
dht22 = 5
status, temp, humi, temp_dec, humi_dec = dht.read(dht22)

    if status == dht.OK then
        -- for debugging, print to console 
        print("DHT Temperature: "..temp)
        print("DHT Humidity: "..humi)
    elseif status == dht.ERROR_CHECKSUM then
        print( "DHT Checksum error." )
    elseif status == dht.ERROR_TIMEOUT then
        print( "DHT timed out." )
    end

-- post request 
http.post('url',
  'Content-Type: application/json\r\n',
  '{"humidity":'..humi..', "temperature":'..temp..', "moisture":'..adc.read(0)..', "sunlight":0}',
  function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
      print(code, data)
    end
  end)

-- small delay to allow the device to make http post before going into deep-sleep mode 
tmr.delay(5000000)
print("enterning deep sleep mode for 60 seconds...goodbye")
node.dsleep(60000000)


credentials.lua 
wifi.setmode(wifi.STATION)
wifi.sta.config("ssid","pwd")

tmr.alarm(1, 10000, 1, function()
    if wifi.sta.getip()== nil then
        print("Awaiting IP...")
    else
        tmr.stop(1)
        print("IP: "..wifi.sta.getip())
        print("Proceeding...")
        dofile("init.lua")
    end
end)

person babsndeep    schedule 14.04.2017    source источник
comment
10 секунд задержки слишком много для опроса подключения Wi-Fi   -  person cagdas    schedule 15.04.2017
comment
Вы должны публиковать сообщения в сети, убедившись, что у вас есть подключение.   -  person cagdas    schedule 15.04.2017
comment
Отправить устройство в спящий режим, когда вы получили ответ от сервера   -  person cagdas    schedule 15.04.2017
comment
@cagdas, спасибо, как мне отложить сон до получения ответа от сервера? Мне сказали, что tmr.delay() — плохая идея, так как она зацикливает процессор ESP, любые идеи будут оценены!   -  person babsndeep    schedule 15.04.2017


Ответы (1)


Когда я запускаю следующий код (без глубокого сна), он работает нормально, но не когда я включаю код глубокого сна, тогда он не может сделать какой-либо HTTP-пост вместе.

Я не понимаю... вы не пропускаете глубокий сон в своем примере кода, не так ли?

В любом случае, tmr.delay нельзя использовать, особенно с чем-либо, превышающим 50us. Почему вы не переходите в глубокий сон, когда HTTP-запрос возвращается? Что-то вроде этого:

http.post('url',
  'Content-Type: application/json\r\n',
  '{"humidity":'..humi..', "temperature":'..temp..', "moisture":'..adc.read(0)..', "sunlight":0}',
  function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
      print(code, data)
      print("enterning deep sleep mode for 60 seconds...goodbye")
      node.dsleep(60000000)
    end
  end)
person Marcel Stör    schedule 15.04.2017
comment
Привет @marcel Спасибо за информацию и руководство по структуре. Я попробовал изменения, которые вы рекомендовали выше, но без радости. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда ESP делает успешную публикацию (я могу проверить на стороне сервера/базы данных), он выводит на консоль следующее: HTTP-клиент: Отключено с ошибкой: 8 HTTP-клиент: Время ожидания подключения HTTP-клиент: Тайм-аут соединения Я пробовал множество способов заставить его выполнить node.dsleep() безрезультатно, любая помощь будет оценена по достоинству! - person babsndeep; 18.04.2017
comment
Похоже (по крайней мере, связано с) github.com/nodemcu/nodemcu-firmware/issues /1707. - person Marcel Stör; 18.04.2017
comment
Попробуйте отправить сообщение на фиктивный ресурс, такой как requestb.in, чтобы этот вопрос можно было принять/закрыть. - person Marcel Stör; 18.04.2017