Espruino:Примеры/Быстрый старт (написание кода): различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 11: Строка 11:
* [https://www.espruino.com/Quick+Start+BLE Bluetooth-платы]
* [https://www.espruino.com/Quick+Start+BLE Bluetooth-платы]


В них объясняется, как подключить онлайн-IDE Espruino к своему устройству.
В них объясняется, как подключить онлайн-IDE [[Espruino]] к своему устройству.


== Как работает IDE Espruino? ==
== Как работает IDE Espruino? ==


Подключившись к IDE, обратите внимание на её левую часть – здесь мы можем коммуницировать с устройством напрямую, а вводимые вами команды будут выполняться незамедлительно.
Подключившись к [[IDE]], обратите внимание на её левую часть – здесь мы можем коммуницировать с устройством напрямую, а вводимые вами команды будут выполняться незамедлительно.


Правая часть IDE – это редактор. По молчанию там задан текстовый режим, но если вам нужен графический режим, кликните на кнопку посередине внизу онлайн-IDE (с символами «</>»). После этого вы можете кликнуть на кнопку загрузки кода посередине экрана [[File:Quick_Start_Code_upload_icon.png]](иконка с направленной верх стрелочкой), чтобы отправить на Espruino код, написанный в правой части IDE.
Правая часть [[IDE]] – это редактор. По молчанию там задан текстовый режим, но если вам нужен графический режим, кликните на кнопку посередине внизу онлайн-IDE (с символами '''«</>»'''). После этого вы можете кликнуть на кнопку загрузки кода посередине экрана [[File:Quick_Start_Code_upload_icon.png]](иконка с направленной верх стрелочкой), чтобы отправить на [[Espruino]] код, написанный в правой части IDE.


В новых версиях IDE Espruino под кнопкой загрузки кода есть иконка с треугольником – нажав на неё, можно быстро выбрать, куда будет сохранён ваш код – более подробно читайте в [https://www.espruino.com/Saving этом руководстве].
В новых версиях [[IDE Espruino]] под кнопкой загрузки кода есть иконка с треугольником – нажав на неё, можно быстро выбрать, куда будет сохранён ваш код – более подробно читайте в [https://www.espruino.com/Saving этом руководстве].


В любой версии IDE Espruino справа вверху есть кнопка с иконкой, на которой изображена книга со знаком вопроса [[File:Quick_Start_Code_book_icon.png]] . Если кликнуть по ней, откроется меню, в который есть пункты:
В любой версии [[IDE Espruino]] справа вверху есть кнопка с иконкой, на которой изображена книга со знаком вопроса [[File:Quick_Start_Code_book_icon.png]] . Если кликнуть по ней, откроется меню, в который есть пункты:
* '''Tour''' – это короткая «экскурсия» по различным элементам IDE Espruino.
* '''Tour''' – это короткая ''«экскурсия»'' по различным элементам [[IDE Espruino]].
* '''Tutorial''' – это пошаговое руководство по написанию первого кода для Espruino.
* '''Tutorial''' – это пошаговое руководство по написанию первого кода для [[Espruino]].


[[File:Quick_Start_Code_tutorial.png|center]]
[[File:Quick_Start_Code_tutorial.png|center]]
Строка 31: Строка 31:
Теперь давайте напишем несколько команд (и сразу же их выполним). Вы также можете просто скопировать и вставить их в окно терминала.
Теперь давайте напишем несколько команд (и сразу же их выполним). Вы также можете просто скопировать и вставить их в окно терминала.


Впишите код ниже в левую сторону IDE и нажмите Enter:
Впишите код ниже в левую сторону [[IDE]] и нажмите {{клавиша|Enter}}:


<syntaxhighlight lang="javascript" enclose="div">
1+2
1+2
</syntaxhighlight>


Это должно вернуть =3. Если не вернуло, то это значит, что в терминал уже введён какой-то текст. Нажмите Ctrl+C, чтобы удалить его, и попробуйте снова.
Это должно вернуть '''=3'''. Если не вернуло, то это значит, что в терминал уже введён какой-то текст. Нажмите {{клавиша|Ctrl}}+{{клавиша|C}}, чтобы удалить его, и попробуйте снова.


Левая часть IDE работает так, что после печати команды и нажатия Enter она выполняется немедленно. Перед результатом будет напечатано «=». Если результата нет (например, если вы выполнили функцию, которая не вернула никакого значения), будет напечатано =undefined.
Левая часть [[IDE]] работает так, что после печати команды и нажатия {{клавиша|Enter}} она выполняется немедленно. Перед результатом будет напечатано '''«=»'''. Если результата нет (например, если вы выполнили функцию, которая не вернула никакого значения), будет напечатано '''=undefined'''.


<syntaxhighlight lang="javascript" enclose="div">
digitalWrite(LED1,1)
digitalWrite(LED1,1)
</syntaxhighlight>


Не забывайте про заглавные символы – JavaScript (а следом за ним и Espruino) чувствителен к верхнему регистру, поэтому, например, digitalwrite() работать не будет, а digitalWrite() – будет.
Не забывайте про заглавные символы – [[JavaScript]] (а следом за ним и [[Espruino]]) чувствителен к верхнему регистру, поэтому, например, digitalwrite() работать не будет, а digitalWrite() – будет.


Выдало ошибку Uncaught ReferenceError: "LED1" is not defined («LED1» не был задан)? Если да, то вы, возможно, используете неофициальную плату (где конструкция LED1 всегда задана по умолчанию). Впрочем, вы всегда можете привязать светодиод к контакту при помощи var LED1 = название_вашего_контакта и спокойно продолжать дальше.
Выдало ошибку '''Uncaught ReferenceError: "LED1" is not defined''' ('''«LED1»''' не был задан)? Если да, то вы, возможно, используете неофициальную плату (где конструкция '''LED1''' всегда задана по умолчанию). Впрочем, вы всегда можете привязать светодиод к контакту при помощи var LED1 = название_вашего_контакта и спокойно продолжать дальше.


Если всё нормально, будет показано =undefined, но LED1 на плате всё равно должен загореться. Это позволяет вам задать напряжение, идущее от процессора («1» – это 3.3 вольта, а «0» – это 0 вольт). Вместо LED1 можно использовать любое другое название контакта – вроде A1 и B5. Названия контактов можно посмотреть в схеме в разделе «Распиновка» в ознакомительной статье, соответствующей вашему Espruino-устройству.
Если всё нормально, будет показано '''=undefined''', но '''LED1''' на плате всё равно должен загореться. Это позволяет вам задать напряжение, идущее от процессора (''«1»'' – это ''3.3 вольта'', а ''«0»'' – это ''0 вольт''). Вместо '''LED1''' можно использовать любое другое название контакта – вроде '''A1''' и '''B5'''. Названия контактов можно посмотреть в схеме в разделе '''«Распиновка»''' в ознакомительной статье, соответствующей вашему [[Espruino-устройству]].


Теперь нажмите на стрелочку «Вверх» на клавиатуре. Это покажет команду, которую вы запускали в прошлый раз – то есть это снова будет текст digitalWrite(LED1,1). Теперь несколько раз нажмите на стрелочку «Влево» (на клавиатуре), пока курсор не дойдёт до цифры «1», нажмите Backspace, а затем «0». У вас должно получиться примерно следующее:
Теперь нажмите на стрелочку '''«Вверх»''' на клавиатуре. Это покажет команду, которую вы запускали в прошлый раз – то есть это снова будет текст digitalWrite(LED1,1). Теперь несколько раз нажмите на стрелочку '''«Влево»''' (на клавиатуре), пока курсор не дойдёт до цифры ''«1»'', нажмите {{клавиша|Backspace}}, а затем ''«0»''. У вас должно получиться примерно следующее:


<syntaxhighlight lang="javascript" enclose="div">
digitalWrite(LED1,0)
digitalWrite(LED1,0)
</syntaxhighlight>


Теперь переместите курсор обратно к концу строчки (при помощи стрелочки «вправо» или клавиши End) и нажмите Enter, чтобы выполнить эту команду (это должно выключить светодиод). Если нажать Enter перед тем, как курсор окажется в конце строки, это не выполнит команду, а разобьёт её на две строчки (чтобы снова её соединить, просто нажмите Backspace).
Теперь переместите курсор обратно к концу строчки (при помощи стрелочки ''«вправо»'' или клавиши {{клавиша|End}}) и нажмите {{клавиша|Enter}}, чтобы выполнить эту команду (это должно выключить светодиод). Если нажать {{клавиша|Enter}} перед тем, как курсор окажется в конце строки, это не выполнит команду, а разобьёт её на две строчки (чтобы снова её соединить, просто нажмите {{клавиша|Backspace}}).


Для следующего примера нам надо создать переменную. Напечатайте следующее:
Для следующего примера нам надо создать переменную. Напечатайте следующее:


<syntaxhighlight lang="javascript" enclose="div">
var on = false
var on = false
</syntaxhighlight>


Теперь нажмите Enter – это создаст новую переменную под названием on и задаст в ней булево значение false.
Теперь нажмите {{клавиша|Enter}} – это создаст новую переменную под названием '''on''' и задаст в ней булево значение '''false'''.


Теперь мы можем написать функцию. Напечатайте следующее:
Теперь мы можем написать функцию. Напечатайте следующее:


<syntaxhighlight lang="javascript" enclose="div">
function toggle() {
function toggle() {
  on = !on;
  on = !on;
  digitalWrite(LED1, on);
  digitalWrite(LED1, on);
}
}
</syntaxhighlight>


Если нажать Enter после написания первой строчки, команда выполнена не будет – вместо этого Espruino просто создаст новую строчку, потому что в коде есть незакрытая скобка. Если вы привыкли задавать функции без открытой скобки в конце строки, то ваша функция будет выполнена немедленно, что нежелательно (если вам очень хочется поместить скобки на новую строчку, нажмите Alt+Enter в конце строки function toggle(), но мы так делать не рекомендуем).
Если нажать {{клавиша|Enter}} после написания первой строчки, команда выполнена не будет – вместо этого [[Espruino]] просто создаст новую строчку, потому что в коде есть незакрытая скобка. Если вы привыкли задавать функции без открытой скобки в конце строки, то ваша функция будет выполнена немедленно, что нежелательно (если вам очень хочется поместить скобки на новую строчку, нажмите {{клавиша|Alt}}+{{клавиша|Enter}} в конце строки '''function toggle()''', но мы так делать не рекомендуем).


Но что, если вы создали новую строчку по ошибке? Просто нажмите Backspace. Или, если вы запутались и просто хотите начать сначала, нажмите Ctrl+C – это удалит написанный вами текст.
Но что, если вы создали новую строчку по ошибке? Просто нажмите {{клавиша|Backspace}}. Или, если вы запутались и просто хотите начать сначала, нажмите {{клавиша|Ctrl}}+{{клавиша|C}} – это удалит написанный вами текст.


После того, как вы написали последнюю строчку и нажали Enter, в терминале будет показан текст =function () { ... }. Это значит, что ваша функция (под названием toogle() была задана). Хорошо, и что она делает? В переменной on хранится значение true или false. Команда on = !on; превращает значение true в false, а false – в true. Или более простыми словами: если представить, что «=» – это «становится», а «!» – это «не», мы получаем фразу вроде on становится не on.
После того, как вы написали последнюю строчку и нажали {{клавиша|Enter}}, в терминале будет показан текст '''=function () { ... }'''. Это значит, что ваша функция (под названием '''toogle()''' была задана). Хорошо, и что она делает? В переменной '''on''' хранится значение '''true''' или '''false'''. Команда '''on = !on;''' превращает значение '''true''' в '''false''', а '''false''' – в '''true'''. Или более простыми словами: если представить, что '''«=»''' – это ''«становится»'', а '''«!»''' – это '''«не»''', мы получаем фразу вроде '''on''' становится не '''on'''.


Следующая строчка берёт изменённое значение переменной on (true или false), а затем применяет его к заданному цифровому контакту (в нашем случае – к контакту, к которому подключен светодиод LED1). То есть, при каждом использовании функции toogle() значение в переменной on будет переключаться между true и false, в соответствии с чем будет включаться или выключаться светодиод LED1.
Следующая строчка берёт изменённое значение переменной '''on''' ('''true''' или '''false'''), а затем применяет его к заданному цифровому контакту (в нашем случае – к контакту, к которому подключен [[светодиод]] '''LED1'''). То есть, при каждом использовании функции '''toogle()''' значение в переменной '''on''' будет переключаться между '''true''' и '''false''', в соответствии с чем будет включаться или выключаться [[светодиод]] '''LED1'''.


Теперь давайте попробуем эту функцию. Впишите в левую часть IDE код ниже и нажмите Enter:
Теперь давайте попробуем эту функцию. Впишите в левую часть [[IDE]] код ниже и нажмите {{клавиша|Enter}}:


<syntaxhighlight lang="javascript" enclose="div">
toggle()
toggle()
</syntaxhighlight>


Если хотите запустить её снова, просто нажмите клавишу со стрелочкой «Вверх» (чтобы найти эту команду в истории команд), а затем Enter. При каждом запуске этой функции светодиод будет менять своё состояние со включенного на выключенное и наоборот.  
Если хотите запустить её снова, просто нажмите клавишу со стрелочкой '''«Вверх»''' (чтобы найти эту команду в истории команд), а затем {{клавиша|Enter}}. При каждом запуске этой функции [[светодиод]] будет менять своё состояние со включенного на выключенное и наоборот.  


Теперь напечатайте:
Теперь напечатайте:


<syntaxhighlight lang="javascript" enclose="div">
var i = setInterval(toggle, 500)
var i = setInterval(toggle, 500)
</syntaxhighlight>


Это будет вызывать функцию toogle() каждые 500 мс (т.е. дважды в секунду), так что светодиод начнёт моргать. Новая переменная i (которая была задана с помощью var) – это указатель на созданный нами таймер, он пригодится нам чуть позже.  
Это будет вызывать функцию '''toogle()''' каждые ''500 мс'' (т.е. дважды в секунду), так что светодиод начнёт моргать. Новая переменная '''i''' (которая была задана с помощью '''var''') – это указатель на созданный нами таймер, он пригодится нам чуть позже.  


Но что если нам надо отредактировать функцию toogle()? Во-первых, давайте проверим, имеет ли вообще смысл то, что мы собираемся сделать.
Но что если нам надо отредактировать функцию '''toogle()'''? Во-первых, давайте проверим, имеет ли вообще смысл то, что мы собираемся сделать.


Напечатайте:
Напечатайте:


<syntaxhighlight lang="javascript" enclose="div">
LED2
LED2
</syntaxhighlight>


Если вам выдало ошибку Uncaught ReferenceError: "LED2" is not defined, то это значит, что у вашего устройства только один светодиод. Если так, то можете пропустить ниже моменты, где используется LED2.  
Если вам выдало ошибку '''Uncaught ReferenceError: "LED2" is not defined''', то это значит, что у вашего устройства только один [[светодиод]]. Если так, то можете пропустить ниже моменты, где используется [[LED2]].  


Напечатайте:
Напечатайте:


<syntaxhighlight lang="javascript" enclose="div">
edit('toggle')
edit('toggle')
</syntaxhighlight>


В терминале должна появиться заданная вами функция toogle() – можете начинать её редактировать. Режим редактирования функции можно включить и по-другому. Нажимайте на клавишу «Вверх», пока не вернётесь к команде, с помощью которой задавали функцию toogle(). Теперь просто переместите курсор назад с помощью клавиши «Влево» и начинайте редактировать функцию. После третьей строчки добавьте ещё одну строчку, чтобы функция стала выглядеть вот так (чтобы добавить новую строчку после digitalWrite(), переместите курсор в конец третьей строчки и нажмите на Enter):
В терминале должна появиться заданная вами функция '''toogle()''' – можете начинать её редактировать. Режим редактирования функции можно включить и по-другому. Нажимайте на клавишу '''«Вверх»''', пока не вернётесь к команде, с помощью которой задавали функцию '''toogle()'''. Теперь просто переместите курсор назад с помощью клавиши '''«Влево»''' и начинайте редактировать функцию. После третьей строчки добавьте ещё одну строчку, чтобы функция стала выглядеть вот так (чтобы добавить новую строчку после digitalWrite(), переместите курсор в конец третьей строчки и нажмите на {{клавиша|Enter}}):


<syntaxhighlight lang="javascript" enclose="div">
function toggle() {
function toggle() {
  on = !on;
  on = !on;
Строка 105: Строка 124:
  digitalWrite(LED2, !on);
  digitalWrite(LED2, !on);
}
}
</syntaxhighlight>


Теперь переместите курсор в конец самой последней строчки функции при помощи клавиш со стрелочками (или нажмите Page Down) и нажмите Enter. Это выполнит команду, которая переопределит нашу функцию – теперь будет загораться светодиод LED1, потом LED2, потом LED1 и так далее.
Теперь переместите курсор в конец самой последней строчки функции при помощи клавиш со стрелочками (или нажмите {{клавиша|Page Down}}) и нажмите {{клавиша|Enter}}. Это выполнит команду, которая переопределит нашу функцию – теперь будет загораться светодиод '''LED1''', потом '''LED2''', потом '''LED1''' и так далее.


Теперь мы можем изменить скорость мигания светодиодов при помощи следующей команды:
Теперь мы можем изменить скорость мигания светодиодов при помощи следующей команды:


<syntaxhighlight lang="javascript" enclose="div">
changeInterval(i, 200)
changeInterval(i, 200)
</syntaxhighlight>


Это то же самое, как если бы мы вначале вызвали var i = setInterval(toggle, 200) – теперь toogle() будет вызываться каждые 200 мс (5 раз в секунду).
Это то же самое, как если бы мы вначале вызвали '''var i = setInterval(toggle, 200)''' – теперь '''toogle()''' будет вызываться каждые ''200 мс (5 раз в секунду)''.


А если вы хотите, чтобы светодиоды перестали мигать, просто напечатайте это:
А если вы хотите, чтобы светодиоды перестали мигать, просто напечатайте это:


<syntaxhighlight lang="javascript" enclose="div">
clearInterval(i)
clearInterval(i)
</syntaxhighlight>


Обратите внимание, что если вы просто напечатаете clearInterval() безо всяких аргументов, это удалит все активные интервалы.
Обратите внимание, что если вы просто напечатаете clearInterval() безо всяких аргументов, это удалит все активные интервалы.
Строка 122: Строка 146:
Если вы хотите начать полностью с чистого листа, удалив всё, что сделали раньше, просто напечатайте:
Если вы хотите начать полностью с чистого листа, удалив всё, что сделали раньше, просто напечатайте:


<syntaxhighlight lang="javascript" enclose="div">
reset()
reset()
</syntaxhighlight>


Это выполнит сброс платы. Кроме того, Espruino можно сбросить, нажав на кнопку сброса на плате (если у неё есть такая кнопка). Но мы так делать не рекомендуем, на большинстве плат это также сбросит USB/Bluetooth-соединение, так что вам также, возможно, нужно будет перезапустить терминал, а в некоторых случаях – даже отключить и снова подключить устройство.  
Это выполнит сброс платы. Кроме того, [[Espruino]] можно сбросить, нажав на кнопку сброса на плате (если у неё есть такая кнопка). Но мы так делать не рекомендуем, на большинстве плат это также сбросит USB/Bluetooth-соединение, так что вам также, возможно, нужно будет перезапустить терминал, а в некоторых случаях – даже отключить и снова подключить устройство.  


Если отключить Espruino-устройство от питания или сбросить его при помощи кнопки сброса, это сотрёт весь код, который вы написали. Чтобы не допустить этого и сохранить текущее состояние Espruino, воспользуйтесь командой save() (более подробно об этом читайте [https://www.espruino.com/Saving тут]).
Если отключить [[Espruino-устройство]] от питания или сбросить его при помощи кнопки сброса, это сотрёт весь код, который вы написали. Чтобы не допустить этого и сохранить текущее состояние [[Espruino]], воспользуйтесь командой save() (более подробно об этом читайте [https://www.espruino.com/Saving тут]).


Команда save() сохраняет текущее состояние контактов и периферийных устройств Espruino, а также все ваши функции, переменные, прерывания и таймеры. Впрочем, команды, которые вы напечатали ранее, повторно выполнены не будут. Поэтому, если вы хотите, чтобы при запуске Espruino выполнялся какой-то код (например, вам нужно инициализировать какое-то внешнее устройство вроде LCD-дисплея), то можете воспользоваться для этого событием init() на объекте E. Например, код ниже при каждом новом запуске Espruino будет включать сначала красный, а потом зелёный светодиод.
Команда save() сохраняет текущее состояние контактов и периферийных устройств [[Espruino]], а также все ваши функции, переменные, прерывания и таймеры. Впрочем, команды, которые вы напечатали ранее, повторно выполнены не будут. Поэтому, если вы хотите, чтобы при запуске [[Espruino]] выполнялся какой-то код (например, вам нужно инициализировать какое-то внешнее устройство вроде LCD-дисплея), то можете воспользоваться для этого событием init() на объекте E. Например, код ниже при каждом новом запуске [[Espruino]] будет включать сначала красный, а потом зелёный [[светодиод]].


Примечание: На смарт-часах Bangle.js этот код работать не будет. Поскольку у них нет светодиодов, они используют для них специальный «виртуальный» контакт, который несовместим с использованием в виде массива в digitalWrite(). Вместо этого вы можете просто напечатать digitalWrite(LED1,...);digitalWrite(LED2,...);.
'''Примечание:''' На смарт-часах [[Bangle.js]] этот код работать не будет. Поскольку у них нет светодиодов, они используют для них специальный «виртуальный» контакт, который несовместим с использованием в виде массива в digitalWrite(). Вместо этого вы можете просто напечатать '''digitalWrite(LED1,...);digitalWrite(LED2,...);'''.


<syntaxhighlight lang="javascript" enclose="div">
E.on('init', function() {
E.on('init', function() {
   digitalWrite([LED1,LED2], 2);
   digitalWrite([LED1,LED2], 2);
Строка 137: Строка 164:
   setTimeout("digitalWrite([LED1,LED2], 0);", 2000);
   setTimeout("digitalWrite([LED1,LED2], 0);", 2000);
});
});
</syntaxhighlight>


Примечание: Чтобы Espruino делала на запуске что-то ещё, вы можете вызвать E.on('init', ...) ещё раз. Кроме того, с такой же целью можно воспользоваться функцией onInit() – то, что будет задано в ней, также будет выполнено автоматически.  
'''Примечание:''' Чтобы [[Espruino]] делала на запуске что-то ещё, вы можете вызвать '''E.on('init', ...)''' ещё раз. Кроме того, с такой же целью можно воспользоваться функцией onInit() – то, что будет задано в ней, также будет выполнено автоматически.  


В коде выше используется несколько новых функций Espruino, о которых мы ещё не рассказывали:
В коде выше используется несколько новых функций Espruino, о которых мы ещё не рассказывали:
* В аргументе digitalWrite() можно задать массив контактов (как и в digitalRead()). Задаваемые таким образом значения будут восприниматься как двоичные данные, где самый младший бит будет самым правым контактом в массиве и так далее.
* В аргументе digitalWrite() можно задать массив контактов (как и в digitalRead()). Задаваемые таким образом значения будут восприниматься как двоичные данные, где самый младший бит будет самым правым контактом в массиве и так далее.
* Если задать в аргументе функции setTimeout() или setInterval() строку, она будет воспринята как функция и выполнена через определённый промежуток времени.
* Если задать в аргументе функции setTimeout() или setInterval() строку, она будет воспринята как функция и выполнена через определённый промежуток времени.
Если вы загрузили на Espruino какой-то, как выяснилось, неработающий код, не волнуйтесь – восстановление делается очень просто. Просто загляните в [https://www.espruino.com/Troubleshooting эту статью].
Если вы загрузили на [[Espruino]] какой-то, как выяснилось, неработающий код, не волнуйтесь – восстановление делается очень просто. Просто загляните в [https://www.espruino.com/Troubleshooting эту статью].


Теперь вы должны более-менее понимать, как писать код для Espruino. Поэтому:
Теперь вы должны более-менее понимать, как писать код для [[Espruino]]. Поэтому:
* Взгляните на ознакомительную статью по вашей плате – она содержит более подробную информацию о вашей плате, а также ссылки на руководства, соответствующие вашему устройству:
* Взгляните на ознакомительную статью по вашей плате – она содержит более подробную информацию о вашей плате, а также ссылки на руководства, соответствующие вашему устройству:
** [https://www.espruino.com/Pico Espruino Pico]
** [https://www.espruino.com/Pico Espruino Pico]
Строка 160: Строка 188:
* Можете воспользоваться [[http://wikihandbk.com/ruwiki/index.php?search=&title=Служебная%3AПоиск&profile=default&fulltext=1 поиском по всей документации Espruino].
* Можете воспользоваться [[http://wikihandbk.com/ruwiki/index.php?search=&title=Служебная%3AПоиск&profile=default&fulltext=1 поиском по всей документации Espruino].
* Если у вас есть вопрос, можете задать его на [http://forum.espruino.com/ форуме].
* Если у вас есть вопрос, можете задать его на [http://forum.espruino.com/ форуме].
<syntaxhighlight lang="javascript" enclose="div">
</syntaxhighlight>


=См.также=
=См.также=

Версия от 21:52, 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. Поэтому:

См.также

Внешние ссылки