Espruino:Примеры/Быстрый старт (написание кода)

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Быстрый старт (написание кода)[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. Поэтому:

См.также

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