- PVSM.RU - https://www.pvsm.ru -
На хабре достаточно часто публикуют статьи о различных проектах на основе популярного чипа ESP8266, поэтому не буду рассказывать о нём самом.
Сразу к сути: мы разработали новую прошивку для данного устройства, предлагающую использовать для разработки язык JavаScript. Но, Smart.js это не только прошивка-интерпретатор JS, это ещё и различный «обвес» для работы с оборудованием и облачная инфраструктура.

За подробностями — прошу под кат.
Сразу оговорюсь, что эта статья — обзорная, в ней я постараюсь рассказать о том, что умеет Smart.js, и очень мало коснусь того, как это всё устроено. Если будет интерес узнать как оно работает — это может быть темой следующей статьи (а еще можно посмотреть исходники [1]).
Итак, что же у нас под капотом?
Прежде всего это движок JS по имени V7 [2], разработанный Cesanta. Не останавливаясь на нём слишком подробно, отмечу лишь, что этот движок изначально разрабатывался для встраиваемых платформ, поэтому отличается маленьким размером, небольшим потреблением памяти, отличной портабельностью и высокой степенью конфигурируемости. Однако, просто JS интерпретатор на ESP8266 был бы вещью в себе, поэтому Smart.js умеет общаться с внешним миром.
В общем, если будет интересно — прочитайте readme [13], мы постарались описать всё, что есть.
Теперь немного о быстром старте.
Скачиваем со архив Flash'n'Chips [14]. Flash'n'chips — это «фирменный» прошивальщик. Можно использовать любой, но Flash'n'chips сразу генерирует device id и пароль необходимые для подключения к облаку. Есть версия под OS X и Windows.
Кроме самого прошивальщика в архиве лежит «релизная» (т. е. Альфа) прошивка.
Подключаем ESP8266 к USB, запускаем Flash'n'chips, и видим примерно такую картинку:

Жмём «Load firmware» — и прошивка зальётся на устройство. В зависимости от того, какая у вас ESP, могут потребоваться дополнительные телодвижения. Я, например, использую простейшую ESP01, так что перед прошивкой мне надо подключить GPIO0 к GND.
Подключаемся терминалом. (В Flash'N'Chips есть и встроенный, мне привычнее picocom, но это не принципиально). Скорость — 115200.
В этой консоли можно сразу же набирать JS код. («smartjs NNN/MM$» — это приглашение командной строки, NNN — количество свободной памяти, MM — количество памяти потребляемое в данный момент непосредственно интерпретатором).
Выглядит как обычная консоль.

При нажатии Enter команда выполняется и её результат выводится в консоль, т.е. можно обойтись без множества “print”. Другой способ написать и запустить JS код — это набрать его в любимом редакторе, сохранить в файл и загрузить на устройство. Проще всего это сделать с помощью всё того же Flash'n'Chips — в комбобоксике Select Action выберите «Upload file».
Теперь файл можно выполнить посредством команды File.load(«имя файла»), набрав эту команду в консоле, или добавив её в файл init.js (тогда файл автоматически выполнится при старте устройства).
Прошивкой для ESP8266 Smart.js не ограничивается. Как я уже писал выше, ещё есть облако, куда можно оправлять данные с устройства, хранить их там, забирать их оттуда, ну или просто смотреть на графики. API для отправки данных в облако прилагается [15].
Для быстрого старта мы записали небольшое видео:
Т.е. если вам нужно, например, мониторить температуру в квартире, то почти ничего не придётся делать. Достаточно подключить к ESP датчик температуры, написать “драйвер” (или взять готовый) на JS, зарегистрироваться в облаке, написать небольшой скрипт считывающий температуру и отправляющий его в облако. А потом заходить на сайт и смотреть на график.
Безусловно, прошивка будет работать и без облака. Но с облаком удобнее, часть рутинной работы отсекается. На гитхабе есть ссылка на облако [16], a если у вас есть гитхабовская же или G+ учётка, то регистрация в нём уложится в пару кликов.
Ну а если вам не хватает каких-то функций, то всегде можно воспользоваться C. Можно просто написать новую функциональность на C, никак не связывая его с JS. При этом останется возможность использовать почти все API которые есть (в большинстве случаев JS API — тонкая обёртка над сишными функциями), кроме того, можно пользоваться функциями ESP SDK. Собрать прошивку из исходников не сложно [17], благодаря наличию образов docker.
Можно расширить JS. Для этого пишем на C необходимую функциональность, а потом делаем её доступной в JS. Это тоже не сложно [18] :).
Для тех, что имел дело с ESP8266 Smart.js покажется похожей на NodeMCU. Спорить не буду — пока похоже. Но у нас большие планы по развитию Smart.js и по портированию на другие устройства, так что со временем, я думаю, сходства будет всё меньше.
Кстати о наших планах. Сейчас статус Smart.js — ALPHA 1. Следующий релиз намечен на осень (что, разумеется, не мешает желающим собирать прошивку из исходников с любой периодичностью). К осени мы увеличим объём доступной для пользователя памяти, сделаем обновление скриптов из облака (т. е. теоретически можно будет вообще никогда не подключать ESP8266 к компьютеру), сделаем порт на другие платформы и тд.
А сейчас же нам важно получить фидбек. Нравится ли? Чего не хватает? Что лишнее? Интересно ВСЁ!
Так что — качайте прошивку — пробуйте, мы будем рады. Лицензия двойная, GPLv2 для всех желающих и коммерческая для тех, кому не подходит GPL и/или нужна поддержка.
Автор: athree
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/94546
Ссылки в тексте:
[1] исходники: https://github.com/cesanta/smart.js
[2] V7: https://github.com/cesanta/v7
[3] гитхабе: https://github.com/cesanta/smart.js#i2c
[4] температурный датчик: https://github.com/cesanta/smart.js/blob/master/platforms/esp8266/fs/MCP9808.js
[5] EEPROM: https://github.com/cesanta/smart.js/blob/master/platforms/esp8266/fs/MC24FC.js
[6] рекомендую: http://d.av.id.au/blog/tag/spi/
[7] там же: https://github.com/cesanta/smart.js#spi
[8] поддерживаем: https://github.com/cesanta/smart.js/blob/master/README.md#wifi
[9] Имеется: https://github.com/cesanta/smart.js/blob/master/README.md#file
[10] GPIO: https://github.com/cesanta/smart.js/blob/master/README.md#gpio
[11] HTTP клиент: https://github.com/cesanta/smart.js/blob/master/README.md#http
[12] вспомогательных функций: https://github.com/cesanta/smart.js/blob/master/READMEmd#built-in-functions
[13] readme: https://github.com/cesanta/smart.js/blob/master/README.md
[14] Flash'n'Chips: https://github.com/cesanta/smart.js/releases/tag/alpha1
[15] прилагается: https://github.com/cesanta/smart.js/blob/master/README.md#cloud
[16] облако: https://github.com/cesanta/smart.js#cloud
[17] не сложно: https://github.com/cesanta/smart.js/blob/master/README.md#building-smartjs-firmware
[18] не сложно: https://github.com/cesanta/smart.js/blob/master/README.md#extending-smartjs-firmware
[19] Источник: http://geektimes.ru/post/259260/
Нажмите здесь для печати.