- PVSM.RU - https://www.pvsm.ru -

Smart.js – (больше чем) новая прошивка для ESP8266

На хабре достаточно часто публикуют статьи о различных проектах на основе популярного чипа ESP8266, поэтому не буду рассказывать о нём самом.

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

image

За подробностями — прошу под кат.

Сразу оговорюсь, что эта статья — обзорная, в ней я постараюсь рассказать о том, что умеет Smart.js, и очень мало коснусь того, как это всё устроено. Если будет интерес узнать как оно работает — это может быть темой следующей статьи (а еще можно посмотреть исходники [1]).

Итак, что же у нас под капотом?

Прежде всего это движок JS по имени V7 [2], разработанный Cesanta. Не останавливаясь на нём слишком подробно, отмечу лишь, что этот движок изначально разрабатывался для встраиваемых платформ, поэтому отличается маленьким размером, небольшим потреблением памяти, отличной портабельностью и высокой степенью конфигурируемости. Однако, просто JS интерпретатор на ESP8266 был бы вещью в себе, поэтому Smart.js умеет общаться с внешним миром.

  • I2C. Описание API можно прочитать на гитхабе [3], так же есть два примера «драйверов» устройств (температурный датчик [4] и EEPROM [5]). I2C реализован посредством bit-bang, особенностей в нём быть не должно;
  • SPI. ESP имеет два SPI интерфейса, в документации к устройству они называются SPI и HSPI, где HSPI, вроде как, обозначает Hardware SPI. «Просто» SPI используется самим чипом для работы с флешом, в итоге он постоянно занят. Можно туда влезть с bit-bang'ом, но пока этого делать не стали, ограничились поддержкой HSPI (кстати, есть отличный блог про ESP, в котором много рассказывается про SPI, рекомендую [6]). Описание нашего API всё там же [7];
  • WiFi. Было бы странно не поддерживать WiFi. Поэтому поддерживаем [8];
  • Файловая система. Имеется [9], базируется на SPIFFS;
  • Так же есть API для работы с GPIO [10] и простой HTTP клиент [11];
  • … и набор различных вспомогательных функций [12].

В общем, если будет интересно — прочитайте readme [13], мы постарались описать всё, что есть.

Теперь немного о быстром старте.

Скачиваем со архив Flash'n'Chips [14]. Flash'n'chips — это «фирменный» прошивальщик. Можно использовать любой, но Flash'n'chips сразу генерирует device id и пароль необходимые для подключения к облаку. Есть версия под OS X и Windows.

И линукс.

Пользователям Linux предлагается собрать всё самим, но это просто, да и привычные они.

Кроме самого прошивальщика в архиве лежит «релизная» (т. е. Альфа) прошивка.

Подключаем ESP8266 к USB, запускаем Flash'n'chips, и видим примерно такую картинку:

image

Жмём «Load firmware» — и прошивка зальётся на устройство. В зависимости от того, какая у вас ESP, могут потребоваться дополнительные телодвижения. Я, например, использую простейшую ESP01, так что перед прошивкой мне надо подключить GPIO0 к GND.

Подключаемся терминалом. (В Flash'N'Chips есть и встроенный, мне привычнее picocom, но это не принципиально). Скорость — 115200.

Видим консоль.

Старались сделать её максимально удобной, но башу сотоварищи пока проигрываем.

В этой консоли можно сразу же набирать JS код. («smartjs NNN/MM$» — это приглашение командной строки, NNN — количество свободной памяти, MM — количество памяти потребляемое в данный момент непосредственно интерпретатором).
Выглядит как обычная консоль.

image

При нажатии 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/