ESP8266: NodeMCU или Lua на борту народного «Wi-Fi Arduino»

 
RU Balancer #09.09.2017 18:09  @AleksejLt#09.09.2017 16:25
+
-
edit
 

Balancer

администратор
★★★★★
Balancer>> D1 mini тут оверкил :) Хватит и ESP-01, а она намного компактнее.
AleksejLt> При цене в 3-5 евро уже не важно :)

Чисто по габаритам :) Да и цена, всё же, вдвое с лишним отличается.

AleksejLt> Он, вроде как и ты, пытался использовать MQTT, но ему не хватило быстродействия. Оставил простую команду на запуск сценария.

MQTT для прокачивания всего потока цветов не хватит. Но по HTTP можно залить сразу готовый скрипт и уже его запускать. Того же ide.lua должно хватить для этого без посторонних инструментов.

AleksejLt> Я с ним не игрался, но не первый раз слышу жалобы на железные проблемы.

Формально с железом проблемы нет. Пины работают, тот же RGB-светодиод моргает :) Но библиотеки штатные работают как-то хитро и глючно. А при работе от Ардуины/ATtiny или даже от ESP8266 без преобразования уровней (хотя поддержка 3.3В логики у ленты не заявлена) — всё ок.
 44
LT AleksejLt #10.09.2017 18:07  @Balancer#09.09.2017 18:09
+
-
edit
 

AleksejLt

опытный

Balancer> Чисто по габаритам :) Да и цена, всё же, вдвое с лишним отличается.

Ну да. Посмотрел сейчас - от 1.5 евро за штуку, как я буду жить без али? :)

Balancer> MQTT для прокачивания всего потока цветов не хватит. Но по HTTP можно залить сразу готовый скрипт и уже его запускать

Вот он, примерно так и сделал - закачка сценария по воздуху, а потом, в нужный момент запуск. В принципе, не самый плохой вариант.

Balancer> Формально с железом проблемы нет. Пины работают, тот же RGB-светодиод моргает :) Но библиотеки штатные работают как-то хитро и глючно

Вот-вот - хитро и глючно :) Так зачем эти пляски с бубном, если ардуинка те же копейки. Разве что лишний блок в схеме.
 56.056.0
+
-
edit
 

Balancer

администратор
★★★★★
Сегодня цеплялся к NodeMCU по telnet:

nodemcu/nodemcu-firmware

nodemcu-firmware - lua based interactive firmware for mcu like esp8266 //  github.com
 

Оказалось удобно для удалённой отладки. То есть код файлов удалённо в браузере удобно править в ide.lua, а вот запускать 20 раз вывод содержимого объектов так неудобно. По telnet — самое то :)
 44
+
-
edit
 

Balancer

администратор
★★★★★
Прицепил ESP01 с NodeMCU и {{{ ide.lua}} на борту к светодиодной ленте WS2812. Теперь можно экспериментировать со световыми эффектами удалённо, программируя через браузер.

Кстати, в новых версиях библиотеку ws2812 сильно ускорили. Раньше она была чуть-чуть медленнее, чем ручная работа в Lua с массивами. Т.е. загоняем цвета в массив, потом массив сбрасываем в светодиодную ленту. Вместо того, чтобы пользоваться методами ws2812 для заполнения буфера. А теперь методы ws2812 раза в четыре-пять быстрее стали. Заполнить ленту на 60 светодиодов цветом и записать при ручной работе сейчас занимает ~75-76 мс, а через библиотеку 15-16мс.

Только чтобы работал удалённый доступ, всё надо делать на таймерах, а не в глухом цикле. Что код усложняет, конечно. Но сносно.

Заполнение радугой, например, примерно так выглядит:

function wheel(pos)
    pos = MAX_COLOR - pos;
    if pos < 85 then
        return string.char(MAX_COLOR - pos * 3, 0, pos * 3);
    end
    if pos < 170 then
        pos = pos - 85;
        return string.char(0, pos * 3, MAX_COLOR - pos * 3);
    end
    pos = pos - 170;
    return string.char(pos * 3, MAX_COLOR - pos * 3, 0);
end

function rainbow()
    tmr.alarm(3, 20, 1, function()
        buffer:shift(1)
        buffer:set(1, wheel((iter*4) % MAX_COLOR))
        ws2812.write(buffer)
        iter = iter + 1
    end)
end
 44
LT AleksejLt #18.09.2017 23:26
+
-
edit
 

AleksejLt

опытный

Как я понимаю, у нее особо нет свободных входов, чтобы подцепить туда кнопки? Захотелось добавить 3 кнопки и действия по событиям. Но не выходит. Получается, что надо по I2c подключать?!
 56.056.0
RU Balancer #01.10.2017 14:26  @AleksejLt#18.09.2017 23:26
+
-
edit
 

Balancer

администратор
★★★★★
AleksejLt> Как я понимаю, у нее особо нет свободных входов, чтобы подцепить туда кнопки?

У ESP-01 нет. Там только два явно выведенных GPIO. На NodeMCU, которая devboard — один аналоговый вход и десяток цифровых входов/выходов.

AleksejLt> Получается, что надо по I2c подключать?!

Если на ESP-01, то да. Внешний модуль мультиплексор, их готовых под i2c в ассортименте.

Хотя если программировать по воздуху, то ещё TX/RX можно задействовать, это GPIO1 и GPIO3.
 44
LT AleksejLt #03.10.2017 20:10  @Balancer#01.10.2017 14:26
+
-
edit
 

AleksejLt

опытный

Balancer> У ESP-01 нет. Там только два явно выведенных GPIO. На NodeMCU, которая devboard — один аналоговый вход и десяток цифровых входов/выходов.

NodeMCU у меня нет... В местных магазинах не особо хочется покупать, ждать с Али - тоже :)

Balancer> Если на ESP-01, то да. Внешний модуль мультиплексор, их готовых под i2c в ассортименте.

Народ на один аналоговый вход подключает несколко конопок. Может и неплохо Вешаем несколько кнопок на один провод — Funny DIY
 57.057.0
RU Balancer #03.10.2017 20:28  @AleksejLt#03.10.2017 20:10
+
-
edit
 

Balancer

администратор
★★★★★
AleksejLt> ждать с Али - тоже :)

Так надо было давно заказать, «шоб было» :)

AleksejLt> Народ на один аналоговый вход подключает несколко конопок.

Ну, это да. Только аналогового входа у ESP-01 нет :) А если вешать внешний, то разницы уже нет, на сколько каналов брать :)
 44
LT AleksejLt #05.10.2017 21:25  @Balancer#03.10.2017 20:28
+
-
edit
 

AleksejLt

опытный

Balancer> Так надо было давно заказать, «шоб было» :)

Летом не до железок было. Хотя говорили же мудрые предки - готовь с Али летом :)

Balancer> Ну, это да. Только аналогового входа у ESP-01 нет :)

Тупая железяка :) По-моему, ардуинка в этом отношение идеальна - любой модуль докупил и поставил. А счастье было так близко...
 57.057.0
+
-
edit
 

Balancer

администратор
★★★★★
Для защиты от бутлупов и зависов сразу после старта системы (а то не один раз из-за этого приходилось NodeMCU перепрошивать) я одно время использовал паузу в 5 секунд в init.lua перед стартом остального кода. Этого времени хватает, чтобы, если возникли проблемы, успеть грохнуть init.lua через терминал.

Сейчас сделал лучше. Система теперь после старта считывает файлик, инкрементирует число в нём и записывает. Если результат становится более трёх — вываливаемся, ничего не делая. Иначе ставим таймер, по которому через несколько секунд файл удаляем, а систему тем временем грузим дальше.

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


local count = 0

local pin = 4 -- D1-mini LED
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, gpio.LOW)

if file.open("fail-counter.txt") then
	count = tonumber(file.read())
     if count == nil then
          count = 0
     end
	file.close()
end

if count >= 2 then
	print("Emergency stop")
	file.remove("fail-counter.txt")
	return
end

print("Fail proof check: ", count)

file.remove("fail-counter.txt")
file.open("fail-counter.txt","w+")
file.writeline(count+1)
file.close();

if not tmr.create():alarm(3000, tmr.ALARM_SINGLE, function()
		file.remove("fail-counter.txt")
		print("Fail proof check passed")
	end)
then
	print("Can't start timer")
     return
end

gpio.write(pin, gpio.HIGH)
dofile('main.lua')


- Если всё нормально, то init.lua грузит main.lua, в котором уже и хранится основной инициализирующий код.
- Если трижды быстро (в течении трёх секунд после запуска) нажать reset, то ничего не делаем. Кстати, надо доделать, поставить опционально загрузку ide.lua и тогда можно будет контроллер и к компу не цеплять — трижды reset и грузится удалённый редактор.
- Важно не нажимать очень-очень быстро, а то дело даже не дойдёт до чтения кода. Скрипт на время готовность нажатия reset зажигает светодиод. Период нажатия — от ~0.5 до 3 секунд после старта.
 44
Последние действия над темой

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru