ESP8266: Автоматическая перезагрузка роутера. Бюджетный вариант.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 18 апр 2015.

  1. Djvan

    Djvan Нерд

    диод и не включался. вайфай работает. реле уже 3 штуки перепробовал
     
  2. ИгорьК

    ИгорьК Гуру

    Если WiFi работает - реле и не сработает. Оно же на размыкание. Выключите WiFi и смотрите что будет. Причем при старте модуль сработает не сразу. На срабатывание реле требуется 1,5 минуты после выключения wifi. На видео я просто все ускорил.
    Диод должен включиться сразу - проверяйте правильность соединения. Но Вы можете не вставлять модуль в схему а смотреть что происходит через Esplorer - он обо всем выдаёт информацию.
     
  3. Djvan

    Djvan Нерд

    в есплорере после ввода трех строк и потом двух луа, после релоада - через какое то время пишет traying 1, time is money, no money. через некоторое время все повторяется. Но номер 1 не меняется.
     
  4. Djvan

    Djvan Нерд

    Ладно - завтра время еще поубиваю. Кстати - а сколько нужно ампер для питания этого? У меня запитывается все это от дуины уно, может тупо не хватать питалова для вайфая и еще релюхи? И еще- я все время как то методом научного тыка делаю - когда я прошиваю то соединяю так
    CH-PD к vcc через резистор от 1КОм до 10КОм
    GPIO0 к GND
    GPIO2 к VCC
    RX к TX
    TX к RX

    Далее - чтобы работать в есплорере и смотреть что выдает - как мне надо подключать?
     
  5. ИгорьК

    ИгорьК Гуру

    Вы wifi то выключаете ? Если он включён - счётчик сбрасывается и новая проверка становится опять первой. Похоже у Вас все работает. Реле сработает только если будет потерян wifi или интернет с третьей попытки.
     
  6. ИгорьК

    ИгорьК Гуру

    Завтра распишу логику работы.Видимо она не ясна. Диод должен у Вас светиться. Раз Вы видите информацию о работе - значит команда на диод уже прошла. Разбираетесь с соединением.
     
  7. ИгорьК

    ИгорьК Гуру

    В первый пост я внес дополнения, чтобы Вы поняли как оно работает. Судя по тому что Вы пишете - у Вас все нормально.
    Разбирайтесь с соединением диода - в восьмой строке скрипта дается тупая команда на его включение, как на Ардуино. Это не может не работать.
     
  8. alexarduino

    alexarduino Нуб

    Здравствуйте.
    Почти,повторил этот замечательный проект.В терминале все вижу когда считает, когда ребут и загорается свето диод.
    Правда возникли не большие проблемы.
    Использую ESP8266 ESP12E не пойму какой GPO PIN использовать они отличаются методом тыка пытался 4 исправить на 1 думая что будет GPO PIN - GPIO5 но не сработало .
    Реле такое http://ru.aliexpress.com/item/With-...ol-panel-PLC-relay-5V-two-way/1672127426.html
    Спасибо за помощь.
     
  9. ИгорьК

    ИгорьК Гуру

    Я так понимаю эта картинка:
    [​IMG]
    То есть это 17 и 18 ноги. Исправлять в скрипте ничего не надо.
     
  10. alexarduino

    alexarduino Нуб

    Спасибо.Заработало.
    Подтягивающий на +3.3в резюк 10кОм на 17 (GPIO2) выход и на прямую как у вас через резюк 5кОм на вход оптрона. :)
     
    Последнее редактирование: 27 ноя 2015
  11. xlightx

    xlightx Нерд

    Все супер. Пришлось немного переделать - т.к. роутер загружался в течение минуты, а за это время GetTime уже сообщал, что связь отсутствует и отправлял устройство в повторную перезагрузку. Пришлось делать задержку на минуту после включения или перезагрузки. Плюс к этому, использовал ESP-12. А по-сему, мог позволить себе отказаться от инвертора и использовать ноги 05 и 04, заземление которых на старте не посылает модуль в режим перепрошивки. Пока второй день - полет нормальный.
    Код init:
    Код (C++):
    do
    FileToExecute="netcheck.lua"
    l = file.list()
    for k,v in pairs(l) do
      if k == FileToExecute then

          print("Executing ".. FileToExecute)
          dofile(FileToExecute)

      end
    end
    end
    Код netcheck:
    Код (C++):
    -- works beta!
    time = ""
    trying = 0
    routerPin = 1
    lightPin = 2
    gpio.mode(routerPin,gpio.OUTPUT)
    gpio.mode(lightPin,gpio.OUTPUT)
    gpio.write(lightPin,gpio.HIGH)
    gpio.write(routerPin,gpio.HIGH)

    nowifi = false
    noconnect = false
    restarting = 0
    togglepin = 0
    reb_time = 60000000
    offrout = 0 -- роутер выключен

    function getTime()
        conn=net.createConnection(net.TCP, 0)
        conn:on("connection",function(conn, payload)
            conn:send("HEAD / HTTP/1.1\r\n"..
                    "Host: google.com\r\n"..
                    "Accept: */*\r\n"..
                    "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)"..
                    "\r\n\r\n")
            connection = conn
        end)
        conn:on("receive", function(conn, payload)
               
                print("Router is workink well!")
                noconnect, trying, restarting = false, 0, 0
                conn:close()
        end)
        --conn:connect(80,'google.com')
        conn:connect(80,'ya.ru')

    end

    function restartRouter()
        print("Time:");
        print(tmr.now());
        print("togglepin:");
        print(togglepin);

        if offrout == 0 then
            gpio.write(routerPin,gpio.LOW)
            gpio.write(lightPin,gpio.LOW)
            togglepin = tmr.now() + 10000000
            offrout = 1
            restarting = restarting + 1
            print("Restart No "..restarting)
                if restarting == 1 then
                    trying = -30
                elseif restarting == 2 then
                    trying = -60
                else
                    trying = -360
                end
        end

        if togglepin < tmr.now() then
            gpio.write(routerPin,gpio.HIGH)
            gpio.write(lightPin,gpio.HIGH)
            reb_time = tmr.now() + 60000000
            offrout = 0
        end
        print("Exit Restart Router!")
        print("Offroute:")
        print(offrout)
    end

      getTime()
     


    tmr.alarm(0, 10000, 1, function()


        print("reb_time:")
        print(reb_time)

        print("Time:");
        print(tmr.now());
     
            if ((offrout == 0) and (trying < 3)) then
                time="Link check has been made!"
                print(time)
                getTime()
            end

      if reb_time<tmr.now() then
       

        trying = trying + 1

        print("Trying: "..trying)

        if offrout == 1 then
            restartRouter()
        end
        if trying > 0 then
            ip = wifi.sta.getip()
                print(ip)
            if ip=="0.0.0.0" or ip==nil then
                  restartRouter()
            end
         
            if ((offrout == 1) or (trying >= 3)) then
                restartRouter()
            end
        end
      end
    end)
     
    А, да, еще! :) Изменил интервал опроса на 10 секунд, чтобы немного быстрее реагировал на зависание.
     
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Что-то не так. Уход в первую перезагрузку в моем скрипте осуществляется примерно через 7 минут после старта. У меня Зухель от Епты только 5 минут загружается. Возможно Вы перепутали сигнал об отсутствии сети, который первый раз получается примерно через минуту после старта, с командой на перезагрузку.
    Кроме того, рекомендую стартовый скрипт делать с задержкой 20-30 секунд и выводом информации о номере таймера, который эту задержку отрабатывает.
     
  13. xlightx

    xlightx Нерд

    Код (C++):
    trying = trying + 1

        print("Trying: "..trying)

        if offrout == 1 then
            restartRouter()
        end
        if trying > 0 then
            ip = wifi.sta.getip()
                print(ip)
            if ip=="0.0.0.0" or ip==nil then
                  restartRouter()
            end
    Посмотрел свежим взглядом - по-моему, вот этот кусок кода посылает модуль в ребут. После первого прохода, trying==1. Следовательно идем на условие if trying > 0 then и дальше restartRouter(), поскольку роутер то еще не загружен и адрес по dhcp модулю не дает.
    По-моему, так ...
     
  14. ИгорьК

    ИгорьК Гуру

    Ну да. Но только этот кусок нужно рассматривать в целом, вместе с "окружающими" кусками кода.
    При старте значение trying устанавливается в -14 и достигнуть 0 может лишь в том случае, если 15 раз по 30 секунд будет увеличено, либо если сеть возникнет раньше.
    Я же на первой странице детально расписал как работает код. Да, это не С++, поэтому здесь логику надо слегка помучить.
     
    Последнее редактирование: 29 ноя 2015
    xlightx нравится это.
  15. xlightx

    xlightx Нерд

    Да. Все верно. А я не мог понять для чего на старте -14... :( ну тогда (успокаивая себя) это для работы с 12 ESP без оптопары :)
     
  16. ИгорьК

    ИгорьК Гуру

    Не понял, Вы о чем? Для того, чтобы работать без оптопары, надо менять значения
    Код (C++):
    routerPin = 4
    lightPin = 3
     
  17. Aleksander

    Aleksander Нерд

    Что-то и я запутался с оптопарой. Какое ее предназначение? Чтоб пин4 не висел на земле при старте? А другие ноги нельзя использовать? Да и кстати судя по схеме у Вас светодиод висит на GPIO0 а почему lightPin=3 а реле висит на GPIO2 но почему тогда routerPin=4? А если вместо реле использовать N полевик то оптопара не нужна? Или на какую ногу ESP01 тогда его можно повесить чтоб без оптопары обойтись?
     
  18. ИгорьК

    ИгорьК Гуру

    Обе ноги при старте не должны быть прижаты к земле. Реализация может быть разной. У меня - один из возможных вариантов.
     
  19. Aleksander

    Aleksander Нерд

    Я понимаю. Но объясните пожалуйста соответствие жпио и пинов в коде. Если я допустим роутером через GPIO3 буду управлять то это будет какой пин?
     
  20. ИгорьК

    ИгорьК Гуру

    Последнее редактирование: 28 янв 2016