95

Асинхронная Arduino c JavaScript - Espruino

Всем доброго времени суток.


Начну с простого вопроса. Хотели бы вы иметь полностью асинхронную ардуинку с интерпретатором JavaScript и при том иметь возможность открывать скетч прямо с платы? Мне бы хотелось, например. Это дает невероятные возможности как в разработке так и в исполнении кода.


Сегодня при гуглении интерпретатора JS для ардуинки я забрел на сайт Espruino. Оказалось что я нашел нечто большее чем искал.

Очередной клон ардуино? Вовсе нет. В данных платах используются процессоры STM32F103RCT6 ARM Cortex M3 и STM32F401CDU6 ARM Cortex M4. Это дает неплохие возможности для разработки.


В первую очередь меня заинтересовала заявленная возможность использовать JS вместо C++. JS компактней и более ориентирован на простую и быструю разработку. К примеру кусок кода который будет моргать светодиодом будет выглядеть так:


var l;

setInterval( function () {

digitalWrite(LED1,l=!l); 

},200);


Никакого единого loop() и монструозных функций. Можно использовать объекты и цепочки вызовов с return.


Из того что на плате стоит интерпретатор выливается следующий огромный плюс. Можно использовать родные для JS setTimeout и setInterval вместо delay, а это дает нам асинхронность выполнения кода т.к. при delay плата тупо прерывает работу на заданное количество мс в случае с setInterval и setTimeout просто запускается таймер и продолжается работа процессора.


Но при чем тут Arduino хотите спросить вы? Да при том что небезызвестная нам Амперка выпускает Espruino в форм-факторе Arduino и большая часть шилдов и датчиков с ней совместима. Благо что все либы на C++.

Сама платка.

Распиновка.


Что хочется добавить. Плата интересная но стоит прилично в чем явно проигрывает ардуине. Из минусов языка это нестрогая типизация переменных. Из плюсов - проект опенсорсный и ядро шьется на другие микрухи. Еще одним минусом является конская стоимость этого чуда на али.


В ближайшее время постараюсь заказать это чудо "российской сборки" и запилить на нем что-нибудь.


Для желающих более подробно ознакомиться с Искрой или Espruino добавляю ссылки.

https://geektimes.ru/company/amperka/blog/273664/ - очень подробно про эспруино и искру.

http://www.espruino.com/ - родной сайт эспруино.


Надеюсь хоть кому-то этот пост будет интересен.)

Arduino & Pi

1.5K постов20.9K подписчика

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
1
DELETED
Автор поста оценил этот комментарий

while (1)

{

PORTB=PORTB^32;

delay(200);

}

По-моему, не менее компактно) а вот скорость выполнения JS vs Cpp интересно было бы сравнить, меандр на осциллоскопе проверить например этой конструкции:

while (1)

{

PORTB=0;

PORTB=1;

}

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Я вот думаю сейчас платку заказать и сделать бенчмарки. Мне самому очень интересно как все это будет по производительности. Хотя по факту что есть в данном случае интерпретатор. Тот же си только с методами обозванными как в js +  фичи js типа чейнингов и объектов. Думаю сильной разницы в скорости исполнения кода не будет. Тут именно фишка в асинхроне, никакого прерывания потока, куча таймеров которые могут срабатывать одновременно и порознь, возможность реализации кучи всякой переферии одновременно без дополнительных регистров и черной магии. Плюсов много. Но бенчмарки я таки сделаю на нейтральном коде при использовании Cpp и JS.

раскрыть ветку (3)
0
DELETED
Автор поста оценил этот комментарий

Собственно скорость, с которой можно портами дергать - наиболее интересна, особенно в части прямого управления двигателями и пересылке радиосигналов. Последний код дает около 4 Мгц на уно, которая 16 мгц, то есть условно -  4 такта. Или возможно 4 мгц дает

while (1) PORTB=PORTB^1;
Не помню, что конкретно, а осцилка нет.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Кстати, только додумался. На сайте эспруино есть страница в бенчами. http://www.espruino.com/Performance

Ну и это может тоже будет интересно. http://forum.espruino.com/conversations/262232/

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

"While code like this will toggle a pin at around 3.5kHz."

Если в С++ использовать loop, а не while(1), то получается 2МГц+


Ниже .25 мс вроде как не смогли опуститься, значит все же дольше выходит.

На ардуино можно писать быстрый хороший код, если лазить в библиотеки, и смотреть, где же можно скосить процессорное время себе в карман. Опять же можно очень сурово ускорить те же цифровые чтения портов.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества