Можно ли запрограммировать Arduino на транспилированном JavaScript?

Исходя из JS, мне очень трудно программировать Arduino на C++ (даже не зная , какая версия или какие функции поддерживаются), будучи привязанным к циклу и задержке, не имея возможности (легко) использовать анонимные функции в параметрах или асинхронном коде.

Я знаю, что JS изначально не поддерживается Arduino, но я знаю, что языки могут быть транспилированы.

Я видел много решений, так что просто выберу несколько:
JohnnyFive J5, который работает по кабелю на главном КОМПЬЮТЕРЕ,
NectarJS с их целью arduino-uno
или andrey-markeev/ts2c, который преобразует ES3 в C89.

Каждый из них имеет свои собственные ограничения, и очень трудно найти правильный без предварительного опыта работы с IoT. Кто-нибудь уже прошел этот путь и нашел жизнеспособное решение?

, 👍3

Обсуждение

Простите меня, если этот вопрос неуместен для этого сайта. Это мой первый вопрос здесь, и я совершенно новичок в IoT. Однако откровенное нисхождение, без предоставления обратной связи, на самом деле не является конструктивным и гостеприимным по отношению к новым членам., @Qwerty

Я предлагаю вам посмотреть на платы и компоненты, которые поддерживаются этими фреймворками, прежде чем вы возьмете на себя обязательства по любому из них. Может быть, начать здесь, http://johnny-five.io/api и посмотрите, будут ли поддерживаемые компоненты покрывать то, чего вы пытаетесь достичь., @Eat at Joes

моя рекомендация такова: изучайте C++, @Juraj

Просто погрузитесь и изучите C++, пока вы идете. Вы также можете попробовать изучить Python, чтобы запрограммировать свой Teensy в Circuitpython или Micropython (хотя теперь я вижу, что это может быть непросто сделать на Teensy)., @StarCat


3 ответа


2

Даже если такой трансплайер существует (чего я не знаю), вам все равно придется иметь дело со структурой цикла и тем фактом, что вы должны избегать использования задержкиs. На микроконтроллере вам придется забыть о таких вещах, как многопоточность, и даже динамическое распределение памяти следует использовать осторожно. Большинство из тех вещей, которые облегчают жизнь программиста в больших системах, обычно оплачиваются оперативной памятью или мощностью процессора, но на микроконтроллере с некоторой ОЗУ в кБ есть только несколько ресурсов, с помощью которых можно платить.

Поэтому я рекомендую изучать C++ вместо того, чтобы искать способы преобразования кода с другого языка, что, вероятно, создаст свои собственные проблемы. Вы скоро окажетесь на один слой ниже, и есть захватывающие вещи, которые высшие языки скрывают от вас.

,

Возможно ли, что некоторые конструкции C++ допустимы, но не работают специально на устройствах Интернета вещей? _(В моем случае крошечный LC или 3.2.)_, @Qwerty

В JavaScript вы не используете ни " delay ()", ни многопоточность: вы не блокируете программирование в одном потоке, выполняющем цикл событий. Это именно тот подход, который вы использовали бы в C++ на микроконтроллере., @Edgar Bonet


0

Почему бы вам просто не начать с микроконтроллера, поддерживающего Javascript?

Я нахожу, что с Adafruit Circuit Playground Express довольно весело работать. Вы все еще можете подключать датчики и другое оборудование, то же самое, что вы можете сделать с Arduino. Он также имеет множество встроенных датчиков.

Вы можете попробовать это прямо сейчас, не имея аппаратной платы на adafruit.makecode.com. Перейдите на вкладку Javascript в верхней части страницы.

Использование транспилятора JS>Arduino, вероятно, вызовет сильную головную боль, так как он часто не будет делать то, что вы от него ожидаете.>

,

Я купил "Тинси" специально, потому что он лучше всего подходит для HID. Я хочу перепрофилировать старую клавиатуру, но если бы я хотел сделать что-то большее, я бы, вероятно, выбрал плату, которая поддерживает node.js и JavaScript., @Qwerty

Нет никаких плат, которые поддерживают node.js к сожалению. Вы можете запустить Johnny Five почти на каждой плате, но это работает на вашем компьютере. Это позволяет считывать плату через USB-кабель., @Kokodoko

Мне пришлось отложить проект на некоторое время, но теперь, когда я думаю об этом... Клавиатура в любом случае должна быть подключена к ПК, так что я могу также запускать nodejs для управления ею. В конце концов, Johny Five может оказаться лучшим решением для взлома. После того, как PoC заработает, я могу переписать его на C++., @Qwerty


0

андрей-маркеев/ts2c JavaScript/TypeScript to C transpiler выглядит многообещающе.

Я, наверное, попробую сегодня.

Согласно странице github:

Производит читаемый код C89 из кода JS/TS.

Например, это JavaScript:

console.log("Hello world!");

транспилируется в следующий код C:

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return 0;
}

src: https://github.com/andrei-markeev/ts2c

,