Можно ли запрограммировать Arduino на транспилированном JavaScript?
Исходя из JS, мне очень трудно программировать Arduino на C++ (даже не зная , какая версия или какие функции поддерживаются), будучи привязанным к циклу
и задержке
, не имея возможности (легко) использовать анонимные функции в параметрах или асинхронном коде.
Я знаю, что JS изначально не поддерживается Arduino, но я знаю, что языки могут быть транспилированы.
Я видел много решений, так что просто выберу несколько:
JohnnyFive J5, который работает по кабелю на главном КОМПЬЮТЕРЕ,
NectarJS с их целью arduino-uno
или andrey-markeev/ts2c, который преобразует ES3 в C89.
Каждый из них имеет свои собственные ограничения, и очень трудно найти правильный без предварительного опыта работы с IoT. Кто-нибудь уже прошел этот путь и нашел жизнеспособное решение?
@Qwerty, 👍3
Обсуждение3 ответа
Даже если такой трансплайер существует (чего я не знаю), вам все равно придется иметь дело со структурой цикла
и тем фактом, что вы должны избегать использования задержки
s. На микроконтроллере вам придется забыть о таких вещах, как многопоточность, и даже динамическое распределение памяти следует использовать осторожно.
Большинство из тех вещей, которые облегчают жизнь программиста в больших системах, обычно оплачиваются оперативной памятью или мощностью процессора, но на микроконтроллере с некоторой ОЗУ в кБ есть только несколько ресурсов, с помощью которых можно платить.
Поэтому я рекомендую изучать C++ вместо того, чтобы искать способы преобразования кода с другого языка, что, вероятно, создаст свои собственные проблемы. Вы скоро окажетесь на один слой ниже, и есть захватывающие вещи, которые высшие языки скрывают от вас.
Возможно ли, что некоторые конструкции C++ допустимы, но не работают специально на устройствах Интернета вещей? _(В моем случае крошечный LC или 3.2.)_, @Qwerty
В JavaScript вы не используете ни " delay ()", ни многопоточность: вы не блокируете программирование в одном потоке, выполняющем цикл событий. Это именно тот подход, который вы использовали бы в C++ на микроконтроллере., @Edgar Bonet
Почему бы вам просто не начать с микроконтроллера, поддерживающего 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
андрей-маркеев/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
- Arduino Micro против Pro Micro
- Arduino Pro Micro не распознается компьютером и не отображается в портах
- Вложенный цикл
- Программирование Arduino Micro через RX/TX
- В чем разница между выводами SCLK и CLK?
- TCCR1A и TCCR2A на Леонардо
- 433 МГц отправка не принимается
- Как прервать соединение HM10 Bluetooth?
Простите меня, если этот вопрос неуместен для этого сайта. Это мой первый вопрос здесь, и я совершенно новичок в IoT. Однако откровенное нисхождение, без предоставления обратной связи, на самом деле не является конструктивным и гостеприимным по отношению к новым членам., @Qwerty
Я предлагаю вам посмотреть на платы и компоненты, которые поддерживаются этими фреймворками, прежде чем вы возьмете на себя обязательства по любому из них. Может быть, начать здесь, http://johnny-five.io/api и посмотрите, будут ли поддерживаемые компоненты покрывать то, чего вы пытаетесь достичь., @Eat at Joes
моя рекомендация такова: изучайте C++, @Juraj
Просто погрузитесь и изучите C++, пока вы идете. Вы также можете попробовать изучить Python, чтобы запрограммировать свой Teensy в Circuitpython или Micropython (хотя теперь я вижу, что это может быть непросто сделать на Teensy)., @StarCat