• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Начало работы с NodeMCU

mr_Piglet

New member
Здравствуйте! При начале работы с NodeMCU возник ряд возможно глупых, но непонятных мне вопросов. Например при прошивке NodeMCU через ArduinoIDE как я понял сносится родная прошивка. То есть через ArduinoIDE МК программируется как arduino, и необходимые модули компилируются из подтягиваемых скетчем библиотек? А (родная?) прошивка NodeMCU это грубо говоря среда выполнения для скриптов LUA. Как я понимаю, залив прошивку через флешер получаю работающую плату, которой необходимы настройка и скрипты для выполнения задуманного функционала с возможностью его расширения функций теми же скриптами, а через ArduinoIDE получаем по сути arduino c функцией WiFi.
Прошу прощения если написано сумбурно. Спасибо.
 

mr_Piglet

New member
Еще Espressif дает готовую прошивку с АТ командами. Закладываться на нее не советую, поскольку пользоваться ей неудобно. То, что вы сделаете с АТ командами, под Arduino IDE вы сделаете в десять раз быстрее
В общем понятно, что писать лучше в Arduino IDE. Ответа на вопросы я не получил. В чем разница готовой прошивки и полученной с IDE. Хотя бы двумя словами для дураков.
 

=AK=

New member
В чем разница готовой прошивки и полученной с IDE.
"Готовая прошивка" по большому счету только одна - которая с АТ командами. Все остальное - "готовится на заказ", то есть, компилируется тем или иным способом из вашего исходного текста.

Что такое "прошивка, полученная с IDE", я понятия не имею и даже ума не приложу, что бы это вообще могло значить. С каким IDE? Кем получено? Чушь какая-то. IDE - это "интегральная среда проектирования". Любая, их много. "Вы знаете сколько в Бразилии донов педров? И не сосчитать!" (с)

Если вы имеете ввиду прошивку, скомпилированную в среде разработки Ардуино IDE, то она компилирует ваш скетч, то есть, написанную вами программу на языке C++.

Для среды разработки NodeMCU, с которой я плохо знаком (там, наверное, своя IDE), вы пишете программу на языке Lua, после чего она тоже так или иначе компилируется. То, что во время работы исполняется (пре-компилированный) скрипт сути дела не меняет.

PS: вполглаза глянул на то, что деется в NodeMCU. Как я понял, там прошивка делится на две составляющие:
- постоянная часть, которую называют "прошивка NodeMCU", заливаемая обычным способом.
- переменная часть, компилируемая из пользовательского текста на Lua и заливаемая специальной тулзой в определенную область памяти.
 
Последнее редактирование:

mr_Piglet

New member
Извините, похоже за отсутствием понимания сути, некорректно выражаю свои вопросы. Попробую спросить по другому. Существуют стандартные, залитые с завода прошивки, кастомные прошивки, например полученные с онлайн конструктора. При написании скетча в Arduino IDE используется стандартная (подтягиваемая с
arduino.esp8266.com) с полным заложенным в ней функционалом (модулями), или же компилируется только с используемыми в скетче библиотеками?
"Готовая прошивка" по большому счету только одна - которая с АТ командами. Все остальное - "готовится на заказ", то есть, компилируется тем или иным способом из вашего исходного текста.
Если я правильно Вас понимаю, то именно последнее вы и имеете ввиду. Если так, то лезть в дебри всевозможных SDK мне пока не нужно, и достаточно Arduino IDE. Вопрос возник из-за ограниченной памяти NodeMCU, которую хотелось бы использовать для пользы, а не загрузки неиспользуемых модулей.
 

mr_Piglet

New member
PS: вполглаза глянул на то, что деется в NodeMCU. Как я понял, там прошивка делится на две составляющие:
- постоянная часть, которую называют "прошивка NodeMCU", заливаемая обычным способом.
- переменная часть, компилируемая из пользовательского текста на Lua и заливаемая специальной тулзой в определенную область памяти.
Постепенно приходя к пониманию друг друга изменю формулировку вопроса. При работе с Arduino IDE постоянная часть постоянна, или же компилируется с использованием только используемых в скетче модулей?
 

Юрий Ботов

Moderator
Команда форума
При работе с Arduino IDE постоянная часть постоянна, или же компилируется с использованием только используемых в скетче модулей?
Вдумайтесь. Это изначально wifi модуль. И его процессорная часть изначально обязана этот модуль обслуживать. То есть кроме пользовательской прошивки в модуль должны быть загружены еще две прошивки от Espressive: обслуживание wifi и операционная система реального времени которая может принудительно переключаться с пользовательской прошивки на обслуживание wifi и обратно.
Даже если вы напишете простейшую мигалку светодиодом в arduino ide то указанные выше две прошивки будут к ней подлинкованы и отправлены на модуль без всякого вашего согласия на это, ибо иначе ОНО работать не может. Посмотрите на размер простейшей прошивки, это больше 100кб. Но это не только ваш код, это все вместе. Если это Arduino IDE, вдобавок добавляется еще некий невидимый для вас "код инициалиализации", который цепляет обработчики ваших прерываний, создает задачу в ОС РВ из этой задачи вызывает setup и loop.
 

nikolz

Well-known member
nodeMCU - это изначально разработка с виртуальной машиной LUA. т е это SDK плюс в качестве приложения виртуальная машина луа и файловая система. далее Вы можете исполнять на ней скрипты на луа
-----------------------
На ардулине Вы пишите программы на языке аля С++ используя SDK, трансилуете их в исполняемый код и грузите в ESP получится SDK плюс Ваше приложение.
----------------------
Можете в качестве приложения сделать VMLua и файловую систему Получите вариант NODEMCU.
 

=AK=

New member
При работе с Arduino IDE постоянная часть постоянна, или же компилируется с использованием только используемых в скетче модулей?
А какая вам разница? Бутлодер постоянен для всезх прошивок. Какая-то часть кода тоже постоянна - например, обработка прерываний, библиотеки API, взятые из SDK и, возможно, часть библиотек Ардуино. Это обычно линкер решает на последних стадиях компиляции, какой кусок кода где разместить, так что стабильные куски кода все время будут оказываться на одном и том же месте. Да вам-то что с того, на том же они месте оказались или на другом? Вот для Lua большая часть кода - "прошивка" - все время сидит в одном и том же месте и не меняется, только скрипты перепрошиваются, неужто это дает какие-то преимущества? Ну, загрузка скриптов будет из-за этого быстрее, пользовательский код будет грузиться не 5 секунд, а, скажем, полсекунды, это что, большое преимущество, что ли?

Анекдот напомнили. Потерялся мужик в лесу, идит, орет во все горло: "Эй! Кто-нибудь! Ау!". Вдруг сзади кто-то его трогает за плечо. Поворачивается - там огромный хмурый медведь, скоторый спрашивает его: "Чего орешь-то?". Мужик, дрожа, отвечает: "вот... потерялся... думал, может, услышит кто...". Медведь отвечает: "Ну вот, я тебя услышал. Что тебе, легче стало?"
 

mr_Piglet

New member
Анекдот напомнили.
Попробую еще раз. На пальцах. Для прошивки NodeMCU есть куча модулей. Такие как WiFi, UART, GPIO, timer и возможно несколькие другие жизненно необходимы для работы платы. Кроме них есть куча других модулей. Например file, HTTP, PWM... вот они то без необходимости в них будут компилироваться в загружаемый бинарник?
Это обычно линкер решает на последних стадиях компиляции, какой кусок кода где разместить, так что стабильные куски кода все время будут оказываться на одном и том же месте. Да вам-то что с того, на том же они месте оказались или на другом?
В каком они месте окажутся мне совершенно без разницы. За это пусть думает компилятор. мне не без разницы, если какие то куски кода, которые мне не не нужны вообще окажутся где либо.
Ну, загрузка скриптов будет из-за этого быстрее, пользовательский код будет грузиться не 5 секунд, а, скажем, полсекунды, это что, большое преимущество, что ли?
Дело не в секундах. Дело в байтах используемой памяти.
 

Сергей_Ф

Moderator
Команда форума
Дело в байтах используемой памяти
Вам её хватит при любом раскладе, при работе в Arduino IDE. А если нет - SDK или UDK Вам в помощь. Вы не о том заморачиваетесь.
nodeMCU по любому тянет с собой виртуальную машину. Вам уже объяснили.
 

=AK=

New member
вот они то без необходимости в них будут компилироваться в загружаемый бинарник?
В NodeMCU бинарник уже загружен, поэтому в нем должно быть все, что может понадобиться любому скрипту для нормальной работы. Без разницы, использует скрипт эти фичи или нет. Соответственно, для самого скрипта места остается не так уж много. Однако скрипту много места и не надо, даже самому навороченному.

В скомпилированной Ардуино IDE прошивке по умолчанию тоже прилинкованы куча библиотек, как из SDK, так и из Ардуино. Поэтому даже самый тривиaльный скетч после компиляции породит прошивку почти такого же размера, как весьма навороченный скетч на десять тысяч строк текста плюс несколько нестандартных либ. Pазница в размере будет примерно 5-10%, а в сумме вся прошивка займет 60-70% памяти, наверное. Точно трудно сказать, да и модули существуют разные, в них ставят флэш от 1 до 8 Мбит. В любом случае для начала вам хватит с лихвой.
 
Последнее редактирование:

kab

New member
Добрый вечер. Начал использовать NodeMCU и возникла проблема. Как управлять несколькими выводами, поскольку в стандартном примере управляется только 1 вывод.
/* * This sketch demonstrates how to set up a simple HTTP-like server. * T - Pastebin.com
Ключевые строки по Вашему вопросу:
Код:
  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
А в этих строках ключевой символ - "2". Это значит - пин GPIO2, как отмечено в комментарии.

Добавьте, где есть по тексту, такие же строки - заменив "2" на другую цифру, в зависимости от используемого пина (вывода)
 

Влад_х

New member
Ключевые строки по Вашему вопросу:
Код:
  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
А в этих строках ключевой символ - "2". Это значит - пин GPIO2, как отмечено в комментарии.

Добавьте, где есть по тексту, такие же строки - заменив "2" на другую цифру, в зависимости от используемого пина (вывода)
Уже пробовал, выдает ошибку upload_2017-10-31_20-25-55.png
 

kab

New member
возможно проблема в коде?
Естественно, "в коде":
- посылаете в устройство строку с "gpio/4", а в скетче описали реакцию на с "gpio/0" по "gpio/3".

Не переживайте - все начинают с этого. Процессоры еще не научились "предугадывать" желания программистов - они такие глупые, что выполняют программу буквально :)
 

Влад_х

New member
Естественно, "в коде":
- посылаете в устройство строку с "gpio/4", а в скетче описали реакцию на с "gpio/0" по "gpio/3".

Не переживайте - все начинают с этого. Процессоры еще не научились "предугадывать" желания программистов - они такие глупые, что выполняют программу буквально :)
C "gpio/3" так само, выше на скриншоте видно.
 
Сверху Снизу