Не просто трудно, а БЕЗУМНО трудно. Но этот рывок надо сделать, чтобы перейти к скриптовым языкам - Python, Java. А без них на Линуксе никак. В любом случае либо Вы тонете в Ардуино => AVR, либо уходите в более мощные вещи на Линуксе. Сейчас мне интереснее что-то сделать на ESPшке с его Lua, чем заниматься С. Но потребуется перестройка мозга, это так.
Это непосредственная работа в консоли со скриптовым языком. Можно было и так написать: Код (Lua): do local ipadress = wifi.sta.getip() print(ipadress) end
Согласен. Нужно идти в ногу со временем. Чую я скоро забудем про ATmega, и будем юзать ARM.... Хотя может - это всего лишь ложное предчуствие. Кто знает. Во всяком случае, время покажет.
Своего рода терминал) Но до каких сель там остается комманда. Например, до каких пор останеться подключение к роутеру?
Дружище, был бы рядом - получил бы тапком по башке, уж извини меня. Я тебя пятнадцать раз отправлял к сообщению на 12 странице. Перечитай его еще раз. Наизусть выучи, что ли.
Вчера как раз об этом подумал, но решил дождаться вашего ответа.. Попробую убрать массив и передать данные в есп обычной строкой нужного формата. Есть ещё вопросы по обратной передачи данных... Но буду решать проблемы по мере их поступления
Игорь, подскажите куда правильней добавить скрипт в esp, который работает с UART. В init.lua? , snippets, или запускать его командой из того же init.lua ?
Только так. С паузой. Иначе Вам придется каждый раз перешивать прошивку - UART блокируется и никакими средствами Вам не остановить выполнение программы.
Помню что на какой то из страниц был скриптик для задержки, никак найти не могу, очень нужно содержание на первой странице, хотя бы на основные моменты и тонкости... НАШЕЛ !! - http://forum.amperka.ru/threads/ard...openhab-Умный-дом-азы-управления.5043/page-12 Пост #240
Краткая инструкция настройки ESP на UART обмен для таких тугих как я : 0. делаем сборку прошивки - -Переходим по ссылке: http://nodemcu-build.com/ выделяем.. галочками http://forum.amperka.ru/threads/ard...openhab-Умный-дом-азы-управления.5043/page-12 тут Игорь всё очень подробно описал Пункт 19.0 -Прошиваем модуль. Затем скачиваем прогу ESPlorer -http://esp8266.ru/esplorer/ 1 - Соединяемся ! 1.1 на картинке нет, но сначала выбераем вкладку Snippets и вставляем в окошко Код (C++): wifi.setmode(wifi.STATION) wifi.sta.config("Ваш WiFi","Пароль от Вашего WiFi") wifi.sta.autoconnect(1) Жмём - Save Жмем - Run Теперь наш модуль будет подключаться к сети сам при включении проверить можно командой =wifi.sta.getip() 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/
Есть еще один полезный пунктик после этого. 1. В правом окне находим кнопку Reload и жмем ее. Появляется кнопка с названием espUART.lua Жмем по ней правой кнопкой мыши, и выбираем пункт Compile. Происходит компиляция файла lua в файл lc и получается два файла. Файл lua - той же кнопкой удаляем. На исполнение запускаем файл espUART.lс в скрипте init.lua 2. Компиляция может пройти неудачно (хотя при этом скрипт lua может отлично работать). То есть сообщение в терминале будет приблизительно о том, что время ожидания превышено и бла бла... И, одновременно, появятся два файла. Причина - нехватка памяти. В таком случае из скрипта Lua следует перед компиляцией удалить все комментарии, а при необходимости и все отступы сначала строки. Компиляция должна проходить плавно без выдачи сообщений о превышении времени ожидания.
Попробовал нажать Reload. Прога выругалась кнопки не появились ... Подозреваю что esp занят выполнением скрипта.. P.S: Разобрался, нужно ребутнуть и сделать все то что вы написали за 30 сек ))
Конечно! Делать надо (лучше) это вообще без init.lua. Потому что в init.lua надо будет забить название файла. Или, как только init.lua напишт свое сообщение, - давать команду tmr.stop(0). Но в этом случае придется еще раз перегружаться и останавливать все, чтобы удалить файл lua.
Это скомпилированный файл, который: - выполняется быстрее (но шут с ним) - занимает меньше места. Это будет видно в терминале. В определенных случаях это важно. Например, когда начнете работать с датчиком DS18b20 - его библиотеку надо будет компилировать предварительно. Иначе, в некоторых случаях, сложная программа управления, например, котлом, может не поместиться. Раньше это было очень актуально. В новых прошивках - не всегда.
Еще вопросик чем Snippets отличается от скриптов ? Подозреваю что он хранится немного в другой части памяти и исполняется то же иначе ???
Снипеты - это просто кусочки кода, которые нужены часто под рукой. Он хранится в ESPlorer. Его удобно отправлять на модуль для разных типовых действий. В данном случае - все модули отправлять в одну сетку. У меня сделаны еще снипеты - проверка DS18b20, проверка связи с Интернет, проверка DHT22 и т.п. В целом - это просто куски кода под рукой.