Все тот-же ESP8266

Тема в разделе "ESP8266, ESP32", создана пользователем Mestniy, 19 фев 2016.

  1. ИгорьК

    ИгорьК Гуру

    Не просто трудно, а БЕЗУМНО трудно. Но этот рывок надо сделать, чтобы перейти к скриптовым языкам - Python, Java. А без них на Линуксе никак. В любом случае либо Вы тонете в Ардуино => AVR, либо уходите в более мощные вещи на Линуксе.
    Сейчас мне интереснее что-то сделать на ESPшке с его Lua, чем заниматься С. Но потребуется перестройка мозга, это так.
     
    Mestniy нравится это.
  2. ИгорьК

    ИгорьК Гуру

    Это непосредственная работа в консоли со скриптовым языком.
    Можно было и так написать:
    Код (Lua):
    do
        local ipadress = wifi.sta.getip()
        print(ipadress)
    end
     
    Mestniy нравится это.
  3. Mestniy

    Mestniy Гуру

    Согласен. Нужно идти в ногу со временем. Чую я скоро забудем про ATmega, и будем юзать ARM.... Хотя может - это всего лишь ложное предчуствие:cool:. Кто знает. Во всяком случае, время покажет.
     
    Viquis нравится это.
  4. Mestniy

    Mestniy Гуру

    Своего рода терминал) Но до каких сель там остается комманда. Например, до каких пор останеться подключение к роутеру?
     
    Viquis нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Дружище, был бы рядом - получил бы тапком по башке, уж извини меня.
    Я тебя пятнадцать раз отправлял к сообщению на 12 странице. Перечитай его еще раз. Наизусть выучи, что ли.
     
    Securbond и Mestniy нравится это.
  6. Mestniy

    Mestniy Гуру

    И правильно бы сделали. Я с ленцой, немного. Но согласен, ломать меня надо.
     
    Viquis и ИгорьК нравится это.
  7. Securbond

    Securbond Гуру

    Вчера как раз об этом подумал, но решил дождаться вашего ответа.. Попробую убрать массив и передать данные в есп обычной строкой нужного формата. Есть ещё вопросы по обратной передачи данных... Но буду решать проблемы по мере их поступления
     
  8. Securbond

    Securbond Гуру

    Игорь, подскажите куда правильней добавить скрипт в esp, который работает с UART. В init.lua? , snippets, или запускать его командой из того же init.lua ?
     
  9. ИгорьК

    ИгорьК Гуру

    Только так. С паузой. Иначе Вам придется каждый раз перешивать прошивку - UART блокируется и никакими средствами Вам не остановить выполнение программы.
     
  10. Securbond

    Securbond Гуру

    Помню что на какой то из страниц был скриптик для задержки, никак найти не могу, очень нужно содержание на первой странице, хотя бы на основные моменты и тонкости...

    НАШЕЛ !! - http://forum.amperka.ru/threads/ard...openhab-Умный-дом-азы-управления.5043/page-12 Пост #240
     
  11. ИгорьК

    ИгорьК Гуру

    Тоже тапком? :)
    ну... не факт. Нужно все таки слегка отсеивать...
     
  12. Securbond

    Securbond Гуру

    Краткая инструкция настройки ESP на UART обмен для таких тугих как я :
    0. делаем сборку прошивки -
    -Переходим по ссылке: http://nodemcu-build.com/
    выделяем.. галочками http://forum.amperka.ru/threads/ard...openhab-Умный-дом-азы-управления.5043/page-12 тут Игорь всё очень подробно описал Пункт 19.0
    -Прошиваем модуль. Затем скачиваем прогу ESPlorer -http://esp8266.ru/esplorer/
    instr.PNG
    1 - Соединяемся !
    1.1 на картинке нет, но сначала выбераем вкладку Snippets и вставляем в окошко
    Код (C++):
    wifi.setmode(wifi.STATION)
    wifi.sta.config("Ваш WiFi","Пароль от Вашего WiFi")
    wifi.sta.autoconnect(1)
    Жмём - Save
    Жмем - Run
    Теперь наш модуль будет подключаться к сети сам при включении
    проверить можно командой =wifi.sta.getip() 1111.PNG
    2. Жмем новый файл, вставляем код
    Код (Java):
    Broker="IP вашего брокера mqtt"
    port=1883
    myClient="ESPUART"
    --name="ESPUART"
    --pass="password"
    sendmessage = false

    m = mqtt.Client(myClient, 180) -- Объявляем MQTT клиента
    m:lwt("/lwt", myClient, 0, 0) -- Сообщение OpenHab о потере связи
    m:on("offline", function(con) -- Функция для возобновления связи с брокером, если терялась сеть
      sendmessage = false
      print ("reconnecting...") -- Закомментировать для рабочего варианта
      print(node.heap()) -- Закомментировать для рабочего варианта
      tmr.alarm(1, 120000, 1, function() -- Многократный вызов
      m:connect(Broker, port, 0, function(conn) -- Адрес и порт брокера
      tmr.stop(1) -- если соединились, прекращаем соединение
      m:subscribe("arduino/#",0, function(conn)
      sendmessage = true
      print ("Subscribed!")
      end)
      end)
      collectgarbage() -- Почистим память
      end)
    end)

    uart.on("data","\n",  -- Функция обработки информаци из UART
      function(input)
      if wifi.sta.status() == 5 then
      print("Received from UART:", input) -- Закомментировать для рабочего варианта
      local topic -- Две локальные переменные для захвата информации
      local info
      -- Функция захвата. Захватываем только шаблоны типа "Цифры-двоеточие-цифры ( и необязательно)-точка-цифры"
      topic, info = string.match(input, "(%d+):(%d+%.?%d?%d?)")

      if topic ~= nil  then -- Только если прошел правильный захват. Иначе и topic и info будут nil
          if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil and sendmessage == true then
           print("Publish Topic: "..topic.." and Info: "..info) -- Закомментировать для рабочего варианта
           m:publish("arduino/"..topic.."/state",info,0,0) -- Публикуем на брокер
          end
      end
      topic = nil -- Освобождаем и чистим память
      info = nil
      collectgarbage()
      end
      end, 0)
    m:on("message", function(conn, topic, data) -- Если пришли банные от брокера
      if (string.find(topic, "state")) == nil then -- И если это не подтверждение состояния, то есть в строке отсутствует "state"
      local top = string.gsub(topic, "arduino/","") -- Удаляем лишнюю часть информации
      print("To Arduino -> ") -- Закомментировать для рабочего варианта
      print(top..":"..data) -- Отправляем на Ардуино по UART
      end
      collectgarbage() -- Чистим память
    end)

    tmr.alarm(0, 1000, 1, function() -- Подписываемся на все топики, начинающиеся на "arduino/"
      if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then -- Если связь установлена
      tmr.stop(0) -- Останавливаем этот таймер, чтобы на повторять подписку
      m:connect(Broker, port, 0, function(conn)  -- Подписываемся
      print("connected") -- Закомментировать для рабочего варианта
      m:subscribe("arduino/#",0, function(conn)
      sendmessage = true
      end)
      end)
      end
    end)
    Расскоментировать строки с логином и паролем если необходимо.
    3. нажимаем сохранить имя у меня espUART.lua, если будет другое то его нужно указать в скрипте init.lua
    скрипт сохранится на компе и зальется в esp (у меня залился сам)

    Опять нажимаем на новый файл и делаем по аналогии файлик init.lua со следующим скриптом
    Код (Java):
    do
    FileToExecute="espUART.lua"
    l = file.list()
    for k,v in pairs(l) do
      if k == FileToExecute then
        tmr.delay(30000)
        print("*** You have got 30 sec to stop timer 0 ***")
        print("*******    Execute: tmr.stop(5)     *******")
        tmr.alarm(0, 30000, 0, function()
          print("Executing ".. FileToExecute)
          dofile(FileToExecute)
        end)
      end
    end
    end
    Сохраняем, перезагружаем esp ВСЁ!!!
    Теперь при включении наш esp ждет 30 сек и грузит скрипт для обмена данными по UART.
    Более подробная инфа в теме - http://forum.amperka.ru/threads/ard...y-pi-2-openhab-Умный-дом-азы-управления.5043/
     
    Последнее редактирование: 24 фев 2016
    yucan, Mestniy и ИгорьК нравится это.
  13. ИгорьК

    ИгорьК Гуру

    Есть еще один полезный пунктик после этого.
    1. В правом окне находим кнопку Reload и жмем ее. Появляется кнопка с названием espUART.lua
    Жмем по ней правой кнопкой мыши, и выбираем пункт Compile.
    Происходит компиляция файла lua в файл lc и получается два файла. Файл lua - той же кнопкой удаляем.
    На исполнение запускаем файл espUART.lс в скрипте init.lua
    2. Компиляция может пройти неудачно (хотя при этом скрипт lua может отлично работать). То есть сообщение в терминале будет приблизительно о том, что время ожидания превышено и бла бла... И, одновременно, появятся два файла.
    Причина - нехватка памяти. В таком случае из скрипта Lua следует перед компиляцией удалить все комментарии, а при необходимости и все отступы сначала строки.
    Компиляция должна проходить плавно без выдачи сообщений о превышении времени ожидания.
     
  14. Securbond

    Securbond Гуру

    Попробовал нажать Reload. Прога выругалась кнопки не появились ... Подозреваю что esp занят выполнением скрипта..
    2222.PNG
    P.S: Разобрался, нужно ребутнуть и сделать все то что вы написали за 30 сек ))
     
    Последнее редактирование: 24 фев 2016
  15. ИгорьК

    ИгорьК Гуру

    Конечно!
    Делать надо (лучше) это вообще без init.lua. Потому что в init.lua надо будет забить название файла.
    Или, как только init.lua напишт свое сообщение, - давать команду tmr.stop(0). Но в этом случае придется еще раз перегружаться и останавливать все, чтобы удалить файл lua.
     
  16. Securbond

    Securbond Гуру

    Только объясните в чем разница ? Почему лучше lc а не lua ?
     
  17. ИгорьК

    ИгорьК Гуру

    Это скомпилированный файл, который:
    - выполняется быстрее (но шут с ним)
    - занимает меньше места. Это будет видно в терминале.
    В определенных случаях это важно.
    Например, когда начнете работать с датчиком DS18b20 - его библиотеку надо будет компилировать предварительно. Иначе, в некоторых случаях, сложная программа управления, например, котлом, может не поместиться. Раньше это было очень актуально. В новых прошивках - не всегда.
     
    Securbond нравится это.
  18. ИгорьК

    ИгорьК Гуру

    ... тема превращается в инструкцию по работе с ESP8266 :)
     
  19. Securbond

    Securbond Гуру

    Еще вопросик чем Snippets отличается от скриптов ?
    Подозреваю что он хранится немного в другой части памяти и исполняется то же иначе ???
     
  20. ИгорьК

    ИгорьК Гуру

    Снипеты - это просто кусочки кода, которые нужены часто под рукой. Он хранится в ESPlorer. Его удобно отправлять на модуль для разных типовых действий. В данном случае - все модули отправлять в одну сетку.
    У меня сделаны еще снипеты - проверка DS18b20, проверка связи с Интернет, проверка DHT22 и т.п.
    В целом - это просто куски кода под рукой.
     
    Securbond нравится это.