Comments 74
Мне показалось, или NodeMCU действительно занимает почти всю память контроллера? Уже на записи второго модуля в память я получил ошибку сообщающую о нехватке памяти, компилирование в бинарный код уже имеющегося в памяти модуля завершилось с той же ошибкой. Возможно я что-то сделал не так, но больше к этой прошивке возвращаться желания не возникло.
Не изучал вопрос потребления памяти. Пока игрался — загружал много скриптов проблем вроде не возникало.
При загрузке NodeMCU Вы получаете 21K heap. Есть Micropython который дает 24K (но не умеет пока WiFi и другие важные штуки)
Тем не менее, это немало если компилировать Lua в байткод и разумно пользоваться памятью, а также разделять модули для более гибкой компиляции. Конечно, это совсем не много если сравнивать Lua с C++ и другими статическими языками. С другой стороны, никто не мешает взять и написать необходимый функционал на C, открыть его для доступа через метод Lua, сделать пул реквест и наблюдать как этим пользуются другие люди.
В любом случае, давайте задумаемся, это ведь начало прихода микроконтроллеров в жизнь бОльшего круга людей. Естественно, это позволяет развивать все это еще сильнее и быстрее. MicroPython, NodeMCU — это первые шаг в этом направлении… Мы ведь хотим интернет вещей?

Подойдёт ли Forth для IoT?

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

github.com/jdinuncio/forthos

Странно, нашёл тот модуль, который я загружал, он для поддержки bmp180, весит всего лишь 4кб, после этого загрузка дополнительных 800 байт завершилась с ошибкой. Кстати обратил внимание, что разные билды nodemcu весят по-разному (сами бинарные файлы для заливки). Заливал последний из доступных на тот момент, версия 0.9.5 билд от 20150212.

Но если думать о других людях, то я бы предложил не тратить время на nodemcu и micropython и писать на Си. Лично я знаю Си и Lua примерно на одинаковом уровне, но первый мне кажется более простым и понятным. Взяв за основу прошивку frankenstein, написал к ней модули для работы с i2c железками BH1750, BMP180, HD44780, HMC5883, PCF8591, SHT21, TCS3414, в результате потребление памяти увеличилось с 40 до 41% и соответственно осталась возможность обновлять прошивку по воздуху через tftp.

Если посмотреть на тот же ардуино, то они ведь крутую штуку сделали. Они не стали уходить от Си, а лишь добавили несколько библиотек, отдаляющих пользователя от работы с регистрами, заменив это дело макросами и функциями с красивыми именами. И пользователи, совершенно не знающие Си и микроконтроллеры изучают Си и пишут на нём. Причём насколько бы ущербной не была Arduino IDE, она позволяет отказаться от Wire и использовать AVR библиотеки, писать самому в регистры, в общем не ограничивает функционал, как например nodemcu.
Есть в Вашей мысли здравое, в особенности аналогия с arduino.
Пойду смотреть frankenstein. Можно ли где-то взглянуть на Ваши дополнения?
Пока что нет, планирую выложить в открытый доступ сразу после того, как допишу ещё несколько модулей, для: HMC5883L, ADXL345, MPR121, DS3231, DS1337, L3G4200D, SSD1306.
Как обычно, неожиданно, напали более важные дела, поэтому решил не откладывать и выложить как есть. Github использую первый раз, надеюсь что всё сделал правильно: github.com/darkbyte-ru/esp8266-frankenstein
А зачем Lua? Не логичнее было бы на плюсах написать и скомпилировать под этот контроллер?
Однозначно, если что-то делать более-менее серьёзное надо делать НЕ на Lua, вот варианты:

Или готовое — homes-smart. Или самому покопаться можно — frankenstein

Первый проект из коробки поддерживает кучу всяких интересных сервисов, в т.ч. MQTT, Narodmon, MajorDoMo, ThingSpeak, FlyMon, Wunderground. Я вот то-же на него подсел и пытаюсь по мере возможности свой вклад внести.

А если поиграться и достаточно только температуры — да, Lua самое то.
За стиль изложения в статье автору респект. Спасибо.
homes-smart — смотрел, но некоторые функции, например DeepSleep, только в платной версии PRO.
А что за система FlyMon? Ни описания ни регистрации не нашел.
Ну, я для нескольких спящих железок лицензии прикупил, оно того стоит, автор пилит прошивку ежедневно.
Остальные модули у меня в Free режиме стоят, и кушать не просят, самое то, что нужно.
FlyMon DMS (device management system) системка такая, на Ruby пишется, для управления устройствами разными, в основном роутерами, а сейчас уже и ESP поддержка будет.
Прошивка от homes-smart даже в Free версии умеет данные на FlyMon отправлять, ну а дальше графики строятся автоматом.
Я вот для себя еще потихоньку пишу мануалы по ESP, может пригодятся.
То есть Вы.
Лучше бы добавили документации побольше, чем donation просить на главной README.md :)
Честно говоря, видел примеры работы с датчиком DS18B20 (да и вообще с 1-wire) только Lua, поэтому и остановил выбор на NodeMCU.
Ясно. В принципе, если ресурсов контроллера хватило, времени потрачено немного, вещь работает — почему бы и нет, верно?
В том-то все и дело. При выборе вариантов я руководствовался количеством мануалов и простотой реализации.
Именно! Как раз об этом я и говорю чуть выше. Сообщество + простота конфигурации играет огромную роль в появлени рабочих прототипов.
С и C++ с точки зрения производительности несомненно хороши, здесь вообще никаких споров быть не может. Но получается замкнутый круг: те кто пишут на C++ не хотят писать документацию, а сообщество, которое хочет писать документацию — не достаточно хорошо знает C++. Интерпретируемые языки для микроконтроллеров, (ИМХО конечно), позволяют выйти из этого круга и двигаться вперед.
Не измерял. Допустим среднее потребление ~20мА. Соответственно двух батареек емкостью 1Ач хватит примерно на 50 часов.
В планах добавить уход в DeepSleep на время паузы, тогда расход сократится в разы.
У меня около 16 в ожидании и около 100 в передаче. Поэтому и усреднил ~20
От 18650 аккума примерно 6 дней в режиме сна и отправки данных на сервер каждые 5 мин.
UFO landed and left these words here
> 1. Найти альтернативу thingspeak. Графики хочется двигать и масштабировать. Может, кто-то знает аналоги?

Там можно масштабировать. Для этого надо нажать на иконку карандаша в верхнем правом углу графика.
Так же можно данные забирать (json/xml) себе для обработки.
Дык поднимите у себя БД и рисуйте при помощи Highcharts. Делов там на пару часов с курением мануалов.
Ну а если есть желание — айда к нам в группу homes-smart, графиками укомплектуем ;)
Поднять БД и рисовать самому — вообще не проблема. Но есть ощущение что в эпоху развития IoT это уже сделано и работает.
Все, кто представляет из себя уже что-то более-менее, начинают после раскрутки просить деньгу
Посмотрите тогда еще в сторону Librato, у них были бесплатные пакеты для разработчиков, выглядят солидно.

Ну надежность еще и приватность для некоторых имеет значение. Есть люди, которым важно не визуальная составляющая, а «секюрно ли это работает ?» (датчик температуры в сортире на приусадебном участке).
UFO landed and left these words here
Как я понял, у них сейчас закрыта регистрация. Оставил контакты месяца 2 назад — тишина.
Да и вообще неудивительно, с такой-то странной политикой. Сначала они были pachube.com. Потом стали cosm.com. Теперь стали xively.com. При этом они еще и переделали все API, сделав старые фиды legacy. Руки отрывать маркетологам, которые все это придумали, и технарям, которым чешется менять то, что и так работает.
Формально Xively и сейчас работает, так или иначе девайс для замера потребляемой энергии CurrentCost к ним по дефолту сливает, но саппорт и правда или не реагирует вообще или говорит мол мы тут непричем, хотя данные идут на их IP и триггеры их работают.
Есть ли такие готовые устройства по $5-10 с двухзначным экраном? Можно было бы повестить в каждой комнате и при этом централизированно собирать данные.
Заказал такой девайс поиграться, на днях подойдет. Почитал даташит. Есть там интересный пункт на 6 странице, что в нем есть встроенный температурный датчик. Если он есть зачем городить DS18B20, не проще научиться им пользоваться?
Чип греется и будет показывать температуру чипа, а не окружающей среды… Да и точность у его может быть никакая…
DS18B20 не так уж дорого стоит.
Самое странное, что у меня два модуля из 15 при подключении питания разогреваются градусов до 60, при этом не сказать, чтобы сильно больше потребляют тока, да и работают так же, как и нормальные.
Если речь про модули ESP8266, то там при сборке встречается баг один. Он заключается в том, что для светодиода (индикатор питания) стоит резистор на очень маленькое сопротивление и происходит большой нагрев.
Да, модуль ESP8266, если быть точнее, то ESP-05 как на фото из статьи, только выводов 5, выведен reset. Но у этого модуля нет светодиодов и греется сам контроллер. И такого бага нет у других экземпляров той же модификации, и прошивка залита одинаковая (мод на базе франкинштейна).
Я не смог. Если вкратце, то после того как я превратил в кирпичи все модули этой модификации с использованием AT+CIUPDATE, мне не оставалось ничего, кроме как выпаять флеш память и залить прошивку в неё с использованием внешнего программатора. При наличии прокачанных рук, микроскопа, скальпеля и хорошего паяльника вполне можно отсоединить GPIO0 от VCC и замкнуть его на GND на время программирования, но у меня ничего из этого списка не оказалось.
Ок. Спасибо за оперативный ответ. Кармы не хватает плюсануть.
Скорее всего поступлю так-же — залью ПО через программатор.
Хм… не знал что есть столько вариантов этих модулей. На ибее ищется только первый вариант, как самый популярный. Но странно что при сортировке по цене другие модули не попадают в поиск.
Кстати, насколько лучше керамическая антенна в ESP-03 по сравнению с печатной на ESP-01?
Ссылка работает. Но если что, можно на ebay или ali ввести в поиске «nodemcu wifi», будет тоже самое.
Ценник негуманный. Чистый модуль стоит 4$ от силы, а эти впаривают по 15$.
Цена отличается, бесспорно. но не забывайте, еще на нем стоит TTL конвертер, две кнопочки, одна включает режим прошивки, другая пользовательская. Также на нем распаяны все выводы, в том числе аналоговый пин. Это как минимум удобнее, если прошиваете его несколько раз за день. Я покупал вот такой.
Тем не менее, существуют экземпляры без TTL но с полной разводкой контактов — тоже неплохой вариант, но это дело вкуса.
О, посмотрел интернет уже есть ESP-12 модуль, такой же как ESP-08 только с печатной антенной как у ESP-01
Есть вот такой русскоязычный проект: narodmon.ru/
Там и каталог решений для сбора/отправки данных есть.
Спасибо за статью. Пытаюсь повторить, Init.lua ругается на строку 14:
lua: init.lua:14: 'end' expected (to close 'function' at line 6) near ''
Я в lua полный 0, но вроде как не функция не закрыта? Добавил ниже end), вроде запустился, но стал падать на print («Temp»):
(httpsender.lua:7: attempt to concatenate global 't' (a nil value))
Я так понял, что ds18b20.read() возвращает nil, т.к. DS18b20 у меня неправильно была подключена, а print не умеет работать с nil. Добавил проверку на Nil:
if t~=nil then
print(«Temp:»..t.." C\n")
blablabla
end

И еще вопрос по подключению DS-ки: текстом в статье написано правильно: левая — земля, средняя — сигнал, правая-питание. Но на картинке то всё наоборот, левая-питание, правая-земля? Ошибка, или я как-то не так читаю такие схемы?
Картинка не правильная
левая — земля
средняя — сигнал
правая — +питание
эт я про DS18B20
Да, нужно быть на стороже и перепроверять. Всегда остается место нелепым ошибкам.
Повторил термометр и натолкнулся на то, что при выполнении init.lua не успевает получить IP на момент проверки условия. И отображается IP unavaiable, Waiting.... Как задержать скрипт перед проверкой условия?
if wifi.sta.getip()== nil then
print(«IP unavaiable, Waiting...»)
else
tmr.stop(1)
print(«Config done, IP is »..wifi.sta.getip())
dofile(«httpsender.lua»)


Вручную запускаю httpsender.lua — всё работает.
Единственное изменение в коде, а то падает через пару часов.
if(t == nil) then t=0
end

print(«Temperature:»..t.." C\n")
P.S. и давайте модулю хорошее питание, хотя бы по питанию конденсатор повесить в 100-300 мкФ.
Просаживает питание — видно в темноте легкое проседание/помаргивание яркости красного светодиода и может в консоль сыпать мусор.
На рисунке перепутана полярность подключения DS18B20 (в тексте написано правильно: земля слева)
В остальном спасибо, с учетом небольших нюансов конструкцию удалось повторить.
У меня не работал, не читал с DS18B20, пока не убрал резистор. Датчик запитал от 5 вольт — на 3.3 работал нестабильно.
Там еще от напряжения питания зависит результат измерения… питать его желательно от стабилизированных 5В, при отклонении до 4.5В уже может врать на градус…
Power Supply
Range is 3.0V to 5.5V

Почему вы считаете, что он правильную температуру показывает именно при 5В, а не при 4.5?
Методом сравнения с ртутным термометром в емкости с водой. Показания зависят от напряжения питания, это установлено экспериментально.
Сейчас проверил, мои разницы между 3,2 и 5,3 вольт не показывают.
Такая же мысль появилась. Два датчика купленных у разных продавцов немного по разному себя ведут. Как я написал выше — один не запустился с паразитным питанием.
Only those users with full accounts are able to leave comments. Log in, please.