Espruino:Примеры/Быстрый старт (написание кода): различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighligh...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Быстрый старт (написание кода)<ref>[https://www.espruino.com/Quick+Start+Code www.espruino.com - Quick Start (Writing Code)]</ref>= | ||
== Подключение == | |||
Перед тем, как приступать к этому руководству, советуем пройти вот эти два: | |||
* [https://www.espruino.com/Quick+Start+USB USB-платы] | |||
* [https://www.espruino.com/Quick+Start+BLE Bluetooth-платы] | |||
В них объясняется, как подключить онлайн-IDE Espruino к своему устройству. | |||
== Как работает IDE Espruino? == | |||
Подключившись к IDE, обратите внимание на её левую часть – здесь мы можем коммуницировать с устройством напрямую, а вводимые вами команды будут выполняться незамедлительно. | |||
Правая часть IDE – это редактор. По молчанию там задан текстовый режим, но если вам нужен графический режим, кликните на кнопку посередине внизу онлайн-IDE (с символами «</>»). После этого вы можете кликнуть на кнопку загрузки кода посередине экрана (иконка с направленной верх стрелочкой), чтобы отправить на Espruino код, написанный в правой части IDE. | |||
В новых версиях IDE Espruino под кнопкой загрузки кода есть иконка с треугольником – нажав на неё, можно быстро выбрать, куда будет сохранён ваш код – более подробно читайте в [https://www.espruino.com/Saving этом руководстве]. | |||
В любой версии IDE Espruino справа вверху есть кнопка с иконкой, на которой изображена книга со знаком вопроса. Если кликнуть по ней, откроется меню, в который есть пункты: | |||
* '''Tour''' – это короткая «экскурсия» по различным элементам IDE Espruino. | |||
* '''Tutorial''' – это пошаговое руководство по написанию первого кода для Espruino. | |||
[Картинка] | |||
== Начинаем писать код! == | |||
Теперь давайте напишем несколько команд (и сразу же их выполним). Вы также можете просто скопировать и вставить их в окно терминала. | |||
Впишите код ниже в левую сторону IDE и нажмите Enter: | |||
1+2 | |||
Это должно вернуть =3. Если не вернуло, то это значит, что в терминал уже введён какой-то текст. Нажмите Ctrl+C, чтобы удалить его, и попробуйте снова. | |||
Левая часть IDE работает так, что после печати команды и нажатия Enter она выполняется немедленно. Перед результатом будет напечатано «=». Если результата нет (например, если вы выполнили функцию, которая не вернула никакого значения), будет напечатано =undefined. | |||
digitalWrite(LED1,1) | |||
Не забывайте про заглавные символы – JavaScript (а следом за ним и Espruino) чувствителен к верхнему регистру, поэтому, например, digitalwrite() работать не будет, а digitalWrite() – будет. | |||
Выдало ошибку Uncaught ReferenceError: "LED1" is not defined («LED1» не был задан)? Если да, то вы, возможно, используете неофициальную плату (где конструкция LED1 всегда задана по умолчанию). Впрочем, вы всегда можете привязать светодиод к контакту при помощи var LED1 = название_вашего_контакта и спокойно продолжать дальше. | |||
Если всё нормально, будет показано =undefined, но LED1 на плате всё равно должен загореться. Это позволяет вам задать напряжение, идущее от процессора («1» – это 3.3 вольта, а «0» – это 0 вольт). Вместо LED1 можно использовать любое другое название контакта – вроде A1 и B5. Названия контактов можно посмотреть в схеме в разделе «Распиновка» в ознакомительной статье, соответствующей вашему Espruino-устройству. | |||
Теперь нажмите на стрелочку «Вверх» на клавиатуре. Это покажет команду, которую вы запускали в прошлый раз – то есть это снова будет текст digitalWrite(LED1,1). Теперь несколько раз нажмите на стрелочку «Влево» (на клавиатуре), пока курсор не дойдёт до цифры «1», нажмите Backspace, а затем «0». У вас должно получиться примерно следующее: | |||
digitalWrite(LED1,0) | |||
Теперь переместите курсор обратно к концу строчки (при помощи стрелочки «вправо» или клавиши End) и нажмите Enter, чтобы выполнить эту команду (это должно выключить светодиод). Если нажать Enter перед тем, как курсор окажется в конце строки, это не выполнит команду, а разобьёт её на две строчки (чтобы снова её соединить, просто нажмите Backspace). | |||
Для следующего примера нам надо создать переменную. Напечатайте следующее: | |||
var on = false | |||
Теперь нажмите Enter – это создаст новую переменную под названием on и задаст в ней булево значение false. | |||
Теперь мы можем написать функцию. Напечатайте следующее: | |||
function toggle() { | |||
on = !on; | |||
digitalWrite(LED1, on); | |||
} | |||
Если нажать Enter после написания первой строчки, команда выполнена не будет – вместо этого Espruino просто создаст новую строчку, потому что в коде есть незакрытая скобка. Если вы привыкли задавать функции без открытой скобки в конце строки, то ваша функция будет выполнена немедленно, что нежелательно (если вам очень хочется поместить скобки на новую строчку, нажмите Alt+Enter в конце строки function toggle(), но мы так делать не рекомендуем). | |||
Но что, если вы создали новую строчку по ошибке? Просто нажмите Backspace. Или, если вы запутались и просто хотите начать сначала, нажмите Ctrl+C – это удалит написанный вами текст. | |||
После того, как вы написали последнюю строчку и нажали Enter, в терминале будет показан текст =function () { ... }. Это значит, что ваша функция (под названием toogle() была задана). Хорошо, и что она делает? В переменной on хранится значение true или false. Команда on = !on; превращает значение true в false, а false – в true. Или более простыми словами: если представить, что «=» – это «становится», а «!» – это «не», мы получаем фразу вроде on становится не on. | |||
Следующая строчка берёт изменённое значение переменной on (true или false), а затем применяет его к заданному цифровому контакту (в нашем случае – к контакту, к которому подключен светодиод LED1). То есть, при каждом использовании функции toogle() значение в переменной on будет переключаться между true и false, в соответствии с чем будет включаться или выключаться светодиод LED1. | |||
Теперь давайте попробуем эту функцию. Впишите в левую часть IDE код ниже и нажмите Enter: | |||
toggle() | |||
Если хотите запустить её снова, просто нажмите клавишу со стрелочкой «Вверх» (чтобы найти эту команду в истории команд), а затем Enter. При каждом запуске этой функции светодиод будет менять своё состояние со включенного на выключенное и наоборот. | |||
Теперь напечатайте: | |||
var i = setInterval(toggle, 500) | |||
Это будет вызывать функцию toogle() каждые 500 мс (т.е. дважды в секунду), так что светодиод начнёт моргать. Новая переменная i (которая была задана с помощью var) – это указатель на созданный нами таймер, он пригодится нам чуть позже. | |||
Но что если нам надо отредактировать функцию toogle()? Во-первых, давайте проверим, имеет ли вообще смысл то, что мы собираемся сделать. | |||
Напечатайте: | |||
LED2 | |||
Если вам выдало ошибку Uncaught ReferenceError: "LED2" is not defined, то это значит, что у вашего устройства только один светодиод. Если так, то можете пропустить ниже моменты, где используется LED2. | |||
Напечатайте: | |||
edit('toggle') | |||
В терминале должна появиться заданная вами функция toogle() – можете начинать её редактировать. Режим редактирования функции можно включить и по-другому. Нажимайте на клавишу «Вверх», пока не вернётесь к команде, с помощью которой задавали функцию toogle(). Теперь просто переместите курсор назад с помощью клавиши «Влево» и начинайте редактировать функцию. После третьей строчки добавьте ещё одну строчку, чтобы функция стала выглядеть вот так (чтобы добавить новую строчку после digitalWrite(), переместите курсор в конец третьей строчки и нажмите на Enter): | |||
function toggle() { | |||
on = !on; | |||
digitalWrite(LED1, on); | |||
digitalWrite(LED2, !on); | |||
} | |||
Теперь переместите курсор в конец самой последней строчки функции при помощи клавиш со стрелочками (или нажмите Page Down) и нажмите Enter. Это выполнит команду, которая переопределит нашу функцию – теперь будет загораться светодиод LED1, потом LED2, потом LED1 и так далее. | |||
Теперь мы можем изменить скорость мигания светодиодов при помощи следующей команды: | |||
changeInterval(i, 200) | |||
Это то же самое, как если бы мы вначале вызвали var i = setInterval(toggle, 200) – теперь toogle() будет вызываться каждые 200 мс (5 раз в секунду). | |||
А если вы хотите, чтобы светодиоды перестали мигать, просто напечатайте это: | |||
clearInterval(i) | |||
Обратите внимание, что если вы просто напечатаете clearInterval() безо всяких аргументов, это удалит все активные интервалы. | |||
Если вы хотите начать полностью с чистого листа, удалив всё, что сделали раньше, просто напечатайте: | |||
reset() | |||
Это выполнит сброс платы. Кроме того, Espruino можно сбросить, нажав на кнопку сброса на плате (если у неё есть такая кнопка). Но мы так делать не рекомендуем, на большинстве плат это также сбросит USB/Bluetooth-соединение, так что вам также, возможно, нужно будет перезапустить терминал, а в некоторых случаях – даже отключить и снова подключить устройство. | |||
Если отключить Espruino-устройство от питания или сбросить его при помощи кнопки сброса, это сотрёт весь код, который вы написали. Чтобы не допустить этого и сохранить текущее состояние Espruino, воспользуйтесь командой save() (более подробно об этом читайте [https://www.espruino.com/Saving тут]). | |||
Команда save() сохраняет текущее состояние контактов и периферийных устройств Espruino, а также все ваши функции, переменные, прерывания и таймеры. Впрочем, команды, которые вы напечатали ранее, повторно выполнены не будут. Поэтому, если вы хотите, чтобы при запуске Espruino выполнялся какой-то код (например, вам нужно инициализировать какое-то внешнее устройство вроде LCD-дисплея), то можете воспользоваться для этого событием init() на объекте E. Например, код ниже при каждом новом запуске Espruino будет включать сначала красный, а потом зелёный светодиод. | |||
Примечание: На смарт-часах Bangle.js этот код работать не будет. Поскольку у них нет светодиодов, они используют для них специальный «виртуальный» контакт, который несовместим с использованием в виде массива в digitalWrite(). Вместо этого вы можете просто напечатать digitalWrite(LED1,...);digitalWrite(LED2,...);. | |||
E.on('init', function() { | |||
digitalWrite([LED1,LED2], 2); | |||
setTimeout("digitalWrite([LED1,LED2], 1);", 1000); | |||
setTimeout("digitalWrite([LED1,LED2], 0);", 2000); | |||
}); | |||
Примечание: Чтобы Espruino делала на запуске что-то ещё, вы можете вызвать E.on('init', ...) ещё раз. Кроме того, с такой же целью можно воспользоваться функцией onInit() – то, что будет задано в ней, также будет выполнено автоматически. | |||
В коде выше используется несколько новых функций Espruino, о которых мы ещё не рассказывали: | |||
* В аргументе digitalWrite() можно задать массив контактов (как и в digitalRead()). Задаваемые таким образом значения будут восприниматься как двоичные данные, где самый младший бит будет самым правым контактом в массиве и так далее. | |||
* Если задать в аргументе функции setTimeout() или setInterval() строку, она будет воспринята как функция и выполнена через определённый промежуток времени. | |||
Если вы загрузили на Espruino какой-то, как выяснилось, неработающий код, не волнуйтесь – восстановление делается очень просто. Просто загляните в [https://www.espruino.com/Troubleshooting эту статью]. | |||
Теперь вы должны более-менее понимать, как писать код для Espruino. Поэтому: | |||
* Взгляните на ознакомительную статью по вашей плате – она содержит более подробную информацию о вашей плате, а также ссылки на руководства, соответствующие вашему устройству: | |||
** [https://www.espruino.com/Pico Espruino Pico] | |||
** [https://www.espruino.com/WiFi Espruino WiFi] | |||
** [https://www.espruino.com/Original Espruino Original] | |||
** [https://www.espruino.com/Puck.js Puck.js] | |||
** [https://www.espruino.com/Pixl.js Pixl.js] | |||
** [https://www.espruino.com/MDBT42Q MDBT42Q] | |||
** У вас какая-то другая плата? Поищите её [https://www.espruino.com/Reference#hardware тут]. | |||
* Взгляните на [https://www.espruino.com/Tutorials руководства] и [http://wikihandbk.com/wiki/Espruino:Справочник_по_API справочник по языку]. | |||
* Ознакомьтесь со [https://www.espruino.com/Modules статьёй о модулях], чтобы узнать, какие библиотеки доступны для вашего устройства. | |||
* Узнайте, как пользоваться более продвинутыми функциями [https://www.espruino.com/Web+IDE онлайн-IDE Espruino]. | |||
* Узнайте о [https://www.espruino.com/Programming других способах программирования Espruino]. | |||
* Можете воспользоваться [[http://wikihandbk.com/ruwiki/index.php?search=&title=Служебная%3AПоиск&profile=default&fulltext=1 поиском по всей документации Espruino]. | |||
* Если у вас есть вопрос, можете задать его на [http://forum.espruino.com/ форуме]. | |||
<syntaxhighlight lang="javascript" enclose="div"> | <syntaxhighlight lang="javascript" enclose="div"> |
Версия от 21:39, 5 марта 2021
Быстрый старт (написание кода)[1]
Подключение
Перед тем, как приступать к этому руководству, советуем пройти вот эти два:
В них объясняется, как подключить онлайн-IDE Espruino к своему устройству.
Как работает IDE Espruino?
Подключившись к IDE, обратите внимание на её левую часть – здесь мы можем коммуницировать с устройством напрямую, а вводимые вами команды будут выполняться незамедлительно.
Правая часть IDE – это редактор. По молчанию там задан текстовый режим, но если вам нужен графический режим, кликните на кнопку посередине внизу онлайн-IDE (с символами «</>»). После этого вы можете кликнуть на кнопку загрузки кода посередине экрана (иконка с направленной верх стрелочкой), чтобы отправить на Espruino код, написанный в правой части IDE.
В новых версиях IDE Espruino под кнопкой загрузки кода есть иконка с треугольником – нажав на неё, можно быстро выбрать, куда будет сохранён ваш код – более подробно читайте в этом руководстве.
В любой версии IDE Espruino справа вверху есть кнопка с иконкой, на которой изображена книга со знаком вопроса. Если кликнуть по ней, откроется меню, в который есть пункты:
- Tour – это короткая «экскурсия» по различным элементам IDE Espruino.
- Tutorial – это пошаговое руководство по написанию первого кода для Espruino.
[Картинка]
Начинаем писать код!
Теперь давайте напишем несколько команд (и сразу же их выполним). Вы также можете просто скопировать и вставить их в окно терминала.
Впишите код ниже в левую сторону IDE и нажмите Enter:
1+2
Это должно вернуть =3. Если не вернуло, то это значит, что в терминал уже введён какой-то текст. Нажмите Ctrl+C, чтобы удалить его, и попробуйте снова.
Левая часть IDE работает так, что после печати команды и нажатия Enter она выполняется немедленно. Перед результатом будет напечатано «=». Если результата нет (например, если вы выполнили функцию, которая не вернула никакого значения), будет напечатано =undefined.
digitalWrite(LED1,1)
Не забывайте про заглавные символы – JavaScript (а следом за ним и Espruino) чувствителен к верхнему регистру, поэтому, например, digitalwrite() работать не будет, а digitalWrite() – будет.
Выдало ошибку Uncaught ReferenceError: "LED1" is not defined («LED1» не был задан)? Если да, то вы, возможно, используете неофициальную плату (где конструкция LED1 всегда задана по умолчанию). Впрочем, вы всегда можете привязать светодиод к контакту при помощи var LED1 = название_вашего_контакта и спокойно продолжать дальше.
Если всё нормально, будет показано =undefined, но LED1 на плате всё равно должен загореться. Это позволяет вам задать напряжение, идущее от процессора («1» – это 3.3 вольта, а «0» – это 0 вольт). Вместо LED1 можно использовать любое другое название контакта – вроде A1 и B5. Названия контактов можно посмотреть в схеме в разделе «Распиновка» в ознакомительной статье, соответствующей вашему Espruino-устройству.
Теперь нажмите на стрелочку «Вверх» на клавиатуре. Это покажет команду, которую вы запускали в прошлый раз – то есть это снова будет текст digitalWrite(LED1,1). Теперь несколько раз нажмите на стрелочку «Влево» (на клавиатуре), пока курсор не дойдёт до цифры «1», нажмите Backspace, а затем «0». У вас должно получиться примерно следующее:
digitalWrite(LED1,0)
Теперь переместите курсор обратно к концу строчки (при помощи стрелочки «вправо» или клавиши End) и нажмите Enter, чтобы выполнить эту команду (это должно выключить светодиод). Если нажать Enter перед тем, как курсор окажется в конце строки, это не выполнит команду, а разобьёт её на две строчки (чтобы снова её соединить, просто нажмите Backspace).
Для следующего примера нам надо создать переменную. Напечатайте следующее:
var on = false
Теперь нажмите Enter – это создаст новую переменную под названием on и задаст в ней булево значение false.
Теперь мы можем написать функцию. Напечатайте следующее:
function toggle() {
on = !on; digitalWrite(LED1, on);
}
Если нажать Enter после написания первой строчки, команда выполнена не будет – вместо этого Espruino просто создаст новую строчку, потому что в коде есть незакрытая скобка. Если вы привыкли задавать функции без открытой скобки в конце строки, то ваша функция будет выполнена немедленно, что нежелательно (если вам очень хочется поместить скобки на новую строчку, нажмите Alt+Enter в конце строки function toggle(), но мы так делать не рекомендуем).
Но что, если вы создали новую строчку по ошибке? Просто нажмите Backspace. Или, если вы запутались и просто хотите начать сначала, нажмите Ctrl+C – это удалит написанный вами текст.
После того, как вы написали последнюю строчку и нажали Enter, в терминале будет показан текст =function () { ... }. Это значит, что ваша функция (под названием toogle() была задана). Хорошо, и что она делает? В переменной on хранится значение true или false. Команда on = !on; превращает значение true в false, а false – в true. Или более простыми словами: если представить, что «=» – это «становится», а «!» – это «не», мы получаем фразу вроде on становится не on.
Следующая строчка берёт изменённое значение переменной on (true или false), а затем применяет его к заданному цифровому контакту (в нашем случае – к контакту, к которому подключен светодиод LED1). То есть, при каждом использовании функции toogle() значение в переменной on будет переключаться между true и false, в соответствии с чем будет включаться или выключаться светодиод LED1.
Теперь давайте попробуем эту функцию. Впишите в левую часть IDE код ниже и нажмите Enter:
toggle()
Если хотите запустить её снова, просто нажмите клавишу со стрелочкой «Вверх» (чтобы найти эту команду в истории команд), а затем Enter. При каждом запуске этой функции светодиод будет менять своё состояние со включенного на выключенное и наоборот.
Теперь напечатайте:
var i = setInterval(toggle, 500)
Это будет вызывать функцию toogle() каждые 500 мс (т.е. дважды в секунду), так что светодиод начнёт моргать. Новая переменная i (которая была задана с помощью var) – это указатель на созданный нами таймер, он пригодится нам чуть позже.
Но что если нам надо отредактировать функцию toogle()? Во-первых, давайте проверим, имеет ли вообще смысл то, что мы собираемся сделать.
Напечатайте:
LED2
Если вам выдало ошибку Uncaught ReferenceError: "LED2" is not defined, то это значит, что у вашего устройства только один светодиод. Если так, то можете пропустить ниже моменты, где используется LED2.
Напечатайте:
edit('toggle')
В терминале должна появиться заданная вами функция toogle() – можете начинать её редактировать. Режим редактирования функции можно включить и по-другому. Нажимайте на клавишу «Вверх», пока не вернётесь к команде, с помощью которой задавали функцию toogle(). Теперь просто переместите курсор назад с помощью клавиши «Влево» и начинайте редактировать функцию. После третьей строчки добавьте ещё одну строчку, чтобы функция стала выглядеть вот так (чтобы добавить новую строчку после digitalWrite(), переместите курсор в конец третьей строчки и нажмите на Enter):
function toggle() {
on = !on; digitalWrite(LED1, on); digitalWrite(LED2, !on);
}
Теперь переместите курсор в конец самой последней строчки функции при помощи клавиш со стрелочками (или нажмите Page Down) и нажмите Enter. Это выполнит команду, которая переопределит нашу функцию – теперь будет загораться светодиод LED1, потом LED2, потом LED1 и так далее.
Теперь мы можем изменить скорость мигания светодиодов при помощи следующей команды:
changeInterval(i, 200)
Это то же самое, как если бы мы вначале вызвали var i = setInterval(toggle, 200) – теперь toogle() будет вызываться каждые 200 мс (5 раз в секунду).
А если вы хотите, чтобы светодиоды перестали мигать, просто напечатайте это:
clearInterval(i)
Обратите внимание, что если вы просто напечатаете clearInterval() безо всяких аргументов, это удалит все активные интервалы.
Если вы хотите начать полностью с чистого листа, удалив всё, что сделали раньше, просто напечатайте:
reset()
Это выполнит сброс платы. Кроме того, Espruino можно сбросить, нажав на кнопку сброса на плате (если у неё есть такая кнопка). Но мы так делать не рекомендуем, на большинстве плат это также сбросит USB/Bluetooth-соединение, так что вам также, возможно, нужно будет перезапустить терминал, а в некоторых случаях – даже отключить и снова подключить устройство.
Если отключить Espruino-устройство от питания или сбросить его при помощи кнопки сброса, это сотрёт весь код, который вы написали. Чтобы не допустить этого и сохранить текущее состояние Espruino, воспользуйтесь командой save() (более подробно об этом читайте тут).
Команда save() сохраняет текущее состояние контактов и периферийных устройств Espruino, а также все ваши функции, переменные, прерывания и таймеры. Впрочем, команды, которые вы напечатали ранее, повторно выполнены не будут. Поэтому, если вы хотите, чтобы при запуске Espruino выполнялся какой-то код (например, вам нужно инициализировать какое-то внешнее устройство вроде LCD-дисплея), то можете воспользоваться для этого событием init() на объекте E. Например, код ниже при каждом новом запуске Espruino будет включать сначала красный, а потом зелёный светодиод.
Примечание: На смарт-часах Bangle.js этот код работать не будет. Поскольку у них нет светодиодов, они используют для них специальный «виртуальный» контакт, который несовместим с использованием в виде массива в digitalWrite(). Вместо этого вы можете просто напечатать digitalWrite(LED1,...);digitalWrite(LED2,...);.
E.on('init', function() {
digitalWrite([LED1,LED2], 2); setTimeout("digitalWrite([LED1,LED2], 1);", 1000); setTimeout("digitalWrite([LED1,LED2], 0);", 2000);
});
Примечание: Чтобы Espruino делала на запуске что-то ещё, вы можете вызвать E.on('init', ...) ещё раз. Кроме того, с такой же целью можно воспользоваться функцией onInit() – то, что будет задано в ней, также будет выполнено автоматически.
В коде выше используется несколько новых функций Espruino, о которых мы ещё не рассказывали:
- В аргументе digitalWrite() можно задать массив контактов (как и в digitalRead()). Задаваемые таким образом значения будут восприниматься как двоичные данные, где самый младший бит будет самым правым контактом в массиве и так далее.
- Если задать в аргументе функции setTimeout() или setInterval() строку, она будет воспринята как функция и выполнена через определённый промежуток времени.
Если вы загрузили на Espruino какой-то, как выяснилось, неработающий код, не волнуйтесь – восстановление делается очень просто. Просто загляните в эту статью.
Теперь вы должны более-менее понимать, как писать код для Espruino. Поэтому:
- Взгляните на ознакомительную статью по вашей плате – она содержит более подробную информацию о вашей плате, а также ссылки на руководства, соответствующие вашему устройству:
- Espruino Pico
- Espruino WiFi
- Espruino Original
- Puck.js
- Pixl.js
- MDBT42Q
- У вас какая-то другая плата? Поищите её тут.
- Взгляните на руководства и справочник по языку.
- Ознакомьтесь со статьёй о модулях, чтобы узнать, какие библиотеки доступны для вашего устройства.
- Узнайте, как пользоваться более продвинутыми функциями онлайн-IDE Espruino.
- Узнайте о других способах программирования Espruino.
- Можете воспользоваться [поиском по всей документации Espruino.
- Если у вас есть вопрос, можете задать его на форуме.
См.также
Внешние ссылки